# Funda.nl API scraper — Netherlands real estate data: for-sale (koop) and for-rent (huur) property listings across every Dutch city, town and province with full filters (price EUR, rooms, surface m², plot, property type, sort), each listing with price, rooms, surface, energy label, construction type, photos, agent and address, a full per-listing detail record (description, all photos, complete Kenmerken spec table, year built), plus an area resolver that maps a Dutch place name to Funda's search area — no API key required

> Search Funda.nl property listings by area (for sale or for rent), with structured filters: price (EUR), rooms, living surface (m²), plot size, property type and sort. Each result carries price, object type, surface, rooms, bedrooms, energy label, construction type, address, agent and the primary photo. Paginate with page.
> ReefAPI engine `funda` · 3 endpoints · clean JSON, no scraping or browsers to manage.

## How to call
- **Endpoint:** `POST https://api.reefapi.com/funda/v1/<action>` with a JSON body.
- **Auth:** header `x-api-key: <YOUR_REEFAPI_KEY>` — create one free (1,000 credits, no card): https://reefapi.com/signup
- **Response (every call):** `{ ok: boolean, data: ..., meta: { record_count, credits, ... }, error: { code, message } }` — branch on `ok`. Failed or blocked calls are free.
- **One key + one shared credit pool** across every ReefAPI API. Per-call credits are listed on each endpoint below.
- **Use it from an AI agent (MCP):** connect `https://api.reefapi.com/mcp` (remote streamable-http, `Authorization: Bearer <key>`) and your assistant can call these actions directly.

## Endpoints

### POST /funda/v1/search — 1 credit
Search Funda.nl property listings by area (for sale or for rent), with structured filters: price (EUR), rooms, living surface (m²), plot size, property type and sort. Each result carries price, object type, surface, rooms, bedrooms, energy label, construction type, address, agent and the primary photo. Paginate with page.

**Parameters:**
- `area` (string, required) — Where to search — a Dutch city, town or province ('amsterdam', 'rotterdam', 'utrecht', 'den-haag', 'noord-holland'). Free text is accepted and resolved to Funda's area-slug automatically (a province is resolved to its provincie- slug).
- `contract` (enum, optional, default "sale") — Listing type: for sale (koop) or for rent (huur). Rent prices are monthly. [one of: sale, rent]
- `home_type` (string, optional) — Property type — one or several comma-separated: house, apartment. e.g. 'house,apartment'.
- `sort` (enum, optional, default "relevance") — Result ordering. [one of: relevance, newest, price_low, price_high, surface_high]
- `page` (integer, optional, default 1) — Result page (15 listings per page; paginate with page += 1).
- `price_min` (integer, optional) — Minimum price in EUR (asking price for sale, monthly rent when contract=rent).
- `price_max` (integer, optional) — Maximum price in EUR.
- `rooms_min` (integer, optional) — Minimum number of rooms.
- `rooms_max` (integer, optional) — Maximum number of rooms.
- `surface_min` (integer, optional) — Minimum living surface in square metres (m²).
- `surface_max` (integer, optional) — Maximum living surface in square metres (m²).
- `plot_min` (integer, optional) — Minimum plot (land) size in square metres (m²).
- `plot_max` (integer, optional) — Maximum plot (land) size in square metres (m²).

**Returns:** results[]{id, url, contract, object_type, price{amount_eur, kind}, surface_m2, rooms, bedrooms, energy_label, construction_type, publish_date, address{city, postal_code, street, province}, agent{office_name, url}, primary_photo_url} + total + count + page + area + filters_applied

**Example request body:**
```json
{
  "area": "amsterdam"
}
```

### POST /funda/v1/detail — 1 credit
Full record for a single listing by its Funda detail URL or path (funda.nl/detail/koop/<city>/<slug>/<id>/). Returns price, address, description, every photo at full resolution, and the complete Kenmerken (specifications) table — surface, rooms, year built, energy label, heating, location and more.

**Parameters:**
- `url` (string, required) — A Funda listing detail URL or path — the funda.nl/detail/koop/<city>/<slug>/<id>/ link from a search result's `url`. A full https URL or just the /detail/... path both work.

**Returns:** listing{id, url, name, object_type, description, price{amount_eur}, address{street, city, province, postal_code}, photos[], features[]{group, label, value}, year_built}

### POST /funda/v1/area — 0 credits
Area resolver — map a free-text Dutch place name to Funda's search area-slug and report the live listing count there. Use it to power a search box or to confirm the exact area the search will use (a city resolves to its slug, a province to its provincie- slug).

**Parameters:**
- `query` (string, required) — Free-text Dutch place to resolve — a city, town or province ('Amsterdam', 'Den Haag', 'Noord-Holland').

**Returns:** resolved{query, area_slug, label, total_for_sale} + matched (bool)

**Example request body:**
```json
{
  "query": "Den Haag"
}
```

## More
- Try it live, no code: https://reefapi.com/playground?engine=funda
- Human docs page: https://reefapi.com/docs/funda
- Every ReefAPI API in one file (for your AI): https://reefapi.com/llms-full.txt
