API

Funda API: woningaanbod en verkochte woningen als JSON

Funda biedt geen open API voor ontwikkelaars. Deze API haalt op wat een woningzoeker op funda.nl ziet: vraagprijs, woonoppervlak, kamers, energielabel, adres tot op buurtniveau en de makelaar. Het is geen makelaarskoppeling om woningen op funda te zetten; het is de kant van de koper of huurder, live opgehaald. Met één filter verschuift de vraag van 'wat staat er te koop' naar 'wat is er in deze wijk al verkocht'.

Endpoints

endpointWat je terugkrijgtVerplicht
searchWoningen per plaats of provincie, koop of huur, met filters op prijs, kamers, woonoppervlak, perceel, woningtype en status (beschikbaar, verkocht, onder bod of alles). Per woning: prijs met prijsconditie, m², kamers, energielabel, adres met wijk en buurt, makelaar en alle foto's. 15 per pagina.area
detailDe volledige advertentie via de funda-link: omschrijving, de hele Kenmerken-tabel, bouwjaar, inhoud, badkamers, eigendomssituatie, de complete fotogalerij en, als de makelaar ze heeft geplaatst, plattegronden.url
areaZet een ingetypte plaatsnaam ('Den Haag', 'Noord-Holland') om naar het zoekgebied dat funda gebruikt, samen met het aantal woningen dat daar te koop staat.query

Elke aanroep kost credits. Mislukte en geblokkeerde aanroepen zijn gratis.

Werkend voorbeeld

Bij een verkochte woning is price de laatste vraagprijs, niet het bedrag waarvoor het huis van eigenaar wisselde. Op de advertentie zelf heet die regel letterlijk 'Laatste vraagprijs'. Wie van deze lijst een overzicht van verkoopprijzen maakt, rekent met het verkeerde getal.

Verzoek
curl -X POST https://api.reefapi.com/funda/v1/search \
  -H "x-api-key: JOUW_SLEUTEL" \
  -H "content-type: application/json" \
  -d '{"area": "utrecht", "availability": "sold", "home_type": "apartment"}'
Antwoord (ingekort)
{
  "ok": true,
  "data": {
    "total": 3328,
    "max_pages": 222,
    "results": [
      {
        "id": 8167630,
        "url": "https://www.funda.nl/detail/koop/utrecht/appartement-van-eysingalaan-78/44512093/",
        "object_type": "apartment",
        "price": { "amount_eur": 350000, "currency": "EUR", "kind": "sale", "condition": "kosten_koper" },
        "surface_m2": 75,
        "rooms": 3,
        "bedrooms": 2,
        "energy_label": "D",
        "status": "sold",
        "address": { "postal_code": "3527VM", "city": "Utrecht", "neighbourhood": "Transwijk-Noord", "district": "Wijk 08 Zuidwest" }
      },
      ...
    ]
  },
  "meta": { "record_count": 15, "cache_hit": false, "mode": "live" }
}

Een eigen funda-scraper: waar het misgaat

Sinds oktober 2026 staat er botbeveiliging voor de zoek- en detailpagina's van funda. Afhankelijk van hoe je aanklopt krijg je een 'Access Denied' of een blokkadepagina met status 200 en nul woningen. Dat laatste is het verraderlijke geval: een scraper die op de statuscode let, meldt keurig 'geen resultaten'. Onze eigen engine trapte er ook in; hij herkent die pagina nu en geeft een fout terug, en zo'n aanroep kost geen credits.

De advertentiepagina zelf heeft ook haar eigenaardigheden. De gestructureerde data in de pagina bevat precies zes foto's, terwijl de galerij in onze steekproef 24 tot 57 foto's telde. En in de Kenmerken-tabel staat bij Energielabel vaak niet het label maar de tekst 'Wat betekent dit?'. Een parser die de tabel letterlijk overneemt, vult je database daarmee.

Voor een eenmalige export van één wijk is een eigen script prima. Voor een dataset die elke week wordt bijgewerkt, zit het werk in het opmerken van dit soort stille fouten.

Grenzen en eerlijke kanttekeningen

  • Dit is niet de officiële funda-API en we hebben geen samenwerking met funda.
  • Bij verkochte woningen krijg je de laatste vraagprijs, geen transactieprijs. Eerdere vraagprijzen (prijshistorie) levert de API niet; wie een prijsverloop wil, slaat bij elke aanroep zelf de prijs per id op.
  • Energielabel en makelaar komen uit het zoekresultaat. In detail is agent altijd null en ontbreekt het energielabel, omdat funda ze op de advertentiepagina niet als waarde publiceert.
  • 15 woningen per pagina. Verkochte appartementen in Utrecht waren bij onze meting 3.328 resultaten over 222 pagina's, dus een hele stad doorlopen kost evenveel aanroepen.
  • Na verkoop verhuist een advertentie naar een /verkocht/-adres met een ander nummer in de link. Koppel search en detail daarom op id, niet op de url.
  • Er zit geen cache tussen: elke aanroep leest funda opnieuw.