Funda.nl Scraper — Dutch Property Data, Price/m² & Agents
Pricing
from $0.50 / 1,000 property extracteds
Funda.nl Scraper — Dutch Property Data, Price/m² & Agents
Scrape Funda.nl Dutch real estate — for-sale, for-rent and sold listings — by location, area identifier or URL. Pull price per m², energy label, floor and plot area, full address, rich listing detail and estate-agent (makelaar) profiles, plus built-in market KPIs and an HTML report.
Pricing
from $0.50 / 1,000 property extracteds
Rating
0.0
(0)
Developer
SIÁN OÜ
Maintained by CommunityActor stats
1
Bookmarked
2
Total users
1
Monthly active users
2 days ago
Last modified
Categories
Share
Funda.nl Scraper — Dutch Property Data, Price/m² & Agents 🏡
🇳🇱 Extract Funda Sale, Rent & Sold Listings With Price/m² and Agent Leads
Real estate investors, buyer's agents, relocation services, and market analysts — get complete Dutch property data plus makelaar contact profiles across the whole of the Netherlands
📋 Overview
Pull Funda Dutch real estate — for-sale, for-rent AND sold listings — into clean, structured data. Search any Dutch city, town, neighbourhood or postcode, paste a Funda search URL, or drill into a single listing, and get back complete records with auto-computed price per m², energy label, living and plot area, full address down to the wijk, geo coordinates, the estate agent (makelaar), and a 45-photo media gallery. Every run also builds a market-KPI HTML report.
Why investors and agents choose us over the alternatives:
- 📐 Price per m² computed on every listing: Skip the spreadsheet step — comp sheets and valuations are ready straight from the dataset, using Funda's own living-area figure.
- 🏷️ Sale + Rent + Sold in one actor: A single
searchTypetoggle gets you asking prices, monthly rents, or realised sold prices — purpose-built for market analysis and price-to-rent studies. - ⚡ Native energy-label filtering: Pull only A/A+/B homes (or any band) — filtered at the source, so you only collect what you asked for.
- 🏢 Makelaar lead-gen goldmine: Estate-agent profiles carry email, phone, website, social handles, team members and review scores — a ready CRM feed no other Funda tool exposes.
- 📊 Built-in market KPIs: Median price, price/m² distribution, and inventory breakdowns are computed for you on every run and surfaced in an HTML report — no post-processing.
- 🆓 FREE tier with full feature parity: 25 rows per run, no credit card, same fields and same HTML report — just a smaller cap.
✨ Features
- 🧭 Seven operations, one actor — search by location, by area identifier, or by URL; pull full detail by listing ID or URL; fetch a makelaar profile; or resolve a location with autocomplete.
- 🏠 Every side of the market — for-sale, for-rent and sold listings via a single
searchTypetoggle. - 📐 Auto-calculated price per m² — for every listing with a usable living area.
- ⚡ Energy-label + area + price + bedroom filters — applied at the source so you only collect (and only pay for) matching homes.
- 🏘️ Rich listing detail — coordinates, full characteristic sections (transfer, construction, layout, energy, cadastral, outdoor space, parking, VvE), badges, and the full Dutch + English description.
- 🏢 Estate-agent (makelaar) profiles — contact details, social media, team roster with roles, and aggregate review scores.
- 📊 Market KPI HTML report — median price, price/m² distribution and inventory breakdown on every run.
- 📦 Bulk area sweeps — pass multiple Funda geo identifiers in a single run.
- 📱 Standard Apify exports — JSON, CSV, XLSX, RSS, HTML.
🎬 Quick Start
Pick an operation, give it a location, and run — no coding required.
curl -X POST 'https://api.apify.com/v2/acts/sian.agency~funda-property-scraper/runs?token=[YOUR_TOKEN]' \-H 'Content-Type: application/json' \-d '{"operation":"searchByLocation","location":"Amsterdam","searchType":"For_Sale","maxResults":50}'
🚀 Getting Started (3 Simple Steps)
Step 1: Pick an operation
Set operation to searchByLocation (city / town / neighbourhood / postcode), searchByArea (Funda geo identifiers), searchByUrl (paste a funda.nl/zoeken URL), detailsById / detailsByUrl (one rich listing), agentDetails (a makelaar profile), or autocomplete (resolve a location to geo identifiers).
Step 2: Set your target and filters
Give the operation a location, area, URL or ID, then optionally narrow with searchType (For Sale / For Rent / Sold), price band, bedrooms, living area, energy label and property type.
Step 3: Run & Export
Hit Run. Rows stream into the dataset; a market-KPI HTML report lands in the key-value store. Export as JSON, CSV, or Excel.
That's it! In under 2 minutes you'll have:
- Complete listings with address, specs, pricing, photos and geo
- Auto-calculated price per m² per listing
- Market-level KPIs (median price, price/m² distribution, breakdowns)
- A polished HTML market summary
📥 Input Configuration
| Field | Type | Required | Description |
|---|---|---|---|
operation | string | Yes | searchByLocation, searchByArea, searchByUrl, detailsById, detailsByUrl, agentDetails, or autocomplete (default: searchByLocation). |
location | string | For searchByLocation | Dutch city, town, neighbourhood or postcode, e.g. Amsterdam, Utrecht, 1018XS. |
area | string | For searchByArea | One or more Funda geo identifiers, comma-separated (from autocomplete). |
url | string | For searchByUrl / detailsByUrl / agentDetails | A funda.nl search, listing, or makelaar URL. |
listingId | string | For detailsById | Funda globalId shown as a search result's propertyId. |
agentId | string | For agentDetails | Funda office id shown on a listing's agent. |
query | string | For autocomplete | Partial location text to resolve into geo identifiers. |
searchType | string | No | For_Sale, For_Rent, or Sold (default: For_Sale). |
propertyType | string | No | Comma-separated kinds: house, apartment, parking, land, berth. |
sortOrder | string | No | Relevance, price low→high / high→low, newest, oldest. |
minPrice / maxPrice | integer | No | Price band in EUR (asking price for sale, monthly rent for rent). |
minBedrooms / maxBedrooms | integer | No | Bedroom range. |
minFloorArea / maxFloorArea | integer | No | Living-area range in m². |
energyLabel | string | No | Comma-separated labels: A, A+, B, C, D, E, F, G. |
keywords | string | No | Extra free-text keywords, e.g. monumentaal, tuin. |
maxResults | integer | No | Rows to collect, 1–750 (default: 45). FREE tier capped at 25. |
Example — Search Amsterdam homes for sale under €600k, energy label A/B:
{"operation": "searchByLocation","location": "Amsterdam","searchType": "For_Sale","maxPrice": 600000,"energyLabel": "A,A+,B","maxResults": 100}
Example — Full detail for one listing:
{"operation": "detailsById","listingId": "8066978"}
Example — Estate-agent (makelaar) profile:
{"operation": "agentDetails","agentId": "24862"}
📤 Output
Results land in the Apify dataset. A rowType field marks each row as property, property-detail, agent, or location-suggestion. Common fields:
| Field | Type | Description |
|---|---|---|
rowType | string | property · property-detail · agent · location-suggestion |
propertyId | integer | Funda listing globalId |
url | string | Full funda.nl URL for the property |
offeringType | string | buy / rent |
objectType | string | apartment / house / parking / land / berth |
listingStatus | string | available or sold |
pricing | object | Price (EUR), price type, condition (kosten koper / per month) and computed price per m² |
specs | object | Bedrooms, rooms, floor area, plot area, energy label, construction type, zoning |
address | object | Street, house number, postcode, neighbourhood, wijk, city, municipality, province |
media | object | Media types, photo gallery, videos and photo count |
coordinates | object | Latitude and longitude (detail rows) |
characteristics | array | Categorized property facts (detail rows) |
propertyDescription | string | Full listing description, Dutch + English (detail rows) |
contact / socialMedia / employees / reviews | object/array | Estate-agent (makelaar) fields (agent rows) |
geoId / geoName / geoType | string | Resolved geo identifiers (autocomplete rows) |
scrapedAt | string | ISO-8601 timestamp |
Search row example:
{"rowType": "property","propertyId": 8066978,"url": "https://www.funda.nl/detail/koop/amsterdam/appartement-.../8066978/","offeringType": "buy","objectType": "apartment","listingStatus": "none","pricing": { "value": 575000, "priceType": "kosten koper", "pricePerSqm": 8214 },"specs": { "bedrooms": 2, "floorArea": 70, "energyLabel": "B" },"address": { "postcode": "1018XS", "neighbourhood": "Weesperbuurt", "city": "Amsterdam" }}
Estate-agent row example:
{"rowType": "agent","agentId": 24862,"name": "Metropool Makelaars","contact": { "email": "info@metropool.nl", "phone": "+31 20 000 0000", "website": "https://metropool.nl" },"reviews": { "average": 9.2, "count": 148 },"hasListings": true}
💼 Use Cases & Examples
1. Investment Underwriting (Sale)
Investors comparing homes by price per m² across Dutch cities
Input: searchByLocation, searchType: "For_Sale", a city and price band
Output: Listings with computed price/m² plus median in the HTML report
Use: Spot the cheapest €/m² pockets and build comp sheets in minutes.
2. Rental Market Analysis
Analysts tracking rent levels in Amsterdam vs. Utrecht
Input: searchType: "For_Rent", two locations, a weekly schedule
Output: Monthly rents, living area and rent/m² distribution
Use: Generate weekly Dutch rental-market briefs for clients.
3. Sold-Price Comparables
Appraisers pulling realised sale prices for valuations
Input: searchType: "Sold", a neighbourhood
Output: Recently sold listings with their realised price
Use: Ground valuations in actual transactions, not just asking prices.
4. Makelaar Lead Generation
Agencies and PropTech building a Dutch estate-agent CRM
Input: agentDetails by office id or makelaar URL
Output: Agent email, phone, website, socials, team roster and review scores
Use: Feed a sales pipeline or partnership outreach list straight from the dataset.
5. Energy-Efficient Housing Research
Relocation and sustainability teams filtering by energy label
Input: energyLabel: "A,A+", a city, searchType: "For_Sale"
Output: Only the most energy-efficient homes on the market
Use: Shortlist properties that meet green-mortgage or ESG criteria.
6. AVM / ML Training Data
Data scientists building Dutch valuation models
Input: Bulk searchByArea sweeps across multiple identifiers
Output: Comprehensive listing dataset with specs, geo and price/m²
Use: Train and validate AVM and rent-prediction models on Netherlands data.
🔗 Integration Examples
JavaScript / Node.js
import { ApifyClient } from 'apify-client';const client = new ApifyClient({ token: 'YOUR_TOKEN' });const run = await client.actor('sian.agency/funda-property-scraper').call({operation: 'searchByLocation',location: 'Amsterdam',searchType: 'For_Sale',maxResults: 100});const { items } = await client.dataset(run.defaultDatasetId).listItems();console.log(items[0]);
Python
from apify_client import ApifyClientclient = ApifyClient('YOUR_TOKEN')run = client.actor('sian.agency/funda-property-scraper').call(run_input={'operation': 'searchByLocation','location': 'Utrecht','searchType': 'For_Rent','maxResults': 100})for item in client.dataset(run['defaultDatasetId']).iterate_items():print(item)
cURL
curl -X POST 'https://api.apify.com/v2/acts/sian.agency~funda-property-scraper/runs?token=YOUR_TOKEN' \-H 'Content-Type: application/json' \-d '{"operation":"searchByArea","area":"amsterdam,utrecht","searchType":"For_Sale","maxResults":150}'
Automation Workflows (N8N / Zapier / Make)
- Trigger: Schedule (daily / weekly market refresh) or webhook
- HTTP Request: Call the actor API with your target location
- Process: Filter by price band, compute KPIs, dedupe against last run
- Action: Push to a database, send a Slack/email digest, update a dashboard
📊 Performance & Pricing
FREE Tier (Try It Now)
- 25 rows per run — full feature parity, same data quality
- No credit card required
- Perfect for testing and one-off analyses
PAID Tier (Production Ready)
- Unlimited rows per run
- Bulk area sweeps and full detail + agent enrichment
- Pay-per-event: only charged for the rows you actually get
💰 Transparent per-event pricing — pay per property listing extracted, with detail and estate-agent profiles priced separately. Every listing arrives with a computed price per m², and every run produces a full HTML market report with median and distribution — no post-processing, no separate analytics tier.
❓ Frequently Asked Questions
Q: Does this cover rentals and sold listings?
A: Yes — set searchType: "For_Rent" for rentals or searchType: "Sold" for realised sale prices. Default is For_Sale.
Q: How many listings can I extract? A: FREE tier: 25 rows per run. PAID tier: unlimited. Search operations auto-paginate the full Funda result set for your query.
Q: What is price per m² based on? A: It's computed from Funda's own living-area figure — asking (or realised) price divided by living area in square metres. Listings without a usable area omit the field.
Q: Can I get estate-agent contact details?
A: Yes — the agentDetails operation returns a makelaar office profile with email, phone, website, social handles, team members and review scores.
Q: What output formats are available? A: JSON, CSV, Excel — exported directly from the Apify dataset.
Q: Is this legal? A: We only extract publicly available listings and agent profiles from Funda. See the legal section below.
🐛 Troubleshooting
"No results" on a location search
- Confirm the spelling of the Dutch city / neighbourhood, or use the
autocompleteoperation to resolve it into a geo identifier, then runsearchByArea.
Empty searchByArea run
searchByAreaneeds Funda geo identifiers (e.g.amsterdam,gemeente-amsterdam), not free-text city names. Discover them withautocomplete.
pricePerSqm missing on some rows
- Some records (often rentals or land) omit a usable living area. The field is omitted rather than emitted as null — check key presence before reading it.
FREE tier stops at 25 rows
- That's the FREE cap. Upgrade for unlimited rows and bulk sweeps.
⚠️ Trademark Disclaimer
This Actor is an independent tool and is not affiliated with, endorsed by, or sponsored by Funda Real Estate B.V. or any of its subsidiaries. The name "Funda" is used solely in a descriptive sense to identify the public data source the Actor reads from. All trademarks, service marks, and trade names referenced in this Actor or its documentation are the property of their respective owners.
⚖️ Is it legal to scrape data?
Our actors are ethical and do not extract any private user data, such as email addresses, gender, or location. They only extract what the user has chosen to share publicly. We therefore believe that our actors, when used for ethical purposes by Apify users, are safe.
However, you should be aware that your results could contain personal data. Personal data is protected by the GDPR in the European Union and by other regulations around the world. You should not scrape personal data unless you have a legitimate reason to do so. If you're unsure whether your reason is legitimate, consult your lawyers.
You can also read Apify's blog post on the legality of web scraping.
🤝 Support
Join our active support community
- For issues or questions, open an issue in the actor's repository
- Check SIÁN Agency Store for more automation tools
- 📧 apify@sian-agency.online
Built by SIÁN Agency | More Tools