Funda Netherlands Real Estate Scraper icon

Real estate

Funda Netherlands Real Estate Scraper

Scrape normalized sale and rent listings from Funda.nl, the dominant Dutch property portal — clean EUR pricing, m² living area, EU energy-label letters, room/bathroom counts, and photo galleries per listing, with page- and listing-level fault isolation and a geo-splash guard neither incumbent documents.

Free Apify credit covers a first run. No credit card to try.

What this Actor scrapes

Funda.nl is the dominant property portal in the Netherlands, and its existing scraper field is crowded but untrusted: easyapi/funda-nl-scraper runs 4,870 jobs a month on a 5★ rating built from just 2 reviews, and ivanvs/funda-scraper runs 4,975 jobs with 0★ in a crowded field where nobody has earned trust at scale. This Actor mirrors the schema conventions of our other real-estate Actors (idealista, Rightmove, Bayut, Domain.com.au, Suumo) so buyers already comparing markets get the same clean shape here — normalized EUR pricing, m² living area, EU energy-label letters, room and bathroom counts, and photo galleries per listing, for both koop (sale) and huur (rent), backed by page- and listing-level fault isolation and a geo-splash guard neither named incumbent documents.

What we handle for you

  • 🛡️ Browser fingerprint rotationcurl-cffi impersonates real Chrome / Firefox / Safari TLS handshakes, rotated across requests, so the target sees a browser, not Python.
  • 🌐 Proxy session rotation via Apify Proxy — fresh session and exit IP on every block, always pinned to a Dutch (NL) exit so you never get a wrong-country page silently.
  • 🔁 Retries with exponential backoff on 408 / 429 / 5xx — up to 5 attempts per page, Retry-After honoured.
  • 🧱 Page- and listing-level fault isolation — one blocked page or one bad listing is skipped and logged, never crashes the run.
  • 🧊 Clean, typed dataset rows — Pydantic-validated, ISO-8601 timestamps, listing_id always sourced from the URL (never Funda's own occasionally-mismatched internal ID).
  • 💰 Pay-Per-Event pricing — you only pay for results that hit your dataset. No data, no charge.

Use cases

  • Home-buyer market research — pull current koop listings for a Dutch city, normalized price-per-m² included, to compare neighborhoods fast.
  • Rental market benchmarking — track huur listing prices and living area across Amsterdam, Rotterdam, and other cities.
  • PropTech and real-estate analytics — feed a clean, deduped listings dataset into a pricing or valuation model.
  • Relocation services — build client-facing property shortlists with energy label and HOA fee data included.

Input

Paste this into the Apify Console, or send it as the run input over the API. Proxy settings are on by default; you rarely need to touch them.

FieldTypeRequiredWhat it does
searchUrls array no Direct funda.nl/zoeken/(koop|huur) search URLs to scrape as-is, paginated from their start page. Up to 50. One of Search URLs or Location is required.
location string no City slug (e.g. 'amsterdam'), used when Search URLs is unset.
operation string no Sale (koop) vs. rent (huur).
maxResults integer no Cap on rows this run.
enrich boolean no True: fetch each listing's detail page for the full kenmerken field set (area, rooms, bathrooms, year built, energy label, plot area, HOA fee, neighborhood, listed-since). False: summary-only rows from search cards,…
{
  "location": "amsterdam",
  "operation": "sale",
  "maxResults": 5,
  "enrich": true,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}

Output

One row per result, schema-validated before it is written. Export JSON, CSV, Excel or XML from the run, or read it over the API.

listing_idurloperationproperty_typetitlepricecurrencyprice_per_sqmarea_sqmroomsbathroomsenergy_labelcityneighborhoodimage_urlsscraped_at

{
  "listing_id": "44551250",
  "url": "https://www.funda.nl/detail/koop/amsterdam/appartement-afrikanerplein-5-3/44551250/",
  "operation": "sale",
  "property_type": "appartement",
  "title": "Afrikanerplein 5-3",
  "price": 835000.0,
  "currency": "EUR",
  "price_per_sqm": 8186.27,
  "area_sqm": 102.0,
  "plot_area_sqm": null,
  "rooms": 3,
  "bathrooms": 1,
  "year_built": "1925",
  "energy_label": "C",
  "city": "Amsterdam",
  "neighborhood": "Transvaalbuurt-West",
  "listed_since": "3 dagen",
  "hoa_fee": 150.0,
  "image_urls": [
    "https://cloud.funda.nl/valentina_media/232/899/160_1440x960.jpg"
  ],
  "scraped_at": "2026-08-13T12:00:00+00:00"
}

Pricing

EventPriceWhen
Actor start$0.20Once per run, covers warm-up and proxy session setup.
Result row emitted$0.0012Per result written to the dataset.

You pay only for results that land. Cap any run with maxTotalChargeUsd. See pricing & billing for worked examples.

FAQ

Do I need a Funda account or API key?
No. This Actor scrapes Funda.nl's own publicly listed property data — no login, no API key.
What's the difference between enrich on and off?
Enrich on fetches each listing's detail page for the full field set (rooms, bathrooms, year built, energy label, plot area, HOA fee, neighborhood, listed-since). Enrich off returns summary rows straight from the search results — faster and cheaper, but those detail-only fields come back null.
Why is listing_id sometimes different from the ID Funda shows elsewhere on the page?
Funda's own detail-page metadata occasionally carries an internal ID that differs from the ID in the page's own URL. We always use the URL-path ID — it's the stable, visible, dedup-safe one.
Can I scrape a specific search (filters already applied)?
Yes — pass your own funda.nl/zoeken/koop or /zoeken/huur URL via Search URLs and we paginate from there.

Ready to run it?

Open the listing on Apify, paste the input above, and watch rows land. If it ever breaks, it is our problem before it is yours.

Related Actors

Teams that run this also run