Funda.nl Scraper - Dutch Real Estate Listings Extractor
Pricing
from $3.50 / 1,000 results
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
Maintained by CommunityActor stats
0
Bookmarked
15
Total users
0
Monthly active users
a day ago
Last modified
Categories
Features
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++++toG), 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.
⚡ At a glance
| Feature | Details |
|---|---|
| Target Platform | Funda.nl — Dutch Real Estate Portal (NVM / VBO / Vastgoedpro listings) |
| Transaction Types | Homes for Sale (koop → asking_price) & Homes for Rent (huur → rent_per_month) |
| Search Modes | 25-City Dutch Dropdown (areas), Custom Towns/Neighbourhoods (customAreas), Filtered Search URLs (searchUrls), or Direct Listing URLs (startUrls) |
| Core Data Extracted | address, postalCode, city, province, price, livingArea (m²), plotArea, rooms, bedrooms, energyLabel, yearBuilt, propertyType, status, brokerId, photos |
| Sustainability & Amenities | energyLabel, energyEfficient, solarPanels (zonnepanelen), heatPump (warmtepomp), garden (tuin), balcony, roofTerrace, privateParking, nationalMonument |
| Pagination & Scale | Automatic search pagination (15 listings/page) across 1,000+ listings and multiple Dutch cities |
| Deduplication | Automatic deduplication by canonical listing url across all pages and cities |
| Export Formats | JSON, CSV, Excel (XLSX), HTML, XML, RSS, and Apify REST API |
📋 Table of contents
- Why scrape Funda.nl?
- What this Funda.nl scraper does
- High-value use cases
- Input configuration
- Output sample & field reference
- Pagination & 1,000+ scale
- How to use (Console & API)
- Pro tips for Dutch property data
- Honest limitations
- FAQ
- Related scrapers
- Changelog
🔎 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,BvsE,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, andpostalCode. - 🏢 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 incustomAreas(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 DutchpostalCode(1077ZR),city,province,price,livingArea,plotArea,rooms,bedrooms,energyLabel,yearBuilt,propertyType,buildType,leasehold,status,neighbourhood,municipality, 7 boolean amenity flags,brokerId,brokerName,description, and fullphotosarrays. - ✅ Deep 1,000+ Pagination — steps through
search_result=1, 2, 3...(15 properties per page) across one or multiple cities until yourmaxItemstarget 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
UNBLOCKERproxy 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.
| Parameter | Type | Default / Prefill | Description |
|---|---|---|---|
listingType | string | "koop" | Whether to collect homes for sale ("koop") or for rent ("huur"). |
areas | array | Prefill: ["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). |
customAreas | array | [] | Optional list of any Funda area slugs not in the dropdown — e.g., a town ("gouda", "amstelveen") or neighbourhood ("amsterdam/centrum"). |
sortBy | string | "relevancy" | Sort order for city searches: "relevancy", "date_down" (Newest first), "price_up", or "price_down". |
searchUrls | array | [] | Optional full Funda search URLs (https://www.funda.nl/zoeken/...) with custom price, surface, room, or energy-label filters. |
startUrls | array | [] | Optional direct Funda property detail URLs (https://www.funda.nl/detail/...). |
maxItems | integer | Default: 30 (Prefill: 15) | Maximum listings to collect across the run. Set 0 for no limit (or 1000+ for deep city/multi-city pulls). |
maxConcurrency | integer | 15 (1–30) | Maximum detail pages fetched in parallel. |
maxRequestRetries | integer | 3 (0–15) | Maximum retry attempts per request. |
proxyConfiguration | object | UNBLOCKER | Proxy 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
| Field | Type | Coverage | Description |
|---|---|---|---|
url | string | 🟢 High (100%) | Direct canonical URL to the Funda property listing (primary deduplication key). |
listingType | string | 🟢 High (100%) | Transaction type: "koop" (for sale) or "huur" (for rent). |
address | string | 🟢 High (100%) | Street name and house number (plus suffix). |
postalCode | string | 🟢 High (~99%) | Official 6-character Dutch postcode (e.g., 1077ZR). |
city | string | 🟢 High (100%) | Dutch city or town name (plaats). |
province | string | 🟢 High (~99%) | Dutch province (e.g., Noord-Holland, Zuid-Holland, Utrecht). |
neighbourhood | string | 🟢 High (~98%) | Neighbourhood slug (buurt, e.g., minervabuurtzuid, jordaan). |
municipality | string | 🟢 High (~99%) | Municipality slug (gemeente). |
price | number | 🟢 High (~99%) | Numeric asking price (sale) or monthly rent (rental) in EUR. |
priceCurrency | string | 🟢 High (100%) | Currency code ("EUR"). |
priceType | string | 🟢 High (100%) | "asking_price" for sale listings or "rent_per_month" for rentals. |
📐 Dimensions, Construction & Energy Fields
| Field | Type | Coverage | Description |
|---|---|---|---|
livingArea | number | 🟢 High (~98%) | Interior living surface (woonoppervlakte) in m². |
plotArea | number | 🟡 Conditional | Land plot surface (perceeloppervlakte) in m² (populated for houses with land; null for apartments). |
rooms | number | 🟢 High (~98%) | Total number of rooms (aantalkamers). |
bedrooms | number | 🟢 High (~95%) | Number of bedrooms (aantalslaapkamers). |
energyLabel | string | 🟢 High (~95%) | Official Dutch energy class (A++++, A+++, A++, A+, A, B, C, D, E, F, G). |
energyEfficient | boolean | 🟢 High (~98%) | Funda's energiezuinig boolean indicator. |
yearBuilt | number | 🟢 High (~96%) | Construction year (bouwjaar). |
propertyType | string | 🟢 High (100%) | Property type (Appartement, Huis, woonhuis, appartement, etc.). |
buildType | string | 🟢 High (~98%) | "bestaandebouw" (existing build) or "nieuwbouw" (new build). |
leasehold | string | 🟡 Conditional | Ownership/ground-lease info (erfpacht) when explicitly structured in the payload. |
status | string | 🟢 High (100%) | Listing availability status (e.g., "beschikbaar", "onder bod", "verkocht"). |
🌿 Amenities, Broker & Media Fields
| Field | Type | Coverage | Description |
|---|---|---|---|
garden / balcony / roofTerrace | boolean | 🟢 High (~98%) | Boolean flags for tuin, balkon, and dakterras. |
solarPanels / heatPump | boolean | 🟢 High (~98%) | Green-tech flags for zonnepanelen and warmtepomp. |
privateParking / nationalMonument | boolean | 🟢 High (~98%) | Boolean flags for on-site parking and rijksmonument status. |
brokerId | string | 🟢 High (~99%) | Funda identifier (hoofdaanbieder) for the listing real-estate agency (makelaar). |
brokerName | string | 🟡 Conditional | Broker display name when present in the SSR state payload. |
description | string | 🟢 High (100%) | Clean listing summary/description with trailing [funda] markers stripped. |
photo / photos / photoCount | string / array / number | 🟢 High (~99%) | Main cover image URL, full array of high-resolution 1440x960 photo URLs, and total photo count. |
scrapedAt | string | 🟢 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 yourmaxItemstarget (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 multiplesearchUrls), the scraper automatically transitions from city to city and deduplicates every property URL via an in-memoryseenDetailset. - 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
- Open Funda.nl Scraper in Apify Console.
- Select Listing type (
For sale (koop)orFor rent (huur)) and pick one or more cities in Cities — or paste a filtered URL into Funda search URLs. - Set Max items (e.g.,
15or30for a quick test,500–1000for a deep dataset, or0for all listings). - Click Start and download your dataset as JSON, CSV, or Excel from the Storage tab.
Via Apify API (Python)
from apify_client import ApifyClientclient = 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
searchUrlsfor hyper-specific filters — configure any combination of filters onfunda.nl(e.g., vraagprijs €300.000–€600.000, woonoppervlakte 75+ m², tuin, energielabel A+) and copy the URL intosearchUrls. The scraper preserves every query parameter while paginating automatically. - Target specific neighbourhoods with
customAreas— pass"amsterdam/de-pijp","amsterdam/jordaan", or"rotterdam/kralingen-west"incustomAreasto isolate high-demand sub-markets. - Keep
UNBLOCKERproxy enabled — Funda protects its pages with strict anti-bot interstitials that block standard datacenter and residential proxies. The defaultUNBLOCKERconfiguration 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. ScalemaxItemsandmaxConcurrencyaccording 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.brokerIdis ~99% populated;brokerNameis 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
| Integration | Dutch Real-Estate Workflow |
|---|---|
| Google Sheets | Automatically append newly listed Amsterdam, Rotterdam, and Utrecht homes (sortBy: "date_down") to a live investment tracker. |
| Make / Zapier / n8n | Trigger instant Slack, Telegram, or email alerts whenever a property matching your target postal code and energy label (A or higher) is listed. |
| BigQuery / Snowflake / Postgres | Schedule weekly Randstad runs to track Dutch asking prices per square meter (price / livingArea) and time-on-market transitions (beschikbaar → onder bod). |
| Webhooks | Connect an ACTOR.RUN.SUCCEEDED webhook to ingest structured Funda JSON directly into your PropTech or valuation backend. |
🔗 Related scrapers
Explore our other European property scrapers on Apify:
- ImmobilienScout24 Scraper — Germany Real Estate
- Marktplaats.nl Scraper — Netherlands Classifieds
- Hemnet.se Scraper — Sweden Real Estate
- Boliga.dk Scraper — Denmark Real Estate
- Otodom.pl Scraper — Poland Real Estate
- Daft.ie Scraper — Ireland Real Estate
📋 Changelog
v1.2 (2026-11) — Unlocked 1,000+ Deep Pagination & Concurrency Scaling
- Unlocked 1,000+ Pagination: Scaled
maxSearchPagesdynamically (Math.max(500, Math.ceil(limit / 15) * 2)) and unlockedmaxConcurrencyup to30insrc/main.jsto match the input schema. - Faster Request Timeout & Retry Recovery: Tuned per-attempt request timeout to
35swith rapid proxy rotation so slow anti-blocking nodes never stall a batch. - Fast Prefill Verification: Configured
maxItemsprefill (15, default30) withmaxConcurrency: 15so default test runs complete reliably in ~90–120 seconds. - Documentation Upgrade: Added
⚡ At a glancesummary 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
UNBLOCKERwith 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
koopandhuursearches across 25 Dutch cities.