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 rotation —
curl-cffiimpersonates 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-Afterhonoured. - 🧱 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_idalways 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.
| Field | Type | Required | What 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
| Event | Price | When |
|---|---|---|
| Actor start | $0.20 | Once per run, covers warm-up and proxy session setup. |
| Result row emitted | $0.0012 | Per 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?
What's the difference between enrich on and off?
Why is listing_id sometimes different from the ID Funda shows elsewhere on the page?
Can I scrape a specific search (filters already applied)?
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