Funda APIfunda.nl ↗
Access Dutch property listings from Funda.nl. Search by city, get prices, addresses, floor area, bedrooms, energy labels, and broker info via 3 endpoints.
What is the Funda API?
The Funda.nl API provides access to property listings from the Netherlands' largest real estate platform across 3 endpoints. Use search_listings to query buy or rent listings by area and page through results 15 at a time, get_listing_detail to fetch full details for a specific property by its global ID, or get_all_listings to bulk-retrieve up to 10,000 listings for a given area in a single call.
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'
Typed, relational, agent-ready
A generated client with real types, enums, and the links between objects — the structure a flat JSON response can't carry. Autocompletes in your editor and reads cleanly to coding agents.
- Fully typed · autocompletes
- Objects link to objects
- Typed errors & pagination
Typed Python client. Set up the SDK in your uv project, then pull this API’s typed client:
uv add parse-sdk uv run parse init uv run parse add --marketplace funda-nl-api
uv run parse add --marketplace pulls a pinned snapshot of this canonical API — it won’t change underneath you. To customize it, subscribe and swap to your own copy.
"""Walkthrough: Funda.nl SDK — search Dutch property listings, drill into details."""
from parse_apis.funda.nl_property_listings_api import Funda, OfferingType, ListingNotFound
client = Funda()
# Search for properties in Amsterdam — limit caps total items fetched.
for listing in client.listingsummaries.search(area="amsterdam", offering_type=OfferingType.BUY, limit=5):
print(listing.address.city, listing.price, listing.object_type)
# Drill into the first result for full details.
summary = client.listingsummaries.search(area="rotterdam", limit=1).first()
if summary:
detail = summary.details()
print(detail.price_display, detail.living_area, detail.bedrooms)
for broker in detail.brokers:
print(broker.name, broker.office_id)
# Direct lookup by global_id with typed error handling.
try:
detail = client.listings.get(global_id="7983002")
print(detail.listing_type, detail.listing_status, detail.is_sold_or_rented)
except ListingNotFound as exc:
print(f"Listing not found: {exc.global_id}")
# Bulk fetch listings for rent in Utrecht.
for listing in client.listingsummaries.list_all(area="utrecht", offering_type=OfferingType.RENT, limit=3):
print(listing.address.street, listing.floor_area_m2, listing.energy_label)
print("exercised: listingsummaries.search / summary.details / listings.get / listingsummaries.list_all")
Search for property listings on Funda.nl by area with pagination. Returns 15 listings per page with prices, addresses, property details, and agent information. Paginated via page number; each page holds 15 results. Use max_pages to fetch multiple consecutive pages in one call.
| Param | Type | Description |
|---|---|---|
| area | string | Area/city to search in (e.g., 'amsterdam', 'rotterdam', 'utrecht') |
| page | integer | Page number to start from (1-based) |
| max_pages | integer | Maximum number of pages to fetch (15 listings per page) |
| offering_type | string | Type of offering: 'buy' or 'rent' |
{
"type": "object",
"fields": {
"page": "integer - Starting page number",
"listings": "array of listing objects with global_id, url, address, price, object_type, floor_area_m2, number_of_bedrooms, energy_label, agent, and more",
"page_size": "integer - Listings per page (fixed at 15)",
"pages_fetched": "integer - Number of pages actually fetched",
"total_available": "integer - Total number of listings matching the search",
"listings_returned": "integer - Number of listings in this response"
}
}About the Funda API
What the API Returns
The search_listings endpoint accepts an area parameter (e.g., amsterdam, rotterdam, utrecht), an offering_type of buy or rent, and pagination controls (page, max_pages). Each response includes a listings array where every object carries a global_id, url, address, price, object_type, floor_area_m2, number_of_bedrooms, energy_label, and agent. The total_available field tells you how many listings match the query, and pages_fetched confirms how many pages were consumed.
Detailed Listing Data
get_listing_detail takes a global_id obtained from either search endpoint and returns a richer record: structured address object with title, subtitle, city, and postal_code; a brokers array with name and office_id; living_area; bedrooms; listing_type; labels (such as ['Nieuw']); a share_url; and tiny_id. Note that very recently listed properties may not yet appear in detail responses.
Bulk Area Extraction
get_all_listings automates pagination for a given area and offering_type. Set limit to a specific number to cap results, or pass 0 to retrieve all available listings. The ceiling is 10,000 records per area, reflecting Elasticsearch's default result window. Response fields mirror search_listings, with the addition of a top-level area and offering_type echo for confirmation. Large limit values will increase response time accordingly.
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 segmented by city using
priceandareafields fromsearch_listings - Populate a rental comparison tool for Amsterdam and Utrecht using
offering_type=rentandfloor_area_m2 - Generate market inventory reports by counting
total_availablelistings per city across buy and rent segments - Enrich a CRM with broker contact data by extracting
agentfrom search results andbrokersfrom listing details - Filter energy-efficient properties by screening
energy_labelvalues across bulk results fromget_all_listings - Monitor new listings in a neighbourhood by checking the
labelsarray for'Nieuw'inget_listing_detailresponses - Geocode Dutch properties by combining
postal_codeandcityfrom theaddressobject with a mapping service
| Tier | Price | Credits/month | Rate limit |
|---|---|---|---|
| Free | $0/mo | 100 | 5 req/min |
| Hobby | $30/mo | 1,000 | 20 req/min |
| Developer | $100/mo | 5,000 | 100 req/min |
One credit = one API call regardless of which marketplace API you call. 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 `get_listing_detail` return that `search_listings` does not?+
get_listing_detail returns a structured address object with postal_code and city as separate fields, a brokers array with office_id, a share_url, tiny_id, and labels such as ['Nieuw']. The search endpoints return a flatter address string and a single agent field without the office identifier.What is the 10,000-listing ceiling in `get_all_listings`?+
get_all_listings stops paginating once that window is reached, regardless of how many total listings total_available reports. For cities with very large inventories, consider splitting queries by sub-area or neighbourhood to stay within the window.Does the API return historical listing data or sold property prices?+
Can I filter listings by price range, number of bedrooms, or property type within the API?+
area and offering_type. Client-side filtering on price, number_of_bedrooms, floor_area_m2, or object_type is possible after fetching results. You can fork this API on Parse and revise it to add those filter parameters to the search endpoint.