# Funda.nl Scraper — Dutch Property Data, Price/m² & Agents (`sian.agency/funda-property-scraper`) Actor

Scrape Funda.nl Dutch real estate — for-sale, for-rent and sold listings — by location, area identifier or URL. Pull price per m², energy label, floor and plot area, full address, rich listing detail and estate-agent (makelaar) profiles, plus built-in market KPIs and an HTML report.

- **URL**: https://apify.com/sian.agency/funda-property-scraper.md
- **Developed by:** [SIÁN OÜ](https://apify.com/sian.agency) (community)
- **Categories:** Real estate, Lead generation
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 1 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.50 / 1,000 property extracteds

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

Learn more: https://docs.apify.com/platform/actors/running/actors-in-store#pay-per-event

## What's an Apify Actor?

Actors are a software tools running on the Apify platform, for all kinds of web data extraction and automation use cases.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.
Actors are written with capital "A".

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.
The best way to integrate Actors is as follows.

In JavaScript/TypeScript projects, use official [JavaScript/TypeScript client](https://docs.apify.com/api/client/js.md):

```bash
npm install apify-client
```

In Python projects, use official [Python client library](https://docs.apify.com/api/client/python.md):

```bash
pip install apify-client
```

In shell scripts, use [Apify CLI](https://docs.apify.com/cli/docs.md):

````bash
# MacOS / Linux
curl -fsSL https://apify.com/install-cli.sh | bash
# Windows
irm https://apify.com/install-cli.ps1 | iex
```bash

In AI frameworks, you might use the [Apify MCP server](https://docs.apify.com/platform/integrations/mcp.md).

If your project is in a different language, use the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).


# README

## Funda.nl Scraper — Dutch Property Data, Price/m² & Agents 🏡

[![SIÁN Agency Store](https://img.shields.io/badge/Store-SI%C3%81N%20Agency-1AE392)](https://apify.com/sian.agency?fpr=sian) [![Zillow Property Scraper](https://img.shields.io/badge/Store-Zillow%20Property%20Scraper-1F4E79)](https://apify.com/sian.agency/zillow-property-scraper?fpr=sian) [![Trulia Property Scraper](https://img.shields.io/badge/Store-Trulia%20Property%20Scraper-00A651)](https://apify.com/sian.agency/trulia-property-scraper?fpr=sian) [![Airbnb Property Scraper](https://img.shields.io/badge/Store-Airbnb%20Property%20Scraper-FF5A5F)](https://apify.com/sian.agency/airbnb-property-scraper?fpr=sian)

#### 🇳🇱 Extract Funda Sale, Rent & Sold Listings With Price/m² and Agent Leads
##### Real estate investors, buyer's agents, relocation services, and market analysts — get complete Dutch property data plus makelaar contact profiles across the whole of the Netherlands

---

### 📋 Overview

**Pull Funda Dutch real estate — for-sale, for-rent AND sold listings — into clean, structured data.** Search any Dutch city, town, neighbourhood or postcode, paste a Funda search URL, or drill into a single listing, and get back complete records with **auto-computed price per m²**, energy label, living and plot area, full address down to the wijk, geo coordinates, the estate agent (makelaar), and a 45-photo media gallery. Every run also builds a market-KPI HTML report.

**Why investors and agents choose us over the alternatives:**
- 📐 **Price per m² computed on every listing**: Skip the spreadsheet step — comp sheets and valuations are ready straight from the dataset, using Funda's own living-area figure.
- 🏷️ **Sale + Rent + Sold in one actor**: A single `searchType` toggle gets you asking prices, monthly rents, or realised sold prices — purpose-built for market analysis and price-to-rent studies.
- ⚡ **Native energy-label filtering**: Pull only A/A+/B homes (or any band) — filtered at the source, so you only collect what you asked for.
- 🏢 **Makelaar lead-gen goldmine**: Estate-agent profiles carry email, phone, website, social handles, team members and review scores — a ready CRM feed no other Funda tool exposes.
- 📊 **Built-in market KPIs**: Median price, price/m² distribution, and inventory breakdowns are computed for you on every run and surfaced in an HTML report — no post-processing.
- 🆓 **FREE tier with full feature parity**: 25 rows per run, no credit card, same fields and same HTML report — just a smaller cap.

---

### ✨ Features

- 🧭 **Seven operations, one actor** — search by location, by area identifier, or by URL; pull full detail by listing ID or URL; fetch a makelaar profile; or resolve a location with autocomplete.
- 🏠 **Every side of the market** — for-sale, for-rent and sold listings via a single `searchType` toggle.
- 📐 **Auto-calculated price per m²** — for every listing with a usable living area.
- ⚡ **Energy-label + area + price + bedroom filters** — applied at the source so you only collect (and only pay for) matching homes.
- 🏘️ **Rich listing detail** — coordinates, full characteristic sections (transfer, construction, layout, energy, cadastral, outdoor space, parking, VvE), badges, and the full Dutch + English description.
- 🏢 **Estate-agent (makelaar) profiles** — contact details, social media, team roster with roles, and aggregate review scores.
- 📊 **Market KPI HTML report** — median price, price/m² distribution and inventory breakdown on every run.
- 📦 **Bulk area sweeps** — pass multiple Funda geo identifiers in a single run.
- 📱 **Standard Apify exports** — JSON, CSV, XLSX, RSS, HTML.

---

### 🎬 Quick Start

Pick an operation, give it a location, and run — no coding required.

```bash
curl -X POST 'https://api.apify.com/v2/acts/sian.agency~funda-property-scraper/runs?token=[YOUR_TOKEN]' \
  -H 'Content-Type: application/json' \
  -d '{"operation":"searchByLocation","location":"Amsterdam","searchType":"For_Sale","maxResults":50}'
````

***

### 🚀 Getting Started (3 Simple Steps)

#### Step 1: Pick an operation

Set `operation` to `searchByLocation` (city / town / neighbourhood / postcode), `searchByArea` (Funda geo identifiers), `searchByUrl` (paste a funda.nl/zoeken URL), `detailsById` / `detailsByUrl` (one rich listing), `agentDetails` (a makelaar profile), or `autocomplete` (resolve a location to geo identifiers).

#### Step 2: Set your target and filters

Give the operation a location, area, URL or ID, then optionally narrow with `searchType` (For Sale / For Rent / Sold), price band, bedrooms, living area, energy label and property type.

#### Step 3: Run & Export

Hit Run. Rows stream into the dataset; a market-KPI HTML report lands in the key-value store. Export as JSON, CSV, or Excel.

**That's it! In under 2 minutes you'll have:**

- Complete listings with address, specs, pricing, photos and geo
- Auto-calculated price per m² per listing
- Market-level KPIs (median price, price/m² distribution, breakdowns)
- A polished HTML market summary

***

### 📥 Input Configuration

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `operation` | string | Yes | `searchByLocation`, `searchByArea`, `searchByUrl`, `detailsById`, `detailsByUrl`, `agentDetails`, or `autocomplete` (default: `searchByLocation`). |
| `location` | string | For `searchByLocation` | Dutch city, town, neighbourhood or postcode, e.g. `Amsterdam`, `Utrecht`, `1018XS`. |
| `area` | string | For `searchByArea` | One or more Funda geo identifiers, comma-separated (from autocomplete). |
| `url` | string | For `searchByUrl` / `detailsByUrl` / `agentDetails` | A funda.nl search, listing, or makelaar URL. |
| `listingId` | string | For `detailsById` | Funda globalId shown as a search result's `propertyId`. |
| `agentId` | string | For `agentDetails` | Funda office id shown on a listing's agent. |
| `query` | string | For `autocomplete` | Partial location text to resolve into geo identifiers. |
| `searchType` | string | No | `For_Sale`, `For_Rent`, or `Sold` (default: `For_Sale`). |
| `propertyType` | string | No | Comma-separated kinds: house, apartment, parking, land, berth. |
| `sortOrder` | string | No | Relevance, price low→high / high→low, newest, oldest. |
| `minPrice` / `maxPrice` | integer | No | Price band in EUR (asking price for sale, monthly rent for rent). |
| `minBedrooms` / `maxBedrooms` | integer | No | Bedroom range. |
| `minFloorArea` / `maxFloorArea` | integer | No | Living-area range in m². |
| `energyLabel` | string | No | Comma-separated labels: A, A+, B, C, D, E, F, G. |
| `keywords` | string | No | Extra free-text keywords, e.g. `monumentaal`, `tuin`. |
| `maxResults` | integer | No | Rows to collect, 1–750 (default: 45). FREE tier capped at 25. |

**Example — Search Amsterdam homes for sale under €600k, energy label A/B:**

```json
{
  "operation": "searchByLocation",
  "location": "Amsterdam",
  "searchType": "For_Sale",
  "maxPrice": 600000,
  "energyLabel": "A,A+,B",
  "maxResults": 100
}
```

**Example — Full detail for one listing:**

```json
{
  "operation": "detailsById",
  "listingId": "8066978"
}
```

**Example — Estate-agent (makelaar) profile:**

```json
{
  "operation": "agentDetails",
  "agentId": "24862"
}
```

***

### 📤 Output

Results land in the Apify dataset. A `rowType` field marks each row as `property`, `property-detail`, `agent`, or `location-suggestion`. Common fields:

| Field | Type | Description |
|-------|------|-------------|
| `rowType` | string | property · property-detail · agent · location-suggestion |
| `propertyId` | integer | Funda listing globalId |
| `url` | string | Full funda.nl URL for the property |
| `offeringType` | string | buy / rent |
| `objectType` | string | apartment / house / parking / land / berth |
| `listingStatus` | string | available or sold |
| `pricing` | object | Price (EUR), price type, condition (kosten koper / per month) and computed price per m² |
| `specs` | object | Bedrooms, rooms, floor area, plot area, energy label, construction type, zoning |
| `address` | object | Street, house number, postcode, neighbourhood, wijk, city, municipality, province |
| `media` | object | Media types, photo gallery, videos and photo count |
| `coordinates` | object | Latitude and longitude (detail rows) |
| `characteristics` | array | Categorized property facts (detail rows) |
| `propertyDescription` | string | Full listing description, Dutch + English (detail rows) |
| `contact` / `socialMedia` / `employees` / `reviews` | object/array | Estate-agent (makelaar) fields (agent rows) |
| `geoId` / `geoName` / `geoType` | string | Resolved geo identifiers (autocomplete rows) |
| `scrapedAt` | string | ISO-8601 timestamp |

**Search row example:**

```json
{
  "rowType": "property",
  "propertyId": 8066978,
  "url": "https://www.funda.nl/detail/koop/amsterdam/appartement-.../8066978/",
  "offeringType": "buy",
  "objectType": "apartment",
  "listingStatus": "none",
  "pricing": { "value": 575000, "priceType": "kosten koper", "pricePerSqm": 8214 },
  "specs": { "bedrooms": 2, "floorArea": 70, "energyLabel": "B" },
  "address": { "postcode": "1018XS", "neighbourhood": "Weesperbuurt", "city": "Amsterdam" }
}
```

**Estate-agent row example:**

```json
{
  "rowType": "agent",
  "agentId": 24862,
  "name": "Metropool Makelaars",
  "contact": { "email": "info@metropool.nl", "phone": "+31 20 000 0000", "website": "https://metropool.nl" },
  "reviews": { "average": 9.2, "count": 148 },
  "hasListings": true
}
```

***

### 💼 Use Cases & Examples

#### 1. Investment Underwriting (Sale)

**Investors comparing homes by price per m² across Dutch cities**

**Input:** `searchByLocation`, `searchType: "For_Sale"`, a city and price band
**Output:** Listings with computed price/m² plus median in the HTML report
**Use:** Spot the cheapest €/m² pockets and build comp sheets in minutes.

#### 2. Rental Market Analysis

**Analysts tracking rent levels in Amsterdam vs. Utrecht**

**Input:** `searchType: "For_Rent"`, two locations, a weekly schedule
**Output:** Monthly rents, living area and rent/m² distribution
**Use:** Generate weekly Dutch rental-market briefs for clients.

#### 3. Sold-Price Comparables

**Appraisers pulling realised sale prices for valuations**

**Input:** `searchType: "Sold"`, a neighbourhood
**Output:** Recently sold listings with their realised price
**Use:** Ground valuations in actual transactions, not just asking prices.

#### 4. Makelaar Lead Generation

**Agencies and PropTech building a Dutch estate-agent CRM**

**Input:** `agentDetails` by office id or makelaar URL
**Output:** Agent email, phone, website, socials, team roster and review scores
**Use:** Feed a sales pipeline or partnership outreach list straight from the dataset.

#### 5. Energy-Efficient Housing Research

**Relocation and sustainability teams filtering by energy label**

**Input:** `energyLabel: "A,A+"`, a city, `searchType: "For_Sale"`
**Output:** Only the most energy-efficient homes on the market
**Use:** Shortlist properties that meet green-mortgage or ESG criteria.

#### 6. AVM / ML Training Data

**Data scientists building Dutch valuation models**

**Input:** Bulk `searchByArea` sweeps across multiple identifiers
**Output:** Comprehensive listing dataset with specs, geo and price/m²
**Use:** Train and validate AVM and rent-prediction models on Netherlands data.

***

### 🔗 Integration Examples

#### JavaScript / Node.js

```javascript
import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: 'YOUR_TOKEN' });

const run = await client.actor('sian.agency/funda-property-scraper').call({
  operation: 'searchByLocation',
  location: 'Amsterdam',
  searchType: 'For_Sale',
  maxResults: 100
});

const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items[0]);
```

#### Python

```python
from apify_client import ApifyClient
client = ApifyClient('YOUR_TOKEN')

run = client.actor('sian.agency/funda-property-scraper').call(
    run_input={
        'operation': 'searchByLocation',
        'location': 'Utrecht',
        'searchType': 'For_Rent',
        'maxResults': 100
    }
)

for item in client.dataset(run['defaultDatasetId']).iterate_items():
    print(item)
```

#### cURL

```bash
curl -X POST 'https://api.apify.com/v2/acts/sian.agency~funda-property-scraper/runs?token=YOUR_TOKEN' \
  -H 'Content-Type: application/json' \
  -d '{"operation":"searchByArea","area":"amsterdam,utrecht","searchType":"For_Sale","maxResults":150}'
```

#### Automation Workflows (N8N / Zapier / Make)

1. **Trigger**: Schedule (daily / weekly market refresh) or webhook
2. **HTTP Request**: Call the actor API with your target location
3. **Process**: Filter by price band, compute KPIs, dedupe against last run
4. **Action**: Push to a database, send a Slack/email digest, update a dashboard

***

### 📊 Performance & Pricing

#### FREE Tier (Try It Now)

- **25 rows** per run — full feature parity, same data quality
- No credit card required
- Perfect for testing and one-off analyses

#### PAID Tier (Production Ready)

- **Unlimited** rows per run
- Bulk area sweeps and full detail + agent enrichment
- Pay-per-event: only charged for the rows you actually get

💰 **Transparent per-event pricing** — pay per property listing extracted, with detail and estate-agent profiles priced separately. Every listing arrives with a computed price per m², and every run produces a full HTML market report with median and distribution — no post-processing, no separate analytics tier.

🔗 [View current pricing](https://apify.com/sian.agency/funda-property-scraper?fpr=sian)

***

### ❓ Frequently Asked Questions

**Q: Does this cover rentals and sold listings?**
A: Yes — set `searchType: "For_Rent"` for rentals or `searchType: "Sold"` for realised sale prices. Default is `For_Sale`.

**Q: How many listings can I extract?**
A: FREE tier: 25 rows per run. PAID tier: unlimited. Search operations auto-paginate the full Funda result set for your query.

**Q: What is price per m² based on?**
A: It's computed from Funda's own living-area figure — asking (or realised) price divided by living area in square metres. Listings without a usable area omit the field.

**Q: Can I get estate-agent contact details?**
A: Yes — the `agentDetails` operation returns a makelaar office profile with email, phone, website, social handles, team members and review scores.

**Q: What output formats are available?**
A: JSON, CSV, Excel — exported directly from the Apify dataset.

**Q: Is this legal?**
A: We only extract publicly available listings and agent profiles from Funda. See the legal section below.

***

### 🐛 Troubleshooting

**"No results" on a location search**

- Confirm the spelling of the Dutch city / neighbourhood, or use the `autocomplete` operation to resolve it into a geo identifier, then run `searchByArea`.

**Empty `searchByArea` run**

- `searchByArea` needs Funda geo identifiers (e.g. `amsterdam`, `gemeente-amsterdam`), not free-text city names. Discover them with `autocomplete`.

**`pricePerSqm` missing on some rows**

- Some records (often rentals or land) omit a usable living area. The field is omitted rather than emitted as null — check key presence before reading it.

**FREE tier stops at 25 rows**

- That's the FREE cap. Upgrade for unlimited rows and bulk sweeps.

***

### ⚠️ Trademark Disclaimer

This Actor is an independent tool and is **not affiliated with, endorsed by, or sponsored by Funda Real Estate B.V. or any of its subsidiaries**. The name "Funda" is used solely in a descriptive sense to identify the public data source the Actor reads from. All trademarks, service marks, and trade names referenced in this Actor or its documentation are the property of their respective owners.

***

### ⚖️ Is it legal to scrape data?

Our actors are ethical and do not extract any private user data, such as email addresses, gender, or location. They only extract what the user has chosen to share publicly. We therefore believe that our actors, when used for ethical purposes by Apify users, are safe.

However, you should be aware that your results could contain personal data. Personal data is protected by the **GDPR** in the European Union and by other regulations around the world. You should not scrape personal data unless you have a legitimate reason to do so. If you're unsure whether your reason is legitimate, consult your lawyers.

You can also read Apify's blog post on the [legality of web scraping](https://blog.apify.com/is-web-scraping-legal/).

***

### 🤝 Support

[![Telegram Support](https://img.shields.io/badge/Telegram-Support%20Group-0088cc?logo=telegram)](https://t.me/+vyh1sRE08sAxMGRi)

**Join our active support community**

- For issues or questions, open an issue in the actor's repository
- Check [SIÁN Agency Store](https://apify.com/sian.agency?fpr=sian) for more automation tools
- 📧 <apify@sian-agency.online>

***

**Built by [SIÁN Agency](https://www.sian-agency.online)** | **[More Tools](https://apify.com/sian.agency?fpr=sian)**

# Actor input Schema

## `operation` (type: `string`):

What to pull from Funda.

**Search (listing rows):**
• **searchByLocation** — city / town / neighbourhood / postcode (paginated)
• **searchByArea** — one or more Funda geo identifiers (from autocomplete)
• **searchByUrl** — paste a funda.nl/zoeken search URL

**Detail (single rich listing):**
• **detailsById** — full detail by Funda listing id (globalId)
• **detailsByUrl** — full detail by funda.nl listing URL

**Estate agent:**
• **agentDetails** — makelaar office profile by office id or URL

**Helper:**
• **autocomplete** — resolve a location string to Funda geo identifiers

## `location` (type: `string`):

For **searchByLocation** (and as a fallback for **autocomplete**) — a Dutch city, town, neighbourhood or postcode, e.g. `Amsterdam`, `Utrecht`, `1018XS`.

## `area` (type: `string`):

For **searchByArea** — one or more Funda geo identifiers, comma-separated, e.g. `amsterdam`, `gemeente-amsterdam`, `amsterdam/jordaan`. Discover identifiers with the autocomplete operation.

## `url` (type: `string`):

For **searchByUrl / detailsByUrl / agentDetails** — a funda.nl/zoeken search URL (e.g. `https://www.funda.nl/zoeken/koop?selected_area=["amsterdam"]`), a listing URL (e.g. `https://www.funda.nl/detail/koop/amsterdam/appartement-.../44411331/`), or a makelaar URL (e.g. `https://www.funda.nl/makelaar/24862-metropool-makelaars/`).

## `listingId` (type: `string`):

For **detailsById** — the Funda globalId shown as a search result's `propertyId`, e.g. `8066978`.

## `agentId` (type: `string`):

For **agentDetails** — the Funda office id shown on a listing's agent, e.g. `24862`. A makelaar URL can be used instead in the URL field.

## `query` (type: `string`):

For **autocomplete** — partial location text to resolve into Funda geo identifiers, e.g. `Amster`. Falls back to the Location field if empty.

## `searchType` (type: `string`):

For **searchByLocation / searchByArea** — which listings to return. `Sold` listings carry a realised price.

## `propertyType` (type: `string`):

Comma-separated property kinds to filter, e.g. `house,apartment`. One or more of: house, apartment, parking, land, berth. Leave empty for any.

## `sortOrder` (type: `string`):

Result order. Default is Funda's relevance.

## `minPrice` (type: `integer`):

Minimum price in EUR (asking price for sale, monthly rent for rent). Leave empty for no minimum.

## `maxPrice` (type: `integer`):

Maximum price in EUR. Leave empty for no maximum.

## `minBedrooms` (type: `integer`):

Minimum number of bedrooms. Leave empty for any.

## `maxBedrooms` (type: `integer`):

Maximum number of bedrooms. Leave empty for any.

## `minFloorArea` (type: `integer`):

Minimum living area in square metres. Leave empty for any.

## `maxFloorArea` (type: `integer`):

Maximum living area in square metres. Leave empty for any.

## `energyLabel` (type: `string`):

Energy labels, comma-separated: `A`, `A+`, `B`, `C`, `D`, `E`, `F`, `G`. Leave empty for any.

## `keywords` (type: `string`):

Extra free-text keywords matched against listings, e.g. `monumentaal`, `tuin`.

## `maxResults` (type: `integer`):

Maximum rows to collect for search operations (also caps autocomplete suggestions at 25). FREE tier is capped at 25.

## Actor input object example

```json
{
  "operation": "searchByLocation",
  "location": "Amsterdam",
  "searchType": "For_Sale",
  "sortOrder": "Default",
  "maxResults": 45
}
```

# Actor output Schema

## `results` (type: `string`):

Funda listings, enriched detail rows, estate-agent profiles and location-suggestion rows.

## `htmlReport` (type: `string`):

HTML summary with run stats and market KPIs (median price, price/m² distribution, property-type / energy-label / city breakdowns).

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "location": "Amsterdam"
};

// Run the Actor and wait for it to finish
const run = await client.actor("sian.agency/funda-property-scraper").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = { "location": "Amsterdam" }

# Run the Actor and wait for it to finish
run = client.actor("sian.agency/funda-property-scraper").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print("💾 Check your data here: https://console.apify.com/storage/datasets/" + run["defaultDatasetId"])
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "location": "Amsterdam"
}' |
apify call sian.agency/funda-property-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=sian.agency/funda-property-scraper",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Funda.nl Scraper — Dutch Property Data, Price/m² & Agents",
        "description": "Scrape Funda.nl Dutch real estate — for-sale, for-rent and sold listings — by location, area identifier or URL. Pull price per m², energy label, floor and plot area, full address, rich listing detail and estate-agent (makelaar) profiles, plus built-in market KPIs and an HTML report.",
        "version": "1.0",
        "x-build-id": "lOmNkmIm4MElf3SCI"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/sian.agency~funda-property-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-sian.agency-funda-property-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        },
        "/acts/sian.agency~funda-property-scraper/runs": {
            "post": {
                "operationId": "runs-sync-sian.agency-funda-property-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor and returns information about the initiated run in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/runsResponseSchema"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/acts/sian.agency~funda-property-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-sian.agency-funda-property-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        }
    },
    "components": {
        "schemas": {
            "inputSchema": {
                "type": "object",
                "properties": {
                    "operation": {
                        "title": "🧭 Operation",
                        "enum": [
                            "searchByLocation",
                            "searchByArea",
                            "searchByUrl",
                            "detailsById",
                            "detailsByUrl",
                            "agentDetails",
                            "autocomplete"
                        ],
                        "type": "string",
                        "description": "What to pull from Funda.\n\n**Search (listing rows):**\n• **searchByLocation** — city / town / neighbourhood / postcode (paginated)\n• **searchByArea** — one or more Funda geo identifiers (from autocomplete)\n• **searchByUrl** — paste a funda.nl/zoeken search URL\n\n**Detail (single rich listing):**\n• **detailsById** — full detail by Funda listing id (globalId)\n• **detailsByUrl** — full detail by funda.nl listing URL\n\n**Estate agent:**\n• **agentDetails** — makelaar office profile by office id or URL\n\n**Helper:**\n• **autocomplete** — resolve a location string to Funda geo identifiers",
                        "default": "searchByLocation"
                    },
                    "location": {
                        "title": "📍 Location",
                        "type": "string",
                        "description": "For **searchByLocation** (and as a fallback for **autocomplete**) — a Dutch city, town, neighbourhood or postcode, e.g. `Amsterdam`, `Utrecht`, `1018XS`.",
                        "default": "Amsterdam"
                    },
                    "area": {
                        "title": "🗺️ Area identifier(s)",
                        "type": "string",
                        "description": "For **searchByArea** — one or more Funda geo identifiers, comma-separated, e.g. `amsterdam`, `gemeente-amsterdam`, `amsterdam/jordaan`. Discover identifiers with the autocomplete operation."
                    },
                    "url": {
                        "title": "🔗 Funda URL",
                        "type": "string",
                        "description": "For **searchByUrl / detailsByUrl / agentDetails** — a funda.nl/zoeken search URL (e.g. `https://www.funda.nl/zoeken/koop?selected_area=[\"amsterdam\"]`), a listing URL (e.g. `https://www.funda.nl/detail/koop/amsterdam/appartement-.../44411331/`), or a makelaar URL (e.g. `https://www.funda.nl/makelaar/24862-metropool-makelaars/`)."
                    },
                    "listingId": {
                        "title": "🆔 Listing ID",
                        "type": "string",
                        "description": "For **detailsById** — the Funda globalId shown as a search result's `propertyId`, e.g. `8066978`."
                    },
                    "agentId": {
                        "title": "🏢 Office ID",
                        "type": "string",
                        "description": "For **agentDetails** — the Funda office id shown on a listing's agent, e.g. `24862`. A makelaar URL can be used instead in the URL field."
                    },
                    "query": {
                        "title": "🔎 Autocomplete query",
                        "type": "string",
                        "description": "For **autocomplete** — partial location text to resolve into Funda geo identifiers, e.g. `Amster`. Falls back to the Location field if empty."
                    },
                    "searchType": {
                        "title": "🔖 Deal Type",
                        "enum": [
                            "For_Sale",
                            "For_Rent",
                            "Sold"
                        ],
                        "type": "string",
                        "description": "For **searchByLocation / searchByArea** — which listings to return. `Sold` listings carry a realised price.",
                        "default": "For_Sale"
                    },
                    "propertyType": {
                        "title": "🏘️ Property Type",
                        "type": "string",
                        "description": "Comma-separated property kinds to filter, e.g. `house,apartment`. One or more of: house, apartment, parking, land, berth. Leave empty for any."
                    },
                    "sortOrder": {
                        "title": "↕️ Sort Order",
                        "enum": [
                            "Default",
                            "Price_Low_to_High",
                            "Price_High_to_Low",
                            "Newest",
                            "Oldest"
                        ],
                        "type": "string",
                        "description": "Result order. Default is Funda's relevance.",
                        "default": "Default"
                    },
                    "minPrice": {
                        "title": "💵 Min price (EUR)",
                        "minimum": 0,
                        "type": "integer",
                        "description": "Minimum price in EUR (asking price for sale, monthly rent for rent). Leave empty for no minimum."
                    },
                    "maxPrice": {
                        "title": "💵 Max price (EUR)",
                        "minimum": 0,
                        "type": "integer",
                        "description": "Maximum price in EUR. Leave empty for no maximum."
                    },
                    "minBedrooms": {
                        "title": "🛏 Min bedrooms",
                        "minimum": 0,
                        "type": "integer",
                        "description": "Minimum number of bedrooms. Leave empty for any."
                    },
                    "maxBedrooms": {
                        "title": "🛏 Max bedrooms",
                        "minimum": 0,
                        "type": "integer",
                        "description": "Maximum number of bedrooms. Leave empty for any."
                    },
                    "minFloorArea": {
                        "title": "📐 Min living area (m²)",
                        "minimum": 0,
                        "type": "integer",
                        "description": "Minimum living area in square metres. Leave empty for any."
                    },
                    "maxFloorArea": {
                        "title": "📐 Max living area (m²)",
                        "minimum": 0,
                        "type": "integer",
                        "description": "Maximum living area in square metres. Leave empty for any."
                    },
                    "energyLabel": {
                        "title": "⚡ Energy Label",
                        "type": "string",
                        "description": "Energy labels, comma-separated: `A`, `A+`, `B`, `C`, `D`, `E`, `F`, `G`. Leave empty for any."
                    },
                    "keywords": {
                        "title": "🔤 Keywords",
                        "type": "string",
                        "description": "Extra free-text keywords matched against listings, e.g. `monumentaal`, `tuin`."
                    },
                    "maxResults": {
                        "title": "🔢 Max results",
                        "minimum": 1,
                        "maximum": 750,
                        "type": "integer",
                        "description": "Maximum rows to collect for search operations (also caps autocomplete suggestions at 25). FREE tier is capped at 25.",
                        "default": 45
                    }
                }
            },
            "runsResponseSchema": {
                "type": "object",
                "properties": {
                    "data": {
                        "type": "object",
                        "properties": {
                            "id": {
                                "type": "string"
                            },
                            "actId": {
                                "type": "string"
                            },
                            "userId": {
                                "type": "string"
                            },
                            "startedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "finishedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "status": {
                                "type": "string",
                                "example": "READY"
                            },
                            "meta": {
                                "type": "object",
                                "properties": {
                                    "origin": {
                                        "type": "string",
                                        "example": "API"
                                    },
                                    "userAgent": {
                                        "type": "string"
                                    }
                                }
                            },
                            "stats": {
                                "type": "object",
                                "properties": {
                                    "inputBodyLen": {
                                        "type": "integer",
                                        "example": 2000
                                    },
                                    "rebootCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "restartCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "resurrectCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "computeUnits": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "options": {
                                "type": "object",
                                "properties": {
                                    "build": {
                                        "type": "string",
                                        "example": "latest"
                                    },
                                    "timeoutSecs": {
                                        "type": "integer",
                                        "example": 300
                                    },
                                    "memoryMbytes": {
                                        "type": "integer",
                                        "example": 1024
                                    },
                                    "diskMbytes": {
                                        "type": "integer",
                                        "example": 2048
                                    }
                                }
                            },
                            "buildId": {
                                "type": "string"
                            },
                            "defaultKeyValueStoreId": {
                                "type": "string"
                            },
                            "defaultDatasetId": {
                                "type": "string"
                            },
                            "defaultRequestQueueId": {
                                "type": "string"
                            },
                            "buildNumber": {
                                "type": "string",
                                "example": "1.0.0"
                            },
                            "containerUrl": {
                                "type": "string"
                            },
                            "usage": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "integer",
                                        "example": 1
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "usageTotalUsd": {
                                "type": "number",
                                "example": 0.00005
                            },
                            "usageUsd": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "number",
                                        "example": 0.00005
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
