Funda.nl Scraper — Authorized Residential Listings avatar

Funda.nl Scraper — Authorized Residential Listings

Pricing

from $10.00 / 1,000 authorized residential listing collecteds

Go to Apify Store
Funda.nl Scraper — Authorized Residential Listings

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

Khadin Akbar

Maintained by Community

Actor stats

0

Bookmarked

1

Total users

0

Monthly active users

15 days ago

Last modified

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

FieldTypePurpose
confirmAuthorizationbooleanConfirms that the caller has permission to collect the requested Funda data. Required.
startUrlsarrayApproved Funda search or detail URLs on www.funda.nl under /zoeken/koop, /zoeken/huur, /detail/koop, or /detail/huur.
areasarray of stringsNamed residential areas used to create a basic Funda search when no search URL is provided.
listingTypestringkoop or huur when generating searches from areas.
maxResultsintegerMaximum number of valid listing records returned and billed. Range: 1 to 500.
maxPagesintegerMaximum number of search pages per URL or area. Range: 1 to 20.
requestDelayMillisintegerPolite delay between requests in milliseconds. Range: 1000 to 10000.
includeDescriptionbooleanIncludes the public listing description when available and requested.
proxyConfigurationobjectApify 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.

FieldTypePurpose
listingIdstring or nullNumeric identifier from the Funda detail URL.
urlstringCanonical public Funda residential detail URL.
listingTypestringkoop for sale or huur for rent.
titlestring or nullPublic listing heading.
addressstring or nullPublic street address when displayed.
postalCodestring or nullDutch postal code when displayed.
citystring or nullLocality from the listing.
provincestring or nullDutch province when available.
countrystringCountry context, NL.
pricenumber or nullPublished asking price or monthly rent.
currencystringPricing currency, typically EUR.
priceTypestringasking_price or rent_per_month.
priceQualifierstring or nullPrice qualifier such as k.k. or p.m..
livingAreaSqminteger or nullPublished living area in square metres.
plotAreaSqminteger or nullPublished plot area in square metres.
roomsinteger or nullPublished room count.
bedroomsinteger or nullPublished bedroom count.
energyLabelstring or nullDutch energy label when published.
yearBuiltinteger or nullConstruction year when published.
propertyTypestring or nullPublic housing or apartment type.
constructionTypestring or nullNew or existing construction when published.
statusstring or nullPublic availability status when shown.
descriptionstring or nullPublic listing description when requested and displayed.
brokerNamestring or nullPublicly displayed makelaar name.
imageUrlstring or nullPrimary public image URL.
imageUrlsarrayPublic image URLs discovered on the detail page.
sourceSearchUrlstring or nullSearch URL that led to the record.
scrapedAtstringISO 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:

  • OUTPUT for the machine-readable run outcome,
  • RUN_SUMMARY for 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 OUTPUT for the compact run outcome,
  • read RUN_SUMMARY for request counts, validation details, and charge diagnostics,
  • use sourceSearchUrl to preserve the approved search context when the record came from a search page,
  • use listingId and url as 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 koop and huur residential pages on www.funda.nl,
  • maxPages limits search discovery before detail pages are requested,
  • maxResults caps 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.