Funda.nl Scraper - Dutch Real Estate Listings Extractor avatar

Funda.nl Scraper - Dutch Real Estate Listings Extractor

Pricing

from $3.50 / 1,000 results

Go to Apify Store
Funda.nl Scraper - Dutch Real Estate Listings Extractor

Funda.nl Scraper - Dutch Real Estate Listings Extractor

Funda scraper & API for Dutch real estate: search homes for sale and rent and export address, price, bedrooms, living area, plot, energy label, year built, agent, photos and coordinates. Netherlands property market data and real-estate lead generation — fast, no login.

Pricing

from $3.50 / 1,000 results

Rating

0.0

(0)

Developer

Haketa

Haketa

Maintained by Community

Actor stats

0

Bookmarked

15

Total users

0

Monthly active users

a day ago

Last modified

Features

Limited permissions

Share

Funda.nl Scraper 🇳🇱 — Netherlands Real Estate Listings (Price, m², Energy Label)

Extract structured Dutch property listings from Funda.nl — the #1 real-estate marketplace in the Netherlands — without writing code. This Funda.nl scraper lets you scrape Funda homes and apartments for sale (koop) or for rent (huur) with complete property details: asking price or monthly rent (EUR), living area (m²), plot area, rooms, bedrooms, official energy label (A++++ to G), construction year (bouwjaar), full street address, Dutch postal code, neighbourhood, municipality, amenity flags (garden, balcony, solar panels, heat pump), broker ID/name, description, and high-resolution photo URLs.

Export every listing to JSON, CSV, Excel, or API with 1,000+ results pagination unlocked.

Apify Actor


⚡ At a glance

FeatureDetails
Target PlatformFunda.nl — Dutch Real Estate Portal (NVM / VBO / Vastgoedpro listings)
Transaction TypesHomes for Sale (koop → asking_price) & Homes for Rent (huur → rent_per_month)
Search Modes25-City Dutch Dropdown (areas), Custom Towns/Neighbourhoods (customAreas), Filtered Search URLs (searchUrls), or Direct Listing URLs (startUrls)
Core Data Extractedaddress, postalCode, city, province, price, livingArea (m²), plotArea, rooms, bedrooms, energyLabel, yearBuilt, propertyType, status, brokerId, photos
Sustainability & AmenitiesenergyLabel, energyEfficient, solarPanels (zonnepanelen), heatPump (warmtepomp), garden (tuin), balcony, roofTerrace, privateParking, nationalMonument
Pagination & ScaleAutomatic search pagination (15 listings/page) across 1,000+ listings and multiple Dutch cities
DeduplicationAutomatic deduplication by canonical listing url across all pages and cities
Export FormatsJSON, CSV, Excel (XLSX), HTML, XML, RSS, and Apify REST API

📋 Table of contents


🔎 Why scrape Funda.nl?

Funda.nl is the definitive housing portal of the Netherlands. Almost every residential property listed for sale (koop) or rent (huur) in Amsterdam, Rotterdam, Den Haag (The Hague), Utrecht, Eindhoven, Groningen, Tilburg, Almere, Breda, and Nijmegen appears on Funda first. That makes Funda data the gold standard for Dutch real-estate valuation, investment screening, and housing market analytics.

However, Funda offers no public API, and manual copy-pasting across paginated search results and detail pages is impractical. This Funda.nl data extractor automates the entire workflow: it paginates through search results, visits every property detail page in parallel, merges structured JSON-LD and Nuxt property state into a 35-field record, and outputs a clean table ready for Excel, BI tools, or automated valuation pipelines.

Common reasons teams scrape Funda.nl:

  • 🏷️ Real-Estate Deal Sourcing — spot newly listed homes (sortBy: "date_down") and undervalued properties per square meter across target Dutch gemeenten and postal codes.
  • 📊 Price per m² & Energy Label Analytics — quantify how Dutch energy labels (A++++, A, B vs E, F, G), solar panels, and heat pumps impact asking prices and rental yields.
  • 🧮 Automated Valuation Models (AVM) & Comps — pull live comparable listings (referentieobjecten) with exact livingArea, plotArea, yearBuilt, and postalCode.
  • 🏢 PropTech & Relocation Feeds — power expat housing platforms, mortgage calculators, and property alert bots with fresh Dutch inventory.
  • 🧑‍💼 Makelaar & Inventory Intelligence — track active listings by brokerId / brokerName, status (beschikbaar, onder bod), and neighbourhood (buurt).
  • 🎓 Urban & Housing Affordability Research — compile longitudinal datasets on Dutch housing supply, leasehold (erfpacht), and energy transition adoption.

✨ What this Funda.nl scraper does

  • ✅ 4 Flexible Input Modes — select from a 25-city Dutch dropdown (areas), type any custom municipality or neighbourhood slug in customAreas (e.g., gouda, amsterdam/centrum), paste full filtered Funda search URLs (searchUrls), or scrape individual listing URLs (startUrls).
  • ✅ Both Sale (koop) & Rent (huur) — seamlessly switches between purchase asking prices (priceType: "asking_price") and monthly rents (priceType: "rent_per_month").
  • ✅ 35+ Structured Property Fields — combines JSON-LD schema and Nuxt property state to extract address, 6-character Dutch postalCode (1077ZR), city, province, price, livingArea, plotArea, rooms, bedrooms, energyLabel, yearBuilt, propertyType, buildType, leasehold, status, neighbourhood, municipality, 7 boolean amenity flags, brokerId, brokerName, description, and full photos arrays.
  • ✅ Deep 1,000+ Pagination — steps through search_result=1, 2, 3... (15 properties per page) across one or multiple cities until your maxItems target is reached.
  • ✅ Parallel Detail Extraction — fetches property detail pages concurrently (maxConcurrency, up to 30) with automatic proxy rotation and retry handling.
  • ✅ Built-in Anti-Blocking Configuration — pre-configured with Apify's UNBLOCKER proxy group so runs clear Funda's interstitial protection out of the box.

🎯 High-value use cases

1. Dutch Property Investors & Buy-to-Let Analysts

Combine livingArea, price, energyLabel, and postalCode (4-digit + 2-letter Dutch postcode) to calculate exact asking price per m² (price / livingArea) and filter for properties with energyLabel A or higher that qualify for favorable Dutch mortgage terms and WWS (woningwaarderingsstelsel) rental points.

2. Real Estate Agencies (Makelaars) & Appraisers (Taxateurs)

Monitor competing inventory in specific neighbourhoods (customAreas: ["amsterdam/oud-zuid", "utrecht/oost"]), track how many properties are currently "onder bod" vs "beschikbaar", and benchmark asking prices by yearBuilt and buildType (bestaandebouw vs nieuwbouw).

3. Solar, Heat-Pump & Home-Renovation Lead Generation

Because every Funda record includes energyLabel, solarPanels (true/false), heatPump (true/false), and yearBuilt, green-energy installers and renovation contractors can identify recently listed homes built before 1990 with energy labels D–G and no solar panels or heat pump installed.


📥 Input configuration

All fields are optional. Leaving all location fields empty collects a fast, multi-city sample from the largest Dutch cities.

ParameterTypeDefault / PrefillDescription
listingTypestring"koop"Whether to collect homes for sale ("koop") or for rent ("huur").
areasarrayPrefill: ["amsterdam"]Select one or more Dutch cities from the 25-city dropdown (amsterdam, rotterdam, den-haag, utrecht, eindhoven, groningen, tilburg, almere, breda, nijmegen, haarlem, arnhem, enschede, amersfoort, apeldoorn, zwolle, leiden, maastricht, dordrecht, delft, alkmaar, leeuwarden, s-hertogenbosch, zaanstad, hilversum).
customAreasarray[]Optional list of any Funda area slugs not in the dropdown — e.g., a town ("gouda", "amstelveen") or neighbourhood ("amsterdam/centrum").
sortBystring"relevancy"Sort order for city searches: "relevancy", "date_down" (Newest first), "price_up", or "price_down".
searchUrlsarray[]Optional full Funda search URLs (https://www.funda.nl/zoeken/...) with custom price, surface, room, or energy-label filters.
startUrlsarray[]Optional direct Funda property detail URLs (https://www.funda.nl/detail/...).
maxItemsintegerDefault: 30 (Prefill: 15)Maximum listings to collect across the run. Set 0 for no limit (or 1000+ for deep city/multi-city pulls).
maxConcurrencyinteger15 (1–30)Maximum detail pages fetched in parallel.
maxRequestRetriesinteger3 (0–15)Maximum retry attempts per request.
proxyConfigurationobjectUNBLOCKERProxy settings. Defaults to Apify's UNBLOCKER group to handle Funda's anti-bot protection automatically.

Example 1 — Fast Amsterdam preview (Prefill)

{
"listingType": "koop",
"areas": ["amsterdam"],
"maxItems": 15,
"maxConcurrency": 15,
"proxyConfiguration": {
"useApifyProxy": true,
"apifyProxyGroups": ["UNBLOCKER"]
}
}

Example 2 — 1,000+ Randstad multi-city extraction (Amsterdam, Rotterdam, Den Haag, Utrecht)

{
"listingType": "koop",
"areas": ["amsterdam", "rotterdam", "den-haag", "utrecht"],
"sortBy": "date_down",
"maxItems": 1200,
"maxConcurrency": 20,
"proxyConfiguration": {
"useApifyProxy": true,
"apifyProxyGroups": ["UNBLOCKER"]
}
}

Example 3 — Filtered Funda search URL (Homes €250k–€500k with Energy Label A)

{
"searchUrls": [
{ "url": "https://www.funda.nl/zoeken/koop?selected_area=[\"rotterdam\"]&price=\"250000-500000\"&energy_label=[\"A\"]" }
],
"maxItems": 200
}

📤 Output sample & field reference

Each property is saved as a single clean record in the dataset. Below is a verified output item from a live Amsterdam run:

{
"url": "https://www.funda.nl/detail/koop/amsterdam/appartement-courbetstraat-19-3/44667073/",
"listingType": "koop",
"address": "Courbetstraat 19-3",
"postalCode": "1077ZR",
"city": "Amsterdam",
"province": "Noord-Holland",
"price": 1075000,
"priceCurrency": "EUR",
"priceType": "asking_price",
"livingArea": 132,
"plotArea": null,
"rooms": 7,
"bedrooms": 4,
"energyLabel": "C",
"energyEfficient": false,
"yearBuilt": 1933,
"propertyType": "Appartement",
"buildType": "bestaandebouw",
"leasehold": null,
"status": "beschikbaar",
"neighbourhood": "minervabuurtzuid",
"municipality": "amsterdam",
"garden": false,
"balcony": true,
"roofTerrace": false,
"solarPanels": false,
"heatPump": false,
"privateParking": false,
"nationalMonument": false,
"brokerName": null,
"brokerId": "24773",
"description": "Appartement te koop: Courbetstraat 19-3 1077 ZR Amsterdam",
"photo": "https://cloud.funda.nl/valentina_media/237/219/768_1440x960.jpg",
"photos": [
"https://cloud.funda.nl/valentina_media/237/219/768_1440x960.jpg",
"https://cloud.funda.nl/valentina_media/237/219/756_1440x960.jpg"
],
"photoCount": 6,
"scrapedAt": "2026-11-10T02:30:00.000Z"
}

🗂️ Field reference & coverage table

🏡 Core Property, Address & Pricing Fields
FieldTypeCoverageDescription
urlstring🟢 High (100%)Direct canonical URL to the Funda property listing (primary deduplication key).
listingTypestring🟢 High (100%)Transaction type: "koop" (for sale) or "huur" (for rent).
addressstring🟢 High (100%)Street name and house number (plus suffix).
postalCodestring🟢 High (~99%)Official 6-character Dutch postcode (e.g., 1077ZR).
citystring🟢 High (100%)Dutch city or town name (plaats).
provincestring🟢 High (~99%)Dutch province (e.g., Noord-Holland, Zuid-Holland, Utrecht).
neighbourhoodstring🟢 High (~98%)Neighbourhood slug (buurt, e.g., minervabuurtzuid, jordaan).
municipalitystring🟢 High (~99%)Municipality slug (gemeente).
pricenumber🟢 High (~99%)Numeric asking price (sale) or monthly rent (rental) in EUR.
priceCurrencystring🟢 High (100%)Currency code ("EUR").
priceTypestring🟢 High (100%)"asking_price" for sale listings or "rent_per_month" for rentals.
📐 Dimensions, Construction & Energy Fields
FieldTypeCoverageDescription
livingAreanumber🟢 High (~98%)Interior living surface (woonoppervlakte) in m².
plotAreanumber🟡 ConditionalLand plot surface (perceeloppervlakte) in m² (populated for houses with land; null for apartments).
roomsnumber🟢 High (~98%)Total number of rooms (aantalkamers).
bedroomsnumber🟢 High (~95%)Number of bedrooms (aantalslaapkamers).
energyLabelstring🟢 High (~95%)Official Dutch energy class (A++++, A+++, A++, A+, A, B, C, D, E, F, G).
energyEfficientboolean🟢 High (~98%)Funda's energiezuinig boolean indicator.
yearBuiltnumber🟢 High (~96%)Construction year (bouwjaar).
propertyTypestring🟢 High (100%)Property type (Appartement, Huis, woonhuis, appartement, etc.).
buildTypestring🟢 High (~98%)"bestaandebouw" (existing build) or "nieuwbouw" (new build).
leaseholdstring🟡 ConditionalOwnership/ground-lease info (erfpacht) when explicitly structured in the payload.
statusstring🟢 High (100%)Listing availability status (e.g., "beschikbaar", "onder bod", "verkocht").
🌿 Amenities, Broker & Media Fields
FieldTypeCoverageDescription
garden / balcony / roofTerraceboolean🟢 High (~98%)Boolean flags for tuin, balkon, and dakterras.
solarPanels / heatPumpboolean🟢 High (~98%)Green-tech flags for zonnepanelen and warmtepomp.
privateParking / nationalMonumentboolean🟢 High (~98%)Boolean flags for on-site parking and rijksmonument status.
brokerIdstring🟢 High (~99%)Funda identifier (hoofdaanbieder) for the listing real-estate agency (makelaar).
brokerNamestring🟡 ConditionalBroker display name when present in the SSR state payload.
descriptionstring🟢 High (100%)Clean listing summary/description with trailing [funda] markers stripped.
photo / photos / photoCountstring / array / number🟢 High (~99%)Main cover image URL, full array of high-resolution 1440x960 photo URLs, and total photo count.
scrapedAtstring🟢 High (100%)ISO 8601 extraction timestamp.

🔁 Pagination & 1,000+ scale

  • 15 Listings per Search Page, Unlimited Depth — for every selected city or custom search URL, the scraper steps through search_result=1, 2, 3... until it collects enough unique listing URLs to satisfy your maxItems target (up to 500–1,000+ search pages) or reaches the last page of results.
  • Multi-City Aggregation & Deduplication — when you select multiple cities in areas (or pass multiple searchUrls), the scraper automatically transitions from city to city and deduplicates every property URL via an in-memory seenDetail set.
  • Configurable Parallel Detail Fetching — once listing URLs are gathered, detail pages are fetched in parallel batches controlled by maxConcurrency (up to 30 concurrent requests).

⚙️ How to use (Console & API)

In Apify Console

  1. Open Funda.nl Scraper in Apify Console.
  2. Select Listing type (For sale (koop) or For rent (huur)) and pick one or more cities in Cities — or paste a filtered URL into Funda search URLs.
  3. Set Max items (e.g., 15 or 30 for a quick test, 500–1000 for a deep dataset, or 0 for all listings).
  4. Click Start and download your dataset as JSON, CSV, or Excel from the Storage tab.

Via Apify API (Python)

from apify_client import ApifyClient
client = ApifyClient("YOUR_APIFY_TOKEN")
run_input = {
"listingType": "koop",
"areas": ["amsterdam", "utrecht"],
"sortBy": "date_down",
"maxItems": 200,
}
run = client.actor("haketa/funda-scraper").call(run_input=run_input)
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
print(f"{item['address']} ({item['postalCode']} {item['city']}) — €{item['price']} | {item['livingArea']} m² | Label {item['energyLabel']}")

💡 Pro tips for Dutch property data

  • Use searchUrls for hyper-specific filters — configure any combination of filters on funda.nl (e.g., vraagprijs €300.000–€600.000, woonoppervlakte 75+ m², tuin, energielabel A+) and copy the URL into searchUrls. The scraper preserves every query parameter while paginating automatically.
  • Target specific neighbourhoods with customAreas — pass "amsterdam/de-pijp", "amsterdam/jordaan", or "rotterdam/kralingen-west" in customAreas to isolate high-demand sub-markets.
  • Keep UNBLOCKER proxy enabled — Funda protects its pages with strict anti-bot interstitials that block standard datacenter and residential proxies. The default UNBLOCKER configuration handles challenge resolution automatically.

⚠️ Honest limitations

  • Throughput & Proxy Cost (UNBLOCKER) — because each property detail page is routed through Apify's anti-blocking proxy (UNBLOCKER, ~3–7s per batch), scraping 15–30 listings takes ~1–2 minutes. Scale maxItems and maxConcurrency according to your budget and time requirements.
  • Broker Name Availability — Funda often loads the human-readable broker name asynchronously on the client side while always embedding the numeric brokerId (hoofdaanbieder) in the server-rendered state. brokerId is ~99% populated; brokerName is populated whenever present in the SSR state.

❓ FAQ

Can I scrape both homes for sale (koop) and rentals (huur)?

Yes. Set listingType to "koop" for sale listings or "huur" for rentals, or paste any /zoeken/koop or /zoeken/huur URL into searchUrls.

How many Funda listings can I extract in one run?

You can collect 1,000+ listings in a single run across one or multiple Dutch cities. Set maxItems: 1000 (or 0 for unlimited) and increase timeoutSecs when running multi-thousand-item jobs over UNBLOCKER.

Do I need a Funda account or login?

No. All extracted listings are public property pages on funda.nl. No login, cookies, or API keys are required.

Why are plotArea or leasehold sometimes null?

Apartments (appartementen) do not have an individual land plot (plotArea: null), and ground-lease (leasehold) details are only populated when structured in the listing's state object.

Which export formats are supported?

Export your dataset to JSON, CSV, Excel (XLSX), HTML, XML, or RSS, or integrate directly with Google Sheets, Make, Zapier, n8n, Airbyte, and webhooks via the Apify API.

How can I find the exact Funda slug for a smaller Dutch town or neighbourhood?

Open funda.nl, search for your desired town or neighbourhood, and look at the selected_area parameter in your browser's address bar (for example, selected_area=["amsterdam/de-pijp"] or selected_area=["gouda"]). Copy that string (amsterdam/de-pijp or gouda) into the customAreas input field, or simply paste the entire browser URL into searchUrls.

Via Apify API (JavaScript / Node.js)

import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: 'YOUR_APIFY_TOKEN' });
const run = await client.actor('haketa/funda-scraper').call({
listingType: 'koop',
areas: ['amsterdam', 'rotterdam'],
sortBy: 'date_down',
maxItems: 100,
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(`Extracted ${items.length} Dutch property listings from Funda.nl.`);

🔌 Integrations & Dutch PropTech automation

IntegrationDutch Real-Estate Workflow
Google SheetsAutomatically append newly listed Amsterdam, Rotterdam, and Utrecht homes (sortBy: "date_down") to a live investment tracker.
Make / Zapier / n8nTrigger instant Slack, Telegram, or email alerts whenever a property matching your target postal code and energy label (A or higher) is listed.
BigQuery / Snowflake / PostgresSchedule weekly Randstad runs to track Dutch asking prices per square meter (price / livingArea) and time-on-market transitions (beschikbaar → onder bod).
WebhooksConnect an ACTOR.RUN.SUCCEEDED webhook to ingest structured Funda JSON directly into your PropTech or valuation backend.

Explore our other European property scrapers on Apify:


📋 Changelog

v1.2 (2026-11) — Unlocked 1,000+ Deep Pagination & Concurrency Scaling

  • Unlocked 1,000+ Pagination: Scaled maxSearchPages dynamically (Math.max(500, Math.ceil(limit / 15) * 2)) and unlocked maxConcurrency up to 30 in src/main.js to match the input schema.
  • Faster Request Timeout & Retry Recovery: Tuned per-attempt request timeout to 35s with rapid proxy rotation so slow anti-blocking nodes never stall a batch.
  • Fast Prefill Verification: Configured maxItems prefill (15, default 30) with maxConcurrency: 15 so default test runs complete reliably in ~90–120 seconds.
  • Documentation Upgrade: Added ⚡ At a glance summary table, emoji-grouped field coverage tables, Dutch real-estate tips, and changelog.

v1.1 (2026-10) — Anti-Blocking (UNBLOCKER) & Nuxt 3 Devalue Parser

  • Upgraded transport and default proxy configuration to UNBLOCKER with automatic interstitial detection and retry.
  • Added recursive Nuxt 3 devalue payload decoder for 35+ property and sustainability fields.

v1.0 (2026-05) — Initial Release

  • Initial release of Funda.nl Scraper supporting koop and huur searches across 25 Dutch cities.
⌂ 换网址