Funda APIfunda.nl ↗
Access Funda.nl property listings via API. Search active and sold Dutch real estate by city or municipality with prices, addresses, agent info, and listing details.
What is the Funda API?
The Funda.nl API provides access to the Netherlands' largest real estate platform through 4 endpoints covering active listings, listing details, full-area sync, and sold property history. The search_listings endpoint returns up to 15 listings per page with fields including asking price, address components, living area, construction type, agent details, and a stable global_id that persists across requests — usable as a reliable key for tracking individual properties over time.
curl -X GET 'https://api.parse.bot/scraper/1f378595-7797-4954-8a24-14454fd69432/search_listings?area=amsterdam&page=1&max_pages=1&offering_type=buy' \ -H 'X-API-Key: $PARSE_API_KEY'
Search for active (for sale / for rent) property listings on Funda.nl by city or municipality with page-based pagination. Returns up to 15 listings per page with stable integer global_id, url, address, asking price, property details, construction_type, thumbnail_url, agent, raw status and normalized availability. Paginated via page number (1-based, default 1); max_pages fetches multiple consecutive pages in one call (default 1); total_pages reports how many 15-listing pages exist. area_type='municipality' covers the whole gemeente; omitted or 'city' searches the town itself; a name that does not resolve to the requested area_type returns an empty result. Sold listings are always excluded; sold-under-reservation listings are excluded by default and kept with availability 'sold_subject_to_conditions' when include_sold_under_reservation is true; under bid / under option listings are kept with availability 'under_offer'. Because exclusion happens after fetching, a page may hold fewer than 15 listings; excluded_inactive reports how many were removed and total_available is the site's count before removal. property_type optionally narrows results to houses or apartments; all residential types are returned when omitted.
| Param | Type | Description |
|---|---|---|
| area | string | Area name to search (e.g. 'amsterdam', 'purmerend', 'utrecht'). Resolved to Funda's geo identifier. |
| page | integer | Page number to start from (1-based) |
| area_type | string | Interpret area as a 'city' (town) or a 'municipality' (gemeente, all places within it). When omitted the name is matched as given, preferring city/municipality geo entries. |
| max_pages | integer | Maximum number of pages to fetch (15 listings per page) |
| offering_type | string | Type of offering: 'buy' or 'rent' |
| property_type | string | Restrict results to one property type: 'house' or 'apartment'. Omit to return all residential property types. |
| include_sold_under_reservation | boolean | When true, listings sold under reservation (verkocht onder voorbehoud) are kept with availability 'sold_subject_to_conditions' instead of being excluded. |
{
"type": "object",
"fields": {
"area": "string - Area searched",
"page": "integer - Starting page number",
"listings": "array of listing objects with global_id (stable integer listing identifier), url, address (street, house_number, postal_code, city, neighbourhood, municipality, province), price (asking price, euros), price_condition, object_type, floor_area_m2, number_of_bedrooms, energy_label, construction_type ('resale'/'newly_built'), status (raw Funda status), availability ('available', 'under_offer', 'sold_subject_to_conditions'), publish_date, thumbnail_url, agent",
"area_type": "string or null - 'city' or 'municipality' when given, null when the name was matched as-is",
"page_size": "integer - Upstream listings per page (fixed at 15)",
"total_pages": "integer - Number of 15-listing upstream pages covering total_available",
"pages_fetched": "integer - Number of pages actually fetched",
"property_type": "string or null - Property type filter applied ('house' or 'apartment'), null when not filtered",
"total_available": "integer - Total number of listings matching the search on the site, before sold / sold-under-reservation listings are removed",
"excluded_inactive": "integer - Number of fetched listings removed because they were sold (or sold under reservation unless included)",
"listings_returned": "integer - Number of listings in this response"
},
"sample": {
"data": {
"area": "purmerend",
"page": 1,
"listings": [
{
"url": "https://www.funda.nl/detail/koop/purmerend/huis-de-graeffweg-4/44538461/",
"agent": "Van Overbeek Makelaars o.g. Purmerend BV",
"price": 425000,
"status": "none",
"address": {
"city": "Purmerend",
"street": "De Graeffweg",
"province": "Noord-Holland",
"postal_code": "1446BJ",
"house_number": "4",
"municipality": "Purmerend",
"neighbourhood": "De Graeffweg en omgeving"
},
"global_id": 8183008,
"price_type": "regular",
"object_type": "house",
"availability": "available",
"energy_label": "A",
"publish_date": "2026-10-08T12:00:02.8306813+02:00",
"floor_area_m2": 113,
"offering_type": [
"buy"
],
"thumbnail_url": "https://cloud.funda.nl/tiara-media/5cf2235f-32af-4dc0-9102-84ed3b993db1/bc064ee4-40c1-46eb-ae7e-b1ade6bf10c2",
"number_of_rooms": 5,
"price_condition": "kosten_koper",
"construction_type": "resale",
"number_of_bedrooms": 4
}
],
"area_type": "municipality",
"page_size": 15,
"total_pages": 40,
"pages_fetched": 2,
"property_type": null,
"total_available": 589,
"excluded_inactive": 0,
"listings_returned": 30
},
"status": "success"
}
}About the Funda API
Searching and Browsing Active Listings
The search_listings endpoint accepts an area parameter (city name or municipality, e.g. amsterdam, purmerend) alongside optional filters for offering_type (buy or rent), property_type (house or apartment), and page. Each response includes total_available, total_pages, and pages_fetched counts, making it straightforward to paginate through results. The excluded_inactive field tells you how many fetched listings were filtered out because they were already sold or sold under reservation. You can retain sold-under-reservation listings by setting include_sold_under_reservation to true, at which point those listings appear with availability set to sold_subject_to_conditions.
Full-Area Synchronization with get_all_listings
For scenarios where you need every active listing in an area, get_all_listings auto-paginates all result pages in a single call and returns an is_complete boolean indicating whether the full result set was fetched without hitting the limit cap. The known_ids parameter accepts a comma-separated list of global_id values from a previous run; the response then includes a removed_ids array of integers representing listings that have since disappeared from the active set. This makes incremental synchronization practical: fetch all listings once, store their global_id values, then pass them back on subsequent calls to detect removals. The endpoint caps at 10,000 listings per call.
Listing Detail and Sold History
get_listing_detail takes a global_id (obtained from search_listings or get_all_listings) and returns richer fields: brokers (name and office_id), labels (e.g. ['Nieuw']), living_area, bedrooms, listing_type, and a share_url. Note that very recently listed properties may have a short delay before detail data is available. For historical research, get_sold_listings retrieves completed sales for a given area with fields including last asking price, living_area_m2, plot_area_m2, listing_status, and normalized availability set to sold. It supports page-based pagination and a limit parameter.
The Funda API is a managed, monitored endpoint for funda.nl — not a raw scraper you maintain. Every endpoint is automatically health-checked on a schedule, and when funda.nl changes and a check fails, the API is automatically queued for repair and re-verified. It is built to keep working as the site underneath it changes.
This isn't an official funda.nl API — it's an independent, maintained REST wrapper over public data. Where the source has no official API (or only a limited one), Parse gives you a stable contract over a source that never promised one, and keeps it current. Need a new endpoint or field? You can revise it yourself in plain English and the agent rebuilds it against the live site in minutes — contributing the change back to the shared API is free.
Will this API break when the source site changes?+
Is this an official API from the source site?+
Can I fix or extend this API myself if I need a new endpoint or field?+
What happens if I call an endpoint that has an issue?+
- Build a Dutch property price tracker that monitors asking price changes using stable
global_idvalues across repeatedget_all_listingscalls. - Detect newly removed or sold listings in a municipality by passing
known_idstoget_all_listingsand inspecting theremoved_idsarray. - Aggregate sold property data per neighborhood using
get_sold_listingsto analyze historical price trends by city. - Filter Amsterdam apartment rentals by
offering_type=rentandproperty_type=apartmentinsearch_listingsfor a rental market dashboard. - Enrich a CRM or lead tool with broker
nameandoffice_idfromget_listing_detailto map agent activity across a region. - Alert users to new listings in a target municipality by comparing
total_availableandglobal_idsets between dailyget_all_listingsruns. - Research construction type distribution across Dutch cities using the
construction_typefield returned in listing objects.
| Tier | Price | Credits/month | Rate limit |
|---|---|---|---|
| Free | $0/mo | 200 | 5 req/min |
| Hobby | $30/mo | 1,000 | 20 req/min |
| Developer | $100/mo | 5,000 | 100 req/min |
| Team | $300/mo | 20,000 | 300 req/min |
| Company | $1,000/mo | 100,000 | 500 req/min |
Each endpoint has a fixed posted price per successful call — most fall between 1 and 10 credits — shown on this API's page before you run it. Exceeding the rate limit returns a 429 response. Authenticate with the X-API-Key header.
Does Funda.nl have an official developer API?+
What does the `global_id` field represent and can I rely on it across multiple calls?+
global_id is Funda's permanent integer identifier for a listing. It does not change between calls, so you can use it as a stable key to join results across search_listings, get_all_listings, and get_listing_detail calls, or to detect when a specific listing disappears from the active set.Does `get_all_listings` return listings from the entire Netherlands in one call?+
area parameter scoped to a city or municipality and caps results at 10,000 listings per call. It does not support a country-wide query in a single request. You can fork this API on Parse and revise it to loop over a list of municipalities and aggregate results across calls.Are property photos beyond the thumbnail available from the listing endpoints?+
search_listings and get_all_listings include a thumbnail_url field. Full photo galleries are not currently returned by any endpoint. You can fork this API on Parse and revise it to add a photo-fetching endpoint using the global_id or listing URL.How do I tell whether a result set from `get_all_listings` is complete or truncated?+
is_complete boolean in the response. It is true only when every available page was fetched and no listing was cut off by the limit parameter. If is_complete is false, increase limit or set it to 0 to attempt fetching all available listings up to the 10,000 cap, and compare pages_fetched against total_pages to confirm full coverage.