Funda Netherlands Property Listings & Agent Scraper avatar

Funda Netherlands Property Listings & Agent Scraper

Pricing

from $17.00 / 1,000 results

Go to Apify Store
Funda Netherlands Property Listings & Agent Scraper

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

Scrapers Lat

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

3 days ago

Last modified

Share

Funda Netherlands Property Listings & Agent Scraper

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

Apify Coverage Output Billing

Table of contents

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

FieldTypeRequiredDefaultDescription
searchQueriesstring[]no["amsterdam"]Dutch cities, towns or areas to search, for example amsterdam, utrecht, den-haag, rotterdam. Also accepts searchQuery (string).
listingTypeenumnobuybuy (for sale) or rent.
maxListingsintegerno10Maximum listings to collect across all areas. Also accepts maxItems.
withDetailsbooleannotrueEnrich each listing with year built, full description, coordinates and extra attributes from its detail page. Disable for a faster list-only run.
priceMinintegerno(none)Only return listings at or above this price in euros.
priceMaxintegerno(none)Only return listings at or below this price in euros.
withSummarybooleannofalsePaid add-on. Adds aiSummary, a concise English summary. Charged only on usable output. Requires a paid Apify plan.
withFeaturesbooleannofalsePaid add-on. Adds AI structured features (aiBeds, aiBaths, aiSizeSqft, aiAmenities, aiCondition). Charged only on usable output. Requires a paid plan.
withTranslatebooleannofalsePaid 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.

FieldTypeDescription
imageUrlstringPrimary listing photo URL.
listingUrlstringPublic Funda URL of the listing.
idstringFunda listing ID (unique per listing).
streetstringStreet name and house number.
citystringCity.
postcodestringDutch postal code.
neighbourhoodstringNeighbourhood name, or null.
municipalitystringMunicipality.
provincestringProvince.
countrystringCountry code (NL).
propertyTypestringProperty type, for example apartment, house.
listingTypestringbuy or rent.
constructionTypestringFor example resale or new, or null.
statusstringListing status when set, else null.
priceintegerAsking price (sale) or rent, in euros.
priceTypestringsale or rent.
priceCurrencystringAlways EUR.
livingAreaM2integerLiving area in square metres.
plotAreaM2integerPlot area in square metres, or null.
roomsintegerTotal number of rooms.
bedroomsintegerNumber of bedrooms.
bathroomsintegerNumber of bathrooms (from detail page), or null.
floorsintegerNumber of floors (from detail page), or null.
volumeM3integerVolume in cubic metres (from detail page), or null.
pricePerM2integerPrice per square metre (from detail page), or null.
gardenstringGarden description (from detail page), or null.
parkingstringParking or garage description, or null.
serviceChargesMonthlyintegerMonthly service charges (VvE) in euros, or null.
acceptancestringAcceptance/handover terms, or null.
energyLabelstringEnergy label (for example A, E), or null.
yearBuiltintegerYear of construction (from detail page), or null.
latitudenumberLatitude (from detail page), or null.
longitudenumberLongitude (from detail page), or null.
descriptionstringFull listing description (Dutch), or null.
publishDatestringPublish date/time of the listing.
agentNamestringListing agent/office name.
agentContactNamestringNamed contact person at the office, or null.
agentOfficestringOffice name.
agentAssociationstringAgent association (for example NVM), or null.
agentIdstringFunda agent ID.
agentUrlstringFunda agent page URL.
agentPhonestringAgent phone number, or null.
agentEmailstringAgent email (Funda relay addresses excluded), or null.
agentWebsitestringAgent website URL, or null.
photosstring[]All listing photo URLs.
photoCountintegerNumber of photos.
searchQuerystringThe area query this listing came from.
sourcestringAlways Funda.
aiSummarystringAI English summary. null unless withSummary produced output.
aiBedsintegerAI-extracted bed count. null unless withFeatures produced output.
aiBathsnumberAI-extracted bath count. null unless withFeatures produced output.
aiSizeSqftintegerAI-extracted size in sqft. null unless withFeatures produced output.
aiAmenitiesstring[]AI-extracted amenity tags. null unless withFeatures produced output.
aiConditionstringAI condition estimate. null unless withFeatures produced output.
aiDescriptionEnstringAI English translation of the description. null unless withTranslate produced output.
observedAtstringISO 8601 timestamp of when the record was collected.
errorstringnull 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:

# JSON
curl "https://api.apify.com/v2/datasets/<DATASET_ID>/items?token=<TOKEN>&clean=true&format=json"
# CSV
curl "https://api.apify.com/v2/datasets/<DATASET_ID>/items?token=<TOKEN>&clean=true&format=csv"
# Paginate large datasets
curl "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 (result event). See the pricing tab for the current per-result price.
  • Optional add-ons. details (detail-page enrichment) and agent_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 error field and does not charge for it. Empty runs cost nothing.
  • Spend cap respected. Set maxTotalChargeUsd on 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.

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.