Funda Netherlands Property Listings & Agent Scraper
Pricing
from $17.00 / 1,000 results
Funda Netherlands Property Listings & Agent Scraper
Scrape Dutch property listings from across the Netherlands with address, asking price, property type, living and plot area, rooms, bedrooms, energy label, year built, coordinates, photos, description and the listing agent name, contact person, office, phone and email. Export to JSON, CSV or Excel.
Pricing
from $17.00 / 1,000 results
Rating
0.0
(0)
Developer
Scrapers Lat
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
3 days ago
Last modified
Categories
Share
Funda Netherlands Property Listings & Agent Scraper
Here is one real result, with every field the actor returns (the description and the 31-item photos array are trimmed here for readability; the actual record returns them in full):
{"imageUrl": "https://cloud.funda.nl/tiara-media/a8d955aa-37ee-44f7-8c8c-c779dde78088/a1c3732e-ae51-4948-8431-29587d4d6a36?options=width=720","listingUrl": "https://www.funda.nl/detail/koop/amsterdam/appartement-ennemaborg-135/44559022/","id": "8104669","street": "Ennemaborg 135","city": "Amsterdam","postcode": "1082SP","neighbourhood": "Gelderlandpleinbuurt","municipality": "Amsterdam","province": "Noord-Holland","country": "NL","propertyType": "apartment","listingType": "buy","constructionType": "resale","status": null,"price": 375000,"priceType": "sale","priceCurrency": "EUR","livingAreaM2": 64,"plotAreaM2": null,"rooms": 3,"bedrooms": 2,"bathrooms": 1,"floors": 1,"volumeM3": 210,"pricePerM2": 5859,"garden": null,"parking": null,"serviceChargesMonthly": 171,"acceptance": null,"energyLabel": "E","yearBuilt": 1965,"latitude": 52.333393,"longitude": 4.871611,"description": "In een rustige woonwijk, vlak achter de Zuidas in de wijk Buitenveldert bieden wij namens onze opdrachtgever deze goed ingedeelde woning van ca 64 m2 aan ... [full Dutch listing text returned in the actual record]","publishDate": "2026-08-10T15:09:23.5393588+02:00","agentName": "Ramón Mossel Makelaardij o.g. B.V.","agentContactName": "Judith Lezer","agentOffice": "Ramón Mossel Makelaardij o.g. B.V.","agentAssociation": "NVM","agentId": "24592","agentUrl": "https://www.funda.nl/makelaar/24592-ramon-mossel-makelaardij-og-bv/","agentPhone": "020-3052662","agentEmail": "info@ramonmossel.nl","agentWebsite": "http://www.ramonmossel.nl","photos": ["https://cloud.funda.nl/tiara-media/a8d955aa-.../...?options=width=720", "... 30 more photo URLs ..."],"photoCount": 31,"searchQuery": "amsterdam","source": "Funda","observedAt": "2026-08-10T14:31:07.481Z","error": null}
The most complete Funda property scraper available. It returns every field a Funda listing exposes, from address, price and areas to energy label, year built and coordinates, plus the listing agent's contact details (office, phone, email and website), and gives you filters for area, listing type and price range to target exactly the properties you need.
📥 Input · 📤 Output · 💰 Pricing · ▶️ Examples
Table of contents
- What it does
- Quickstart
- Input reference
- Output reference
- Example output record
- Run via API and CLI
- Fetch results
- Billing and limits
- FAQ and troubleshooting
What it does
The actor searches Funda for the Dutch areas you pass, pages through the matching for-sale or for-rent listings, and writes one normalized record per property to the run's dataset. When withDetails is on (default), each listing is enriched from its detail page with the year built, full description, exact map coordinates and extra attributes (bathrooms, floors, volume, price per m2, service charges), and the listing agent's page is fetched once per office to add phone, email and website. Prices are in euros, missing source values are returned as null, and optional AI add-ons (English summary, structured features, English translation) run per listing when enabled on a paid plan.
Data covers residential property listings across the Netherlands. Funda is bot protected, so the actor runs over Apify RESIDENTIAL proxy in the Netherlands with a real browser fingerprint.
Quickstart
Open the actor, paste this into the input, and press Run. It returns 10 Amsterdam for-sale listings with full detail enrichment.
{"searchQueries": ["amsterdam"],"listingType": "buy","maxListings": 10,"withDetails": true}
Pass several areas in searchQueries to cover them in one run. Every input field is optional; with an empty input the actor searches Amsterdam for-sale listings (default maxListings prefill is 10).
Input reference
| Field | Type | Required | Default | Description |
|---|---|---|---|---|
searchQueries | string[] | no | ["amsterdam"] | Dutch cities, towns or areas to search, for example amsterdam, utrecht, den-haag, rotterdam. Also accepts searchQuery (string). |
listingType | enum | no | buy | buy (for sale) or rent. |
maxListings | integer | no | 10 | Maximum listings to collect across all areas. Also accepts maxItems. |
withDetails | boolean | no | true | Enrich each listing with year built, full description, coordinates and extra attributes from its detail page. Disable for a faster list-only run. |
priceMin | integer | no | (none) | Only return listings at or above this price in euros. |
priceMax | integer | no | (none) | Only return listings at or below this price in euros. |
withSummary | boolean | no | false | Paid add-on. Adds aiSummary, a concise English summary. Charged only on usable output. Requires a paid Apify plan. |
withFeatures | boolean | no | false | Paid add-on. Adds AI structured features (aiBeds, aiBaths, aiSizeSqft, aiAmenities, aiCondition). Charged only on usable output. Requires a paid plan. |
withTranslate | boolean | no | false | Paid add-on. Adds aiDescriptionEn, an English translation of the Dutch description. Charged only on usable output. Requires a paid plan. |
Filters combine with logical AND. Empty filters are ignored.
Output reference
One dataset item per listing. Types: string, integer, number, boolean, string[], or null when the source value is absent.
| Field | Type | Description |
|---|---|---|
imageUrl | string | Primary listing photo URL. |
listingUrl | string | Public Funda URL of the listing. |
id | string | Funda listing ID (unique per listing). |
street | string | Street name and house number. |
city | string | City. |
postcode | string | Dutch postal code. |
neighbourhood | string | Neighbourhood name, or null. |
municipality | string | Municipality. |
province | string | Province. |
country | string | Country code (NL). |
propertyType | string | Property type, for example apartment, house. |
listingType | string | buy or rent. |
constructionType | string | For example resale or new, or null. |
status | string | Listing status when set, else null. |
price | integer | Asking price (sale) or rent, in euros. |
priceType | string | sale or rent. |
priceCurrency | string | Always EUR. |
livingAreaM2 | integer | Living area in square metres. |
plotAreaM2 | integer | Plot area in square metres, or null. |
rooms | integer | Total number of rooms. |
bedrooms | integer | Number of bedrooms. |
bathrooms | integer | Number of bathrooms (from detail page), or null. |
floors | integer | Number of floors (from detail page), or null. |
volumeM3 | integer | Volume in cubic metres (from detail page), or null. |
pricePerM2 | integer | Price per square metre (from detail page), or null. |
garden | string | Garden description (from detail page), or null. |
parking | string | Parking or garage description, or null. |
serviceChargesMonthly | integer | Monthly service charges (VvE) in euros, or null. |
acceptance | string | Acceptance/handover terms, or null. |
energyLabel | string | Energy label (for example A, E), or null. |
yearBuilt | integer | Year of construction (from detail page), or null. |
latitude | number | Latitude (from detail page), or null. |
longitude | number | Longitude (from detail page), or null. |
description | string | Full listing description (Dutch), or null. |
publishDate | string | Publish date/time of the listing. |
agentName | string | Listing agent/office name. |
agentContactName | string | Named contact person at the office, or null. |
agentOffice | string | Office name. |
agentAssociation | string | Agent association (for example NVM), or null. |
agentId | string | Funda agent ID. |
agentUrl | string | Funda agent page URL. |
agentPhone | string | Agent phone number, or null. |
agentEmail | string | Agent email (Funda relay addresses excluded), or null. |
agentWebsite | string | Agent website URL, or null. |
photos | string[] | All listing photo URLs. |
photoCount | integer | Number of photos. |
searchQuery | string | The area query this listing came from. |
source | string | Always Funda. |
aiSummary | string | AI English summary. null unless withSummary produced output. |
aiBeds | integer | AI-extracted bed count. null unless withFeatures produced output. |
aiBaths | number | AI-extracted bath count. null unless withFeatures produced output. |
aiSizeSqft | integer | AI-extracted size in sqft. null unless withFeatures produced output. |
aiAmenities | string[] | AI-extracted amenity tags. null unless withFeatures produced output. |
aiCondition | string | AI condition estimate. null unless withFeatures produced output. |
aiDescriptionEn | string | AI English translation of the description. null unless withTranslate produced output. |
observedAt | string | ISO 8601 timestamp of when the record was collected. |
error | string | null on success. On a failed run, a single item with a populated error field is written instead. |
Example output record
Real record from a live run (input {"searchQueries": ["amsterdam"], "listingType": "buy", "maxListings": 10, "withDetails": true}). The description and photos array are trimmed here with explicit notes; all values are real:
{"listingUrl": "https://www.funda.nl/detail/koop/amsterdam/appartement-ennemaborg-135/44559022/","id": "8104669","street": "Ennemaborg 135","city": "Amsterdam","postcode": "1082SP","province": "Noord-Holland","propertyType": "apartment","listingType": "buy","price": 375000,"priceType": "sale","priceCurrency": "EUR","livingAreaM2": 64,"rooms": 3,"bedrooms": 2,"bathrooms": 1,"floors": 1,"volumeM3": 210,"pricePerM2": 5859,"serviceChargesMonthly": 171,"energyLabel": "E","yearBuilt": 1965,"latitude": 52.333393,"longitude": 4.871611,"description": "[full Dutch listing text returned in the actual record]","agentName": "Ramón Mossel Makelaardij o.g. B.V.","agentContactName": "Judith Lezer","agentAssociation": "NVM","agentId": "24592","agentPhone": "020-3052662","agentEmail": "info@ramonmossel.nl","agentWebsite": "http://www.ramonmossel.nl","photoCount": 31,"searchQuery": "amsterdam","source": "Funda","observedAt": "2026-08-10T14:31:07.481Z","error": null}
Run via API and CLI
Start a run and wait for it to finish, then read the dataset. Replace <TOKEN> with your Apify API token.
Run synchronously and get dataset items in one call:
curl -X POST "https://api.apify.com/v2/acts/scrapers_lat~funda-netherlands-scraper/run-sync-get-dataset-items?token=<TOKEN>" \-H "Content-Type: application/json" \-d '{"searchQueries":["amsterdam"],"listingType":"buy","maxListings":25}'
Start a run asynchronously:
curl -X POST "https://api.apify.com/v2/acts/scrapers_lat~funda-netherlands-scraper/runs?token=<TOKEN>" \-H "Content-Type: application/json" \-d '{"searchQueries":["utrecht","rotterdam"],"listingType":"rent","priceMax":2000,"maxListings":100}'
Apify CLI:
apify call scrapers_lat/funda-netherlands-scraper \--input '{"searchQueries":["den-haag"],"maxListings":50}'
Fetch results
Every run writes to a dataset. Fetch items as JSON, CSV, or Excel by changing format:
# JSONcurl "https://api.apify.com/v2/datasets/<DATASET_ID>/items?token=<TOKEN>&clean=true&format=json"# CSVcurl "https://api.apify.com/v2/datasets/<DATASET_ID>/items?token=<TOKEN>&clean=true&format=csv"# Paginate large datasetscurl "https://api.apify.com/v2/datasets/<DATASET_ID>/items?token=<TOKEN>&offset=1000&limit=1000"
<DATASET_ID> is returned as defaultDatasetId in the run object. Use offset and limit to page through large result sets. clean=true drops empty and internal fields.
Billing and limits
- Pay per result. You are charged per listing record returned (
resultevent). See the pricing tab for the current per-result price. - Optional add-ons.
details(detail-page enrichment) andagent_contact(broker phone/email/website) are billed only when they yield data. AI add-ons (ai_listing_summary,ai_features,ai_translate) are billed only on usable output and only on paid plans. - No charge on failure. If a run errors, the actor writes a single item with a populated
errorfield and does not charge for it. Empty runs cost nothing. - Spend cap respected. Set
maxTotalChargeUsdon the run; once reached, the actor stops emitting and charging further billable results. - Free Apify plans are capped at 10 records per run. Upgrade for higher
maxListings.
FAQ and troubleshooting
A run returned 0 records. Why?
No listings matched the area and price filters, or the area name was not recognized. Use plain slugs like amsterdam, den-haag, rotterdam, and widen the price range. Zero-result runs are not charged.
Why are some detail fields null?
Fields like yearBuilt, bathrooms, latitude and the full description come from the listing's detail page. If withDetails is off, or the detail page did not expose the field, it stays null. The actor never invents values.
Why is the agent phone or email missing?
Agent contacts are fetched once per office from the broker page. If the office page did not expose a public phone or email (Funda relay addresses are excluded), those fields are null.
Can I scrape rentals?
Yes. Set listingType to rent. Prices then represent monthly rent in euros.
Do the AI fields cost extra? Yes. They are opt-in paid add-ons, billed only when they return usable output, and disabled on free Apify plans.
Is this an official Funda tool? No. This actor is independent and has no affiliation with Funda. It reads only data that is publicly available on the platform. Use it in accordance with Funda's terms of service.
Related scrapers
- Immoweb Belgium Real Estate Scraper: Belgian property listings with prices and agents.
- Daft Ireland Real Estate Scraper: Irish property listings for sale and rent.
- Hemnet Sweden Real Estate Scraper: Swedish property listings with prices and areas.
- Domain Australia Real Estate Scraper: Australian property listings with agents.
- Rightmove UK Real Estate Scraper: UK property listings for sale and rent.
- Otodom Poland Real Estate Scraper: Polish property listings with prices and agents.
More scrapers at scrapers.lat
Built and maintained by scrapers.lat, where we publish scrapers for US and Latin American public platforms: company registries, government data, finance, e-commerce and more. Browse the catalog or request a custom scraper at scrapers.lat.
Independent tool, not affiliated with Funda. Accesses only publicly available data. Use in accordance with Funda's terms of service.
