Funda.nl Scraper — Authorized Residential Listings
Pricing
from $10.00 / 1,000 authorized residential listing collecteds
Funda.nl Scraper — Authorized Residential Listings
Collect authorized public Funda.nl residential listing data from search or detail URLs. Returns normalized Dutch property fields, run diagnostics, and PPE-ready records.
Pricing
from $10.00 / 1,000 authorized residential listing collecteds
Rating
0.0
(0)
Developer
Khadin Akbar
Maintained by CommunityActor stats
0
Bookmarked
1
Total users
0
Monthly active users
15 days ago
Last modified
Categories
Share
Funda.nl Scraper — Authorized Dutch Property Data API
Collect authorized public Funda.nl residential listing data from either search URLs or detail URLs. This Actor accepts koop and huur pages on www.funda.nl, returns one normalized record per valid listing, and surfaces useful public fields such as URL, listing ID, location, price, area, rooms, energy label, broker name, image URLs, collection timestamp, and execution diagnostics.
The input expects explicit authorization confirmation, plus either Funda search or listing URLs, or residential areas for a basic search. Each output record represents one collected residential listing, with the canonical public detail URL as the stable reference point. The result is a dataset of PPE-ready records plus compact run outputs for downstream automation and review.
Best fit and connected workflows
This Actor fits workflows that start with approved Funda residential search pages or approved detail URLs and end with normalized Dutch property records in a dataset.
It is a practical match for:
- market monitoring for authorized koop or huur inventory,
- property comparison pipelines that use structured fields like price, living area, rooms, and energy label,
- broker or portfolio workflows that need canonical URLs and source search provenance,
- AI-agent tools that need a controlled Apify Actor through Apify MCP, with dataset-backed results and run summary records.
When your approved workflow begins with a named town, city, neighborhood, or postcode, the areas input can create a basic search. When you already have Funda filters in place, startUrls preserves the original search context.
Practical scenario
Sanne, a property analyst, has permission to collect a saved Funda search for Amsterdam koop listings. She starts with one approved search URL and a maximum of 10 listings. The returned dataset includes each listing's URL, price, living area, rooms, energy label, city, broker name, and collection time. Sanne reviews the structured fields, compares the listings in a spreadsheet, and then forwards the most relevant URLs to a colleague for manual follow-up.
Input fields
| Field | Type | Purpose |
|---|---|---|
confirmAuthorization | boolean | Confirms that the caller has permission to collect the requested Funda data. Required. |
startUrls | array | Approved Funda search or detail URLs on www.funda.nl under /zoeken/koop, /zoeken/huur, /detail/koop, or /detail/huur. |
areas | array of strings | Named residential areas used to create a basic Funda search when no search URL is provided. |
listingType | string | koop or huur when generating searches from areas. |
maxResults | integer | Maximum number of valid listing records returned and billed. Range: 1 to 500. |
maxPages | integer | Maximum number of search pages per URL or area. Range: 1 to 20. |
requestDelayMillis | integer | Polite delay between requests in milliseconds. Range: 1000 to 10000. |
includeDescription | boolean | Includes the public listing description when available and requested. |
proxyConfiguration | object | Apify proxy settings, with a default NL residential route. |
Focused JSON example
{"confirmAuthorization": true,"startUrls": [{"url": "https://www.funda.nl/zoeken/koop/?selected_area=[%22amsterdam%22]"}],"maxResults": 5,"maxPages": 2,"requestDelayMillis": 1500,"includeDescription": true}
Output fields
The main dataset contains normalized residential listing records. The table below reflects the visible dataset contract.
| Field | Type | Purpose |
|---|---|---|
listingId | string or null | Numeric identifier from the Funda detail URL. |
url | string | Canonical public Funda residential detail URL. |
listingType | string | koop for sale or huur for rent. |
title | string or null | Public listing heading. |
address | string or null | Public street address when displayed. |
postalCode | string or null | Dutch postal code when displayed. |
city | string or null | Locality from the listing. |
province | string or null | Dutch province when available. |
country | string | Country context, NL. |
price | number or null | Published asking price or monthly rent. |
currency | string | Pricing currency, typically EUR. |
priceType | string | asking_price or rent_per_month. |
priceQualifier | string or null | Price qualifier such as k.k. or p.m.. |
livingAreaSqm | integer or null | Published living area in square metres. |
plotAreaSqm | integer or null | Published plot area in square metres. |
rooms | integer or null | Published room count. |
bedrooms | integer or null | Published bedroom count. |
energyLabel | string or null | Dutch energy label when published. |
yearBuilt | integer or null | Construction year when published. |
propertyType | string or null | Public housing or apartment type. |
constructionType | string or null | New or existing construction when published. |
status | string or null | Public availability status when shown. |
description | string or null | Public listing description when requested and displayed. |
brokerName | string or null | Publicly displayed makelaar name. |
imageUrl | string or null | Primary public image URL. |
imageUrls | array | Public image URLs discovered on the detail page. |
sourceSearchUrl | string or null | Search URL that led to the record. |
scrapedAt | string | ISO 8601 collection timestamp. |
Illustrative output record
{"listingId": "44451286","url": "https://www.funda.nl/detail/koop/amsterdam/appartement-example/44451286/","listingType": "koop","title": "Valkenburgerstraat 186-A","address": "Valkenburgerstraat 186-A","postalCode": "1011 NL","city": "Amsterdam","province": "Noord-Holland","country": "NL","price": 725000,"currency": "EUR","priceType": "asking_price","priceQualifier": "k.k.","livingAreaSqm": 94,"rooms": 3,"energyLabel": "A","status": "Beschikbaar","brokerName": "Voorbeeld Makelaars","imageUrl": "https://images.funda.nl/example.jpg","imageUrls": ["https://images.funda.nl/example.jpg"],"sourceSearchUrl": "https://www.funda.nl/zoeken/koop/?selected_area=%5B%22amsterdam%22%5D","scrapedAt": "2026-07-15T12:00:00.000Z"}
How it works
The Actor accepts authorized Funda residential search or detail URLs, or it creates a basic search from named residential areas. It then collects public listing data from allowed www.funda.nl residential pages, applies the configured page and result caps, and stores validated listing records in the dataset.
The run also writes compact status information to key-value store records:
OUTPUTfor the machine-readable run outcome,RUN_SUMMARYfor request, listing, validation, upstream, and charge diagnostics.
The live contract surfaces these outcomes: COMPLETE, PARTIAL, VALID_EMPTY, INVALID_INPUT, UPSTREAM_FAILED, and CONFIG_ERROR.
Pricing
Funda.nl Scraper — Authorized Dutch Property Data API uses Pay per event pricing plus standard Apify platform usage. The live Pricing tab shows the current pricing details.
Charged events are:
- Actor start, which covers allocated Apify platform compute usage for the run,
- Authorized residential listing collected, which is charged once per validated listing record persisted in the dataset.
For example, if a run starts once and persists five validated listings, the billed events include one Actor start event and five listing collection events. The event model makes the billing relationship easy to trace in the run summary and the pricing tab.
Use with AI agents (MCP)
This Actor is available as an Apify Actor usable through Apify MCP. The precise Actor identity is khadinakbar/funda-nl-scraper.
Tool description: collect authorized public Funda.nl residential listing data from search or detail URLs, then return normalized property fields, execution diagnostics, and dataset-backed records that an agent can read and reason about.
Collect authorized public Funda.nl koop listings from this approved search URL, return up to 5 validated records, and summarize price, living area, rooms, energy label, city, and broker name for each record.
Output interpretation:
- read the dataset items for listing-level facts,
- read
OUTPUTfor the compact run outcome, - read
RUN_SUMMARYfor request counts, validation details, and charge diagnostics, - use
sourceSearchUrlto preserve the approved search context when the record came from a search page, - use
listingIdandurlas the stable references for downstream deduplication.
Provenance, scope, pagination, and cost guidance:
- the dataset records are normalized from public residential listing pages,
- scope stays within approved
koopandhuurresidential pages onwww.funda.nl, maxPageslimits search discovery before detail pages are requested,maxResultscaps returned validated records and billed listings,- the run summary records charge diagnostics for review by agents and operators.
Apify API example
import { ApifyClient } from 'apify-client';const client = new ApifyClient({token: process.env.APIFY_TOKEN,});const input = {confirmAuthorization: true,startUrls: [{url: 'https://www.funda.nl/zoeken/koop/?selected_area=[%22amsterdam%22]'}],maxResults: 3,maxPages: 1,requestDelayMillis: 1500,includeDescription: false,};const run = await client.actor('khadinakbar/funda-nl-scraper').call(input);const datasetId = run.defaultDatasetId;const { items } = await client.dataset(datasetId).listItems();console.log('Dataset items:', items);const output = await client.keyValueStore(run.defaultKeyValueStoreId).getRecord('OUTPUT');const runSummary = await client.keyValueStore(run.defaultKeyValueStoreId).getRecord('RUN_SUMMARY');console.log('OUTPUT:', output?.value);console.log('RUN_SUMMARY:', runSummary?.value);
Best results and outcome guidance
Use approved Funda URLs when your workflow depends on the exact search state already configured on the site. Use areas when the approval covers a named place and a basic search is enough. Set maxResults to the number of listing records you want returned and billed, and set maxPages when the search may span more than one result page.
For downstream analysis, the most useful comparison fields are price, livingAreaSqm, rooms, energyLabel, city, status, and url. When your workflow only needs structured property fields, includeDescription: false keeps the output focused on the numeric and categorical record fields.
Continue the workflow
- Then use Housing.com Scraper - Indian Property Listings to extend Funda.nl Scraper — Authorized Dutch Property Data API with a neighboring property research source when the brief calls for Housing data.
- Then use Domain.com.au Real Estate Scraper to extend Funda.nl Scraper — Authorized Dutch Property Data API with a neighboring property research source when the brief calls for Domain data.
Design note
I found that the output contract exposes a compact outcome record in OUTPUT alongside a separate RUN_SUMMARY, which makes it straightforward to distinguish machine-readable run status from detailed diagnostics.
FAQ
When should I use startUrls instead of areas?
Use startUrls when your approved workflow already has Funda filters, sorting, or paging encoded in the search URL. Use areas when you have permission to collect from a named town, city, neighborhood, or postcode and a basic search is enough.
How does this Actor treat koop and huur?
listingType applies when the Actor creates searches from areas. An explicit Funda search URL keeps its own listing type and filters.
What records should I read first after a run?
Start with the dataset items for listing facts, then read OUTPUT for the compact outcome, and finally read RUN_SUMMARY for validation and charge diagnostics.
How can an AI agent use the results safely?
An agent can read the dataset, interpret the structured property fields, and preserve url plus sourceSearchUrl for provenance. The agent can also use the run summary to understand whether the execution completed, returned a partial result, or surfaced a configuration issue.
Can this Actor be used for commercial listings or login-only pages?
The supplied contract describes authorized public residential listing collection only, with output scope limited to public residential records.
Responsible use
Use this Actor only with authorization or another valid right to collect the requested Funda data. Treat listing descriptions, images, and other public content according to your contractual, copyright, GDPR, and local-law obligations. Keep the requested scope focused on authorized residential listings and review the live Pricing tab before running jobs at scale.