Funda Netherlands Real Estate Scraper avatar

Funda Netherlands Real Estate Scraper

Pricing

Pay per event

Go to Apify Store
Funda Netherlands Real Estate Scraper

Funda Netherlands Real Estate Scraper

Scrape normalized sale and rent listings from Funda.nl, the leading Dutch property portal. Get clean price, living area, energy label, room counts, and photo data per listing while we handle blocks, retries, and fingerprint rotation for you.

Pricing

Pay per event

Rating

0.0

(0)

Developer

DevilScrapes

DevilScrapes

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

2 days ago

Last modified

Categories

Share


🎯 What this 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.

⚙️ How to use it

  1. Click Try for free at the top of the page.
  2. Fill in the input form — most fields have sensible defaults.
  3. Click Start. Output streams into the run's dataset.
  4. Export from Storage → Dataset as JSON, CSV, or Excel — or fetch via the API.

📥 Input

FieldTypeRequiredDefaultNotes
searchUrlsarraynoNoneDirect funda.nl/zoeken/(koop
locationstringnoNoneCity slug (e.g. 'amsterdam'), used when Search URLs is unset.
operationstringno'sale'Sale (koop) vs. rent (huur).
maxResultsintegerno100Cap on rows this run.
enrichbooleannoTrueTrue: fetch each listing's detail page for the full kenmerken field set (area, rooms, bathrooms, year built, energy…
proxyConfigurationobjectno{'useApifyProxy': True}No proxy group forced by default (RESIDENTIAL availableCount=0 on FREE tier). The Actor pins country_code='NL'…

Example input

{
"location": "amsterdam",
"operation": "sale",
"maxResults": 5,
"enrich": true,
"proxyConfiguration": {
"useApifyProxy": true
}
}

📤 Output

Every row is one dataset item.

FieldTypeNotes
listing_idstringURL-path numeric ID — never the ld+json internal id, which is observed to differ.
urlstringCanonical detail URL.
operationstring'sale' or 'rent', as requested.
property_type['string', 'null']'appartement'/'huis' from ld+json type or URL slug prefix.
titlestringStreet address, e.g. 'Afrikanerplein 5-3'.
price['number', 'null']Vraagprijs / offers.price.
currencystringAlways 'EUR'.
price_per_sqm['number', 'null']Computed when both price and area_sqm are known.
area_sqm['number', 'null']Woonoppervlakte (detail) or card text (summary).
plot_area_sqm['number', 'null']Perceeloppervlakte, houses only, detail-only.
rooms['integer', 'null']Aantal kamers, detail-only.
bathrooms['integer', 'null']Aantal badkamers, detail-only.
year_built['string', 'null']Bouwjaar, raw string (may be a range), detail-only.
energy_label['string', 'null']Energielabel, EU EPC letter, detail-only.
citystringBreadcrumb / address.addressLocality.
neighborhood['string', 'null']Breadcrumb, detail-only.
listed_since['string', 'null']Aangeboden sinds, raw string, detail-only.
hoa_fee['number', 'null']Bijdrage VvE, apartments only, detail-only.
image_urlsarrayphoto[] gallery URLs (empty OK).
scraped_atstringISO 8601 UTC row-creation timestamp.

Example output

{
"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

Pay-Per-Event — you pay only when these events fire:

EventUSDWhat it is
actor-start$0.05One-off warm-up charge per run
result-row$0.0012Per unique dataset item

Example: 1 000 results at the rates above ≈ $1.25. No subscription, no minimum, no card to start — Apify gives every new account $5 of free credit.

🚧 Limitations

v1 covers the Netherlands only. Agent/broker name and phone enrichment, mortgage calculators, new-development ('nieuwbouw') microsites, saved searches/alerts, historical price-change tracking, map/geo-coordinate fields, and postal code are out of scope for v1. year_built and listed_since ship as raw strings (Funda's own format, including ranges) rather than normalized values.

❓ 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.

💬 Your feedback

Spotted a bug, hit a weird edge case, or need a new field? Open an issue on the Actor's Issues tab on Apify Console — we ship fixes weekly and we read every report.