Funda.nl API

Get Funda.nl data with one API

The Funda API returns Dutch real-estate listings as clean JSON.

F
/funda/v1

3 active endpoints, on 0 and 1 credit tiers.

  • POST/funda/v1/search
  • POST/funda/v1/detail
  • POST/funda/v1/area

What Funda.nl endpoints does ReefAPI ship?

3 live read endpoints. Read-only data API: no writes, no account actions, no dashboard access on the target site.

3 endpoints

search

1 cr

Search Funda.nl property listings by area (for sale or for rent), with structured filters.

required
area
optional
contract, home_type, sort, page, price_min, price_max, rooms_min, rooms_max, surface_min, surface_max, plot_min, plot_max

detail

1 cr

Full record for a single listing by its Funda detail URL or path (funda.nl/detail/koop/<city>…

required
url
optional

area

0 cr

Area resolver.

required
query
optional

Every parameter, every allowed value →

Funda.nl API

3 of 3 endpoints, ready to run

View docs ↗

Search Funda.nl property listings by area (for sale or for rent), with structured filters.

1 credit1 required · 0 optional
POST/funda/v1/search
idle
// Press "Try it" and this pane shows exactly what the
// live site returned this second — including an empty
// result, if that is the truth. No key, no account.

How the Funda.nl API works

Funda.nl is a normal ReefAPI surface — the same four rules that hold for every other engine on the key.

01
Authenticate
x-api-key header

No OAuth app, no request signing, no per-site account. One key covers all 185 engines.

02
Call
POST /funda/v1/…

Every route is a POST with a JSON body. Parameters are validated against the published schema before anything is charged.

03
Pay
0 or 1 credits per call

Credits, not seats. Failed and blocked calls are never charged, and cache hits cost nothing.

04
Read
{ ok, data, meta, error }

One envelope everywhere. meta carries latency_ms, record_count and the endpoint that answered.

The Dutch property vocabulary Funda returns, translated

Search results are normalized into English enum values, but the detail action returns the raw Dutch Kenmerken table, so the two vocabularies have to be read together. Every value below was observed on live listings across Amsterdam, Rotterdam, Utrecht and Noord-Holland on 2026-08-26 - 60 sale listings and 15 rentals.

Field and valueDutch on the siteWhat it means
price.condition = kosten_koperk.k.the asking price excludes transfer tax and notary costs, which the buyer pays - 58 of 60 measured sale listings
price.condition = vrij_op_naamv.o.n.those costs are already inside the asking price - the other 2, both new-build
price.period = per_monthper maandrentals carry period and no condition; sale listings carry condition and no period
surface_m2Wonenliving area in m2 - 206 on a measured house
plot_m2Perceelplot or land in m2 - 134 on the same house, and null on every apartment
detail features onlyInhoudinternal volume in m3 - 655 on the same house; there is no search field for it
status = noneBeschikbaarstill available - 58 of 60
status = sold_under_reservationVerkocht onder voorbehoudunder offer, sale not yet final - the other 2
construction_type = resale / newly_builtBestaande bouw / Nieuwbouwexisting home versus new construction
contract = ["buy"] / ["rent"]koop / huuran array, not a string, and the URL path segment matches (/detail/koop/ or /detail/huur/)
agent.associationNVM / VN / MZVthe agent's professional body - measured 48 / 6 / 6

energy_label runs A+++, A++, A+, A, B, C, D, E and F, and also returns the literal string "unknown" rather than null when Funda has no label. Check for the word, not for a nullish value.

What people build with Funda.nl

The jobs this data is most often used for.

3

endpoints

0/1

credits per call

01

Investors call search to track Dutch listing prices by area.

02

Property dashboards use detail to enrich a listing.

03

Market analysts use area to size inventory in a Dutch region.

What Funda.nl data costs

The cheapest call here is 0 credits, so $15/mo (Pro) buys 10,000 of them — $1.50 per 1,000 credits. Credits roll over and never expire, and failed or blocked calls are not charged.

Full pricing →
$0.67–$1.50 / 1,000 credits
  • 1,000 free credits on signup, no card
  • One key, all 185 APIs, one credit pool
  • Failed and blocked calls are never charged
  • Credits roll over and never expire

Call it in two lines

Sign up, get 1,000 credits and one key that works on every engine. Then this is the whole protocol.

curl
curl -X POST https://api.reefapi.com/funda/v1/search \
  -H "x-api-key: $REEF_KEY" \
  -H "content-type: application/json" \
  -d '{"area":"amsterdam"}'
python
import requests

r = requests.post(
    "https://api.reefapi.com/funda/v1/search",
    headers={"x-api-key": REEF_KEY},
    json={
  "area": "amsterdam"
},
)
print(r.json()["data"])
FAQ

Have a question? We got answers.

The questions people actually ask before wiring up Funda.nl.

Get a free key →
Do the Dutch price suffixes k.k. and v.o.n. show up in the API?

Yes, as price.condition, and it is the most consequential field on a Dutch sale listing. kosten_koper (k.k.) means the buyer pays transfer tax and notary fees on top of the asking price, and vrij_op_naam (v.o.n.) means those costs are already included, which is typical of new-build. Measured across 60 sale listings: 58 kosten_koper and 2 vrij_op_naam. The detail action prints the same thing in Dutch inside the Kenmerken table, as Vraagprijs = "€ 1.625.000 kosten koper". Comparing a k.k. price against a v.o.n. price without adjusting understates the new-build.

Which id is the listing id? I see three different numbers.

All three are real and they point at the same property. A measured Amsterdam house returned id 8123078 on the search row while its own url ended in /44578431/, and calling detail on that URL returned id "17205704" with a rewritten url ending /17205704/. The detail id is the one Funda canonicalizes to, and both URL forms resolve - a second detail call on the /17205704/ URL returned the same record. Practical rule: pass the search row's url straight into detail rather than constructing a URL from an id, and key your own store on the detail id.

How do I tell living area from plot size?

surface_m2 is the living area (Wonen on the site) and plot_m2 is the land (Perceel). A measured house came back with surface_m2 206 and plot_m2 134, while every apartment measured returned plot_m2 null - which is correct rather than missing, since an apartment has no plot. The detail action adds two more that search does not carry: "Overige inpandige ruimte" (other internal space, 32 m2 on that house) and "Inhoud", the volume in cubic metres that Dutch listings quote alongside floor area.

How do I search rentals instead of sales, and what changes?

Pass contract "rent" - Funda calls it huur. Three things change. The price object swaps condition for period "per_month", so an amount_eur of 2400 is monthly rent, not a purchase price. The URL path becomes /detail/huur/. And the object_type mix widens: a measured Rotterdam rental page returned 11 apartments, 2 houses and 2 parking spaces, so filter on object_type if you do not want garages in a rent index. Rental supply is far thinner - 334 rentals against 5,857 sale listings in the measured cities.

Why is Energielabel useless on the detail record?

Because Funda renders the label as a graphic with an explainer link beside it, so that Kenmerken row scrapes as Energielabel = "Wat betekent dit?" ("what does this mean?") rather than a grade. The usable value is on the search row, as energy_label, where measured values ran A+++, A++, A+, A, B, C, D, E, F and the literal string "unknown". Keep the search row when you need the label; do not expect detail to confirm it.

How do I resolve a place name before searching?

The area action takes free text and returns the slug the search will actually use, plus the live listing count there. Measured: "Den Haag" resolved to area_slug den-haag with total_for_sale 3,008, and "Noord-Holland" resolved to provincie-noord-holland with 17,772 - provinces get a provincie- prefix, cities do not. An unrecognized place does not error: it returns ok:true with matched false, area_slug null and total_for_sale 0, so check matched before you search on it.

How many listings can I page through?

15 per page. A measured Amsterdam sale search reported meta.total 5,857 and meta.max_pages 391, with meta.stop_reason "limit_reached" on a full page. Page with page += 1 until you pass max_pages. If you are building an inventory rather than sampling, split by price band or object_type instead of walking 391 pages - filters_applied is echoed on every response so you can confirm what actually took effect.

Why do search and detail disagree about the same listing?

They read different documents, and each is authoritative for different fields. On one measured property, search reported photo_count 73 and postal_code "1032LS", while detail on the same listing reported photo_count 6 and postal_code null, and returned object_type in Dutch ("Huis") where search returned English ("house"). What detail contributes is the features[] array - 32 rows across Overdracht, Bouw, Oppervlakten en inhoud, Indeling, Energie, Kadastrale gegevens, Buitenruimte, Garage and Parkeergelegenheid - carrying facts search has no field for at all, including ground-lease status (Eigendomssituatie: erfpacht) and its annual charge.

What is the Funda.nl API?

Funda.nl API is a ReefAPI endpoint group for funda.nl It returns live JSON through POST requests under /funda/v1.

Is the Funda.nl API free to try?

Yes. ReefAPI starts with 1,000 free credits, no card required. Funda.nl calls use the same shared credit balance as every other ReefAPI engine.

Do I need a Funda.nl login or account?

No login to Funda.nl is needed for the API response. You call ReefAPI with your x-api-key header, and the playground can run live examples before you create a production key.

How fresh is the Funda.nl data?

The page example is captured from a live search call, and production requests fetch live data through ReefAPI rather than a static sample.

How many credits does the Funda.nl API use?

Funda.nl actions currently cost 1 credit per successful call. Failed or blocked calls are free, and all APIs draw from one credit pool.

Can I call Funda.nl from an AI assistant or MCP client?

Yes. Connect ReefAPI once through MCP and your assistant can call funda actions with the same key, credit pool and JSON envelope used by normal REST requests.

11 Real Estate APIs on the same key

One key, one credit pool, one response envelope. If you are pulling Funda.nl, you are one call away from the rest of the category — no second contract, no second integration.

Try it on your own data before you pay anything

The call above is the real endpoint, not a recording. A free key gives you 1,000 credits, the other 184 APIs, and the same envelope everywhere.

Endpoints, parameters and credit costs on this page are read from the live catalog and cannot drift from what the API accepts.