Funda.nl Scraper | Dutch Property & Real Estate avatar

Funda.nl Scraper | Dutch Property & Real Estate

Pricing

from $0.70 / 1,000 listings

Go to Apify Store
Funda.nl Scraper | Dutch Property & Real Estate

Funda.nl Scraper | Dutch Property & Real Estate

Extract residential and commercial property listings from Funda.nl and FundainBusiness.nl — prices, addresses, features and images. Netherlands real estate data.

Pricing

from $0.70 / 1,000 listings

Rating

0.0

(0)

Developer

Ahmed Jasarevic

Ahmed Jasarevic

Maintained by Community

Actor stats

0

Bookmarked

5

Total users

1

Monthly active users

13 hours ago

Last modified

Share

Funda.nl & FundainBusiness.nl Scraper

The ultimate Funda scraper for extracting Netherlands property data — residential and commercial listings from the largest Dutch real estate platform. Get structured property data for analytics, investment screening, and market research.

Use Cases

  • Real Estate Analytics — Analyze Dutch housing market trends, property prices, and inventory across cities
  • Investment Screening — Identify high-yield rental properties and commercial real estate opportunities in the Netherlands
  • Agent Lead Generation — Collect listing agent contact details to build a Dutch real estate agent database
  • Price Monitoring — Track property price changes and days-on-market to spot market shifts
  • Market Research — Study Amsterdam, Rotterdam, and Den Haag apartment availability and pricing
  • Commercial Real Estate — Scrape office, retail, and commercial listings from FundainBusiness.nl

How It Works

  1. Pass one or more Funda.nl or FundainBusiness.nl search URLs as input
  2. The actor navigates each search result page and extracts property details
  3. Each listing is parsed into structured JSON — address, price, size, rooms, agent, and more
  4. Results are stored in a dataset you can download as JSON, CSV, or Excel

Input

FieldTypeRequiredDefaultDescription
startUrlsarrayNo*Funda URLs: search pages (/zoeken/koop, /zoeken/huur) or single listings (/detail/…, object-…). Leave empty to search via filters below
searchLocationstringNoCity / area slug, or place, Nkm for a radius (e.g. amsterdam, coevorden, 10km)
searchKeywordsstringNoFree-text keywords Funda should match (e.g. gracht, tuin, nieuwbouw)
searchTransactionTypestringNobuybuy (koop) or rent (huur)
searchPriceMinintegerNoMinimum price in EUR
searchPriceMaxintegerNoMaximum price in EUR
contentLanguagestringNoenListing text language: en (English) or nl (Dutch original)
scrapeDetailsbooleanNotruetrue = full detail pages; false = Light mode (card data only — 15-25x fewer requests)
maxItemsintegerNo100000Stop after this many listings (0 = unlimited)
minConcurrencyintegerNo10Minimum parallel workers
maxConcurrencyintegerNo50Maximum parallel requests
maxRequestRetriesintegerNo3Retries on failed HTTP calls
proxyobjectNoApify ResidentialProxy configuration for request routing

* startUrls is optional: if empty and at least one search filter is set, the Actor builds the Funda search URL for you.

Example Input

{
"startUrls": [
{ "url": "https://www.funda.nl/zoeken/koop?selected_area=%5B%22amsterdam%22%5D" }
],
"scrapeDetails": true,
"contentLanguage": "en",
"maxItems": 50,
"maxConcurrency": 50,
"proxy": {
"useApifyProxy": true
}
}

Or search purely by filters (no URLs needed):

{
"searchLocation": "amsterdam",
"searchKeywords": "tuin",
"searchTransactionType": "buy",
"searchPriceMin": 300000,
"searchPriceMax": 600000,
"maxItems": 30
}

Fast & Cheap Mode (scrapeDetails: false)

Set scrapeDetails to false to skip visiting every detail page. Light mode no longer reads only the search cards — it parses the full listing JSON embedded in the search page's __NUXT_DATA__ payload, so each card yields near-detail data (street, postcode, city, province, neighbourhood, municipality, formatted + numeric price, rooms, bedrooms, living area, energy label, status, offering/object/construction type, agent name, and a high-res photo URL) without a single extra request beyond the list page itself. That cuts the number of residential proxy requests by roughly 15-25x while keeping most of the signal that used to require detail pages. Ideal for bulk surveys, price monitoring, and lead lists.

Only description, coordinates, floor plans, videos, build year, and the full characteristics tables are exclusive to Detail mode.

Monetization (pay-per-event)

The code already emits charge events via Actor.charge(), but they only activate once you enable monetization — otherwise runs stay free.

There are two chargeable events, mirroring the two output tiers:

Event nameFires whenMeaning
listing-scrapedevery listing, both modesyour "default dataset item" — one charge per pushed result
detail-itemonly when scrapeDetails: truethe extra per-item charge for full detail data

So in Light mode every result fires 1 charge (listing-scraped), and in Detail mode every result fires 2 charges (listing-scraped + detail-item).

To start charging:

  1. In Apify Console open Publishing → Monetization and choose the pay-per-event model.
  2. Define a chargeable event and name it exactly listing-scraped and set its price.
  3. Optionally define a second event named exactly detail-item and set its price (users only pay it when they enable full detail scraping).
  4. Publish/save — charges start applying on the next runs. The run stops automatically at the user's budget limit.

Test locally: ACTOR_TEST_PAY_PER_EVENT=true apify run — records appear in the charging-log dataset at the default $1 test price.

Cheapest tips for you (and your users): keep maxItems bounded, prefer scrapeDetails: false (charges only 1 event, not 2), use a low price per event (e.g. $0.0005 for listing-scraped and $0.00075 for detail-item), skip any Actor Start fee. It runs on a default 512 MB (CheerioCrawler is memory-light), so compute stays cheap while the fast parser keeps concurrency high.

Output

Light mode — near-detail data per card (single list-page request):

url, tinyId, title, address (street, postcode, city, province, neighbourhood, municipality), price ({ formatted, numeric }), stats (rooms, bedrooms, livingArea, plotArea), energyLabel, status, offeringType, objectType, constructionType, publicationDate, agentName, photoUrl, scrapeMode, scrapedAt

Detail mode — each result contains:

FieldDescription
urlDirect link to the listing on Funda
titleProperty headline (e.g., "Ruim 3-kamer appartement")
tinyId / globalIdFunda internal identifiers
addressstreet, postcode, city, province, neighborhood, municipality
coordinates{ latitude, longitude } when available
agentNameListing agent / makelaar
price{ formatted, numeric } (e.g. "€ 425.000 k.k." / 425000)
statsrooms, bedrooms, living area (m²), plot area (m²)
statuslisting status (available, sold…)
offeringTypekoop or huur
objectType / constructionTypeProperty & construction type
publicationDateWhen the listing was published
surfacesTotal surface & number of floors
buildBuild year & energy label
mediaphoto URLs, floor-plan URLs, video URLs
characteristicsBySectionFull characteristic tables (overdracht, oppervlakten, energie…)
advertisementTargetingFunda native targeting payload
descriptionFull property description
scrapedAtTimestamp of when the listing was scraped

Example Output

{
"url": "https://www.funda.nl/koop/amsterdam/appartement-stationsplein-10/",
"tinyId": "12345678",
"title": "Stationsplein 10 1012AB Amsterdam",
"scrapeMode": "detail",
"address": { "streetAddress": "Stationsplein 10", "postcode": "1012ab", "city": "amsterdam" },
"coordinates": { "latitude": 52.378, "longitude": 4.900 },
"agentName": "Makelaardij Amsterdam",
"price": { "formatted": "€ 425.000 k.k.", "numeric": 425000 },
"stats": { "rooms": 3, "bedrooms": 2, "livingArea": 78, "plotArea": null },
"status": "beschikbaar",
"offeringType": "koop",
"objectType": "apartment",
"publicationDate": "2026-08-30",
"media": { "photoUrls": ["https://cloud.funda.nl/..."], "floorPlanUrls": [], "videoUrls": [] },
"description": "Uitstekend onderhouden appartement op steenworp van het Centraal Station...",
"scrapedAt": "2026-09-11T13:00:00Z"
}

Integrations

  • Google Sheets — Export dataset rows directly via Apify integration
  • Zapier — Trigger workflows on new scraping runs or row updates
  • Make (Integromat) — Connect to CRM, email, or spreadsheet tools
  • Slack — Get notified when scraping completes or new listings arrive
  • Airtable — Push listings into a custom property database
  • Custom API — Pull results via the Apify API for your own dashboards

FAQ

Does this scrape FundainBusiness.nl as well? Yes. Pass URLs from either funda.nl (residential) or fundainbusiness.nl (commercial) — the actor handles both.

Can I scrape multiple cities in one run? Yes. Add multiple Funda search URLs to startUrls, or leave them empty and set searchLocation/maxItems to crawl the largest areas first.

Can I filter by city, price or keywords? Yes — fill searchLocation, searchPriceMin/searchPriceMax, searchKeywords and searchTransactionType. If startUrls is filled, filters are ignored.

What proxy should I use? The default Apify residential proxy is recommended. For high-volume scraping, residential proxies reduce blocking risk.

Is the data real-time? Yes — the actor fetches live data from Funda at the time of each run.

How is pricing calculated? Standard Apify compute only (memory × runtime) plus the per-result charge if the developer enables pay-per-event monetization. Use scrapeDetails: false for the cheapest runs.

For AI Agents

Use this actor when the user needs:

  • Dutch property listings (buy or rent)
  • Amsterdam, Rotterdam, Den Haag, Utrecht real estate data
  • Funda scraping or FundainBusiness.nl commercial data
  • Netherlands housing market analytics input
  • Property investment screening in the Dutch market

Pass the search URL exactly as it appears on Funda, or simply state a city + price range. The actor returns structured JSON — no additional parsing needed.

actor: funda-hybrid-scraper
input:
searchLocation: amsterdam
searchPriceMin: 300000
searchPriceMax: 600000
maxItems: 20

SEO Keywords

funda scraper, netherlands real estate data, dutch property listings, funda api alternative, amsterdam property data, dutch housing market, funda.nl property scraper, netherlands real estate analytics, dutch rental market, property investment netherlands, funda commercial real estate, dutch property prices, amsterdam apartments, netherlands housing data, funda listing data, fundainbusiness scraper, dutch real estate api, netherlands property database, amsterdam rental listings, funda data extraction

This actor scrapes publicly available listing data from Funda.nl and FundainBusiness.nl. It does not bypass authentication, access private user accounts, or circumvent technical protection measures. Use of this tool is subject to Funda's terms of service. Users are responsible for ensuring their use complies with applicable laws and regulations, including the GDPR when processing personal data of EU residents.

Verified related actors on Apify that pair well with this one. All links point to real, publicly available actors.