Funda Scraper 🏠 Sale & Rental Listings | Only $0.75/1,000 avatar

Funda Scraper 🏠 Sale & Rental Listings | Only $0.75/1,000

Pricing

from $0.75 / 1,000 property listings

Go to Apify Store
Funda Scraper 🏠 Sale & Rental Listings | Only $0.75/1,000

Funda Scraper 🏠 Sale & Rental Listings | Only $0.75/1,000

Extract Funda sale and rental listings by URL or city. Get structured property details, optional raw records and public agency contacts. Track price and status changes across runs. Start with a 5-listing sample.

Pricing

from $0.75 / 1,000 property listings

Rating

0.0

(0)

Developer

Pebblework Labs Inc

Pebblework Labs Inc

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

2 days ago

Last modified

Categories

Features

Limited permissions

Share

Funda Scraper 🏠 | $0.75 per 1,000 Listings

Dutch canal houses illustrating Funda property data, agency contacts and change tracking

Turn a Funda search into a property dataset. Come back to see what changed.

Paste a Funda search or property URL, or enter a Dutch city and price range. Get one structured row per unique listing, with optional property details, the full raw source record, and public agency contacts. Save a monitoring key to compare price, status and property changes across runs.

Built for housing research, property analysis and recurring market monitoring. No Funda login required.

Try it with 5 listings

Enter these settings in the Input tab, then select Start. Once the run finishes, open Dataset to inspect the property rows and download your results. This example requests up to five Amsterdam homes with property details.

{
"location": "Amsterdam",
"transaction": "sale",
"maxItems": 5,
"includeDetails": true,
"residentialOnly": true,
"maxRequests": 8,
"maxRunSeconds": 180
}

Prefer a URL? Replace location and transaction with:

{
"searchUrls": ["https://www.funda.nl/zoeken/koop?selected_area=amsterdam&price=300000-600000"],
"maxItems": 5,
"includeDetails": true,
"residentialOnly": true,
"maxRequests": 8,
"maxRunSeconds": 180
}

Use either URL inputs or simple search settings in one run. Work limits can stop a run before the requested number is reached; its coverage summary explains why.

Bulk extraction

Requests above 50 properties automatically split dense searches into smaller price ranges. Results appear together in one dataset, deduplicated by Funda property ID. Each page is checkpointed; unfinished partitions retry with a bounded delay while completed work is retained. The Actor's status and Extraction progress output show delivered rows and pending or failed partitions. Confirmed rows can be downloaded while collection continues.

This bounded example targets 1,000 basic listing snapshots:

{
"location": "Amsterdam",
"maxItems": 1000,
"autoPartition": true,
"includeDetails": false,
"maxPages": 160,
"maxRequests": 250,
"maxRunSeconds": 1800,
"maxTrafficMb": 150
}

All partitions share these whole-run limits and one delivery/billing journal. Reaching 1,000 rows is limited coverage of the search, not a claim that every matching property was collected. Source failures or exhausted budgets can produce fewer rows. Original scope totals are reconciled before reporting complete coverage; unpriced listings are checked through the original search when needed. Explicit sort orders and starting pages retain ordinary pagination. Set autoPartition: false to use ordinary pagination for any search.

To resume an interrupted run, use Apify's Resurrect action with its original build and unchanged input. It reconciles existing output before continuing; work and fee budgets do not reset. Starting a new run creates a separate job and can charge for the same results again once customer billing is enabled.

What can you do with it?

Your goalWhat to use
Compare homes in a city or price bandStructured prices, addresses, living areas, bedrooms and energy labels
Build a richer property datasetOptional descriptions, coordinates, construction year, features, VvE and cadastral sections
Watch a search over timePersistent first/last observed times, changed fields and previous values
Connect properties with their agenciesOptional public agency names, phone numbers, emails and websites, where available
Keep source fields for your own analysisOptional complete raw property record alongside normalized fields
Feed a report or data pipelineApify dataset access, JSON exports and CSV options

Why try this Funda scraper?

  • Start with a city, not a query URL. Choose sale or rent, then narrow by price, living area, room count or property type.
  • Get useful columns immediately. Numeric EUR prices, normalized statuses and energy labels, stable listing identities, and explicit missing values make the output easier to work with.
  • Keep the raw data when you need it. Enable includeRawRecord to retain the full detail response alongside the structured record. This also enables detail collection.
  • Follow changes across runs. Reuse a monitoringKey to identify newly observed, updated, unchanged and returned listings. Use changesOnly to suppress verified unchanged rows.
  • Add public agency contacts. Enable includeAgencyContacts; each unique agency is looked up once per run and its available contact fields are attached to relevant properties.
  • Know what was collected. The run summary distinguishes complete, empty, limited and partial results, with per-search coverage and stop reasons.

Choose how much data to collect

ModeSettingsOutput
Listing snapshotDefaultSearch-result fields such as price, address, area, bedrooms and energy label, where available
Property detailsincludeDetails: trueAdds descriptions, coordinates, construction year, full feature sections and media links, where available
Raw source recordincludeRawRecord: trueAdds the complete property detail object and the original search record for search-derived rows
Agency contactsincludeAgencyContacts: trueAdds public agency name, phone, email and website, where available
Repeat-run monitoringSet monitoringKeyAdds observed history and field changes for one fixed search scope

A direct Funda property URL fetches that property's details automatically. Photos, floor plans, videos and brochures are returned as links; media files are not downloaded.

Example output

Trimmed from a real detailed result collected on November 5, 2026. Prices, availability and source data can change.

{
"schemaVersion": "2.0",
"globalId": "8216708",
"transaction": "sale",
"address": "Columbusplein 12-1",
"postalCode": "1057TZ",
"city": "Amsterdam",
"province": "Noord-Holland",
"neighbourhood": "Columbusplein e.o.",
"price": 450000,
"currency": "EUR",
"bedrooms": 2,
"energyLabel": "C",
"yearBuilt": 1929,
"status": "available",
"detailStatus": "complete"
}

Detailed rows can also contain description, latitude, longitude, featureSections, cadastral, vve, floorPlans, photos360, videos and brochureUrl. Optional rawRecord, agencyContacts and change fields hold raw source data, agency enrichment and monitoring history. Missing source values remain null; a missing value is not converted to zero.

Track new observations and price changes

Run this input, then repeat it later with the same monitoring key:

{
"location": "Amsterdam",
"transaction": "sale",
"minPrice": 300000,
"maxPrice": 600000,
"includeDetails": true,
"residentialOnly": true,
"monitoringKey": "amsterdam-sale-300k-600k",
"changesOnly": true,
"maxItems": 20,
"maxRequests": 25,
"maxRunSeconds": 180
}

The first run establishes observations; later runs compare the homes they actually see. Updated rows include changedFields and previous values. Reusing the same key with a different search scope is rejected; use a new key when changing that scope. Run one collection at a time for each key.

An unchanged search can produce zero dataset rows with changesOnly: true. Suppressed observations still count toward the item limit and consume source requests. A failed detail lookup stays explicitly unverified rather than being labelled a change.

The separate REMOVALS output is only populated after complete, exact search coverage. Absence means a listing left that search scope; it does not prove a sale or delisting. A capped snapshot cannot establish complete market changes. First-seen times mean first observed by this monitoring key, not the property's original publication date.

Main inputs

InputPurposeDefault
locationDutch city or Funda area slug; use instead of URLsRequired in simple search mode
transactionsale or rentsale in simple search mode
searchUrlsFunda search URLs or individual property URLsUse instead of simple search settings
minPrice, maxPricePrice range in EURUnset
minLivingArea, maxLivingAreaLiving-area range in m²Unset
minRooms, minBedroomsMinimum room/bedroom countUnset
propertyTypeshouse, apartment, parking or building_plotUnset
includeDetailsCollect detailed property informationfalse
includeRawRecordPreserve complete raw property data; enables detailsfalse
includeAgencyContactsFetch available public agency contactsfalse
monitoringKeyPersistent history for a fixed search scopeUnset
changesOnlySuppress verified unchanged rows; requires a monitoring keyfalse
residentialOnlyKeep confirmed houses/apartmentsfalse
maxItemsGlobal unique-observation limit across all inputs20; maximum 1000

Use maxRequests, maxPages, maxRunSeconds and maxTrafficMb to bound source work. An item limit is a ceiling, not a promise that the source will return that many homes.

Export and automate

Use the Apify dataset API to connect results to your own workflow. To repeat a search, save it as an Apify task and configure a schedule; use the same monitoring key when you want a continuing history. Running the Actor once does not create a schedule.

Download JSON/JSONL for complete nested and raw records. Native CSV is convenient for selected fields, but Apify's 2,000-column limit can omit fields when large nested records are flattened. Use JSON/JSONL when you need all nested fields; select a smaller set of fields for CSV.

Pricing and beta availability

Currently a private beta with pay-per-event pricing configured. The Actor has not been published on the Store. Basic extraction starts at $0.75 per 1,000 delivered listings, plus the run-start fee. Start with the five-listing example to assess your results.

EventPrice (USD)
Basic property listings$0.75 per 1,000 delivered listings
Complete property detailsAdditional $0.75 per 1,000 complete details ($1.50 total per 1,000 detailed listings)
Optional agency contacts$3.50 per 1,000 successfully enriched unique agencies per run
Run start$0.005 per run at up to 1 GB RAM, including runs with no new or changed output; $0.01 at 2 GB

These event prices include standard run infrastructure costs. Overlapping inputs do not charge twice for the same property in one run. Failed detail and agency lookups do not incur their optional enrichment fees. Repeated scheduled runs can charge for results again. With changesOnly, suppressed unchanged rows have no listing, detail or contact fee; the run-start fee still applies. Apify's Pricing tab is the source of truth for active prices.

maxSpendUsd limits listing, detail and agency fees. The run-start fee is additional, including when this input is zero. Use Apify’s maximum cost per run to cap all event fees including the start fee. At up to 1 GB RAM, the minimum selectable total cap is $0.005; a detailed listing needs at least $0.0065 including start. At 2 GB, allow $0.01 for start alone. Use the source-work limits above to bound a trial. Owner-run infrastructure benchmarks are not customer prices.

Frequently asked questions

Does it work for rentals? Yes. Set transaction to rent, or use a Funda /zoeken/huur URL. Use sale or rental asking prices for analysis; these are not verified completed transaction prices.

Does it support fundainbusiness.nl? No. This Actor accepts supported funda.nl search and property URLs; the separate commercial portal is not supported.

Can I fetch a single property? Yes. Put its current Funda /detail/koop/... or /detail/huur/... URL in searchUrls and set maxItems to 1.

Can I collect all of the Netherlands? Collection follows your supplied search scope, up to 1,000 unique observations per run and your other work limits. Nationwide completeness and unlimited extraction are not promised. Automatic nationwide partitioning is not implemented.

Are contact details guaranteed? No. Agency enrichment returns public details available from the source. It does not discover private owner contacts or infer missing emails.

Are descriptions translated? No. Source descriptions and feature labels are generally Dutch. Neighbourhood names are available where supplied; demographic enrichment is not included.

What happens if collection stops early? Inspect the SUMMARY output. It reports coverage, counts, errors and stop reasons. Bounded runs can finish with limited coverage; source failures and excessive row issues are reported separately. Previously confirmed rows are retained.

How was it tested? Automated tests cover extraction, input validation, monitoring, spending limits, interrupted delivery and billing reconciliation. Private cloud checks inspect actual exported rows, not only the container status. An earlier reliability check exhausted its 60-second source budget without a result; the current release adds request diagnostics and reports unsuccessful zero-result collection as failed. A successful small sample does not establish seven-day reliability or nationwide completeness.

Help and technical details

Report a problem through the Actor's support/Issues channel when available. Include the run ID, input and the fields you expected, without credentials. This helps reproduce missing results, source changes and filter problems.

Use the Input, Output and API tabs for field definitions and integration examples. For complete nested data, export JSON or JSONL.

This Actor is independent of Funda and is not affiliated with or endorsed by Funda.