# Funda Scraper - Dutch Listings, Prices, Makelaar Phone & Email (`scrapersdelight/funda-scraper`) Actor

Scrape funda.nl koop and huur listings by place, postcode, province or search URL: price, address, GPS, m², rooms, energy label, year built, plot, all characteristics, photos, makelaar phone, email and website, buurt figures, new-build projects. No login, no browser.

- **URL**: https://apify.com/scrapersdelight/funda-scraper.md
- **Developed by:** [Scrapers Delight](https://apify.com/scrapersdelight) (community)
- **Categories:** Real estate, Lead generation, Automation
- **Stats:** 3 total users, 2 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

$0.63 / 1,000 listings

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

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

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
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.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

## 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.

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

### What does Funda Scraper do?

**Funda Scraper** turns funda.nl, the largest property site in the Netherlands, into clean property data: every listing for sale (koop) or for rent (huur) in a city, village, neighbourhood, municipality, province or postcode, with the asking price or rent, full address and postcode, GPS coordinates, living and plot area, rooms and bedrooms, energy label, year built, every characteristic funda lists, photos, floor plans and videos — plus the makelaar office's **phone, email, website and WhatsApp** and funda's own neighbourhood figures. New-build projects (nieuwbouw) come back with their price range, units and delivery dates.

Funda scraper · funda.nl API · Dutch real estate scraper · huizen te koop / te huur export

- 🏠 **Koop and huur** in one actor — asking price with k.k. / v.o.n., or rent per month with deposit and contract type; listings offered for both come with both prices.
- 📞 **Makelaar contacts on every row** — office name, phone, email, website, WhatsApp, address, NVM/VBO association, review score and review count.
- 🧭 **funda's own filters** — price, living and plot area, rooms, bedrooms, bathrooms, energy label, existing or new build, year built, garden / balcony / roof terrace / garage, "published within", keywords, radius around a place. Or paste a funda search URL.
- 🏗️ **New-build projects** — price range, number of homes and how many are still available, unit types with each unit's price, construction start and expected delivery.
- 📊 **Neighbourhood figures** — inhabitants, % families with children, average asking price and price per m², average days on the market for the buurt.
- 🧾 **Sold listings per makelaar** — paste a makelaar URL to get the office's listings for sale, sold (with sale date), rented out or purchased.
- 🔔 **Monitoring** — run it on a schedule and get only new listings and listings whose price or status changed; unchanged listings are skipped without being read.
- 🔓 **No login, no browser, no cookies** — exports to JSON, CSV, Excel, or the API.

### What data can you get from funda.nl?

<table>
<tr><td>🆔 Listing id, tiny id + URL</td><td>💰 Price, price text, k.k. / v.o.n.</td><td>🔑 Rent per month, deposit, contract</td></tr>
<tr><td>📍 Street, number, postcode, city</td><td>🗺️ Latitude + longitude</td><td>🏘️ Buurt, municipality, province</td></tr>
<tr><td>📐 Living area, plot area, volume</td><td>🛏️ Rooms, bedrooms, bathrooms, floors</td><td>⚡ Energy label, insulation, heating</td></tr>
<tr><td>🏗️ Year built, kind of house, roof</td><td>🌳 Garden, orientation, balcony, parking</td><td>🧾 VvE contribution, service costs</td></tr>
<tr><td>📅 Published date, listed since, status</td><td>👀 Views and saves on funda</td><td>📜 Ownership, ground lease, cadastral parcels</td></tr>
<tr><td>🖼️ Photos, floor plans, videos, 360°</td><td>📝 Description + funda highlights</td><td>📋 Every characteristic (`features`)</td></tr>
<tr><td>🏢 Makelaar name, phone, email</td><td>🌐 Makelaar website, WhatsApp, address</td><td>⭐ Makelaar rating + review count</td></tr>
<tr><td>🏗️ Project price range, units, delivery</td><td>📈 Buurt price per m², days on market</td><td>🧾 Sale history (sold listings)</td></tr>
</table>

### How to scrape funda.nl with Funda Scraper

1. [Create a free Apify account](https://console.apify.com/sign-up) — it comes with monthly platform credit.
2. Open **Funda Scraper** and type one or more places (`Amsterdam`, `provincie Utrecht`, `1031`) — or paste a funda search URL.
3. Pick for sale or for rent and set any filters you want.
4. Set **Max listings** and click **Start**.
5. Download the results as JSON, CSV or Excel, or read them through the API.

### ⬇️ Input

| Parameter | Type | Description |
|---|---|---|
| `locations` | list | Places: city or village (`Den Haag`, `Hengelo-ov`), buurt (`amsterdam/buiksloterham-zuid`), `gemeente Haarlemmermeer`, `provincie Utrecht`, postcode (`1031`, `1031 JH`), or `Nederland`. Prefill: `Amsterdam`. |
| `startUrls` | list | funda search URLs (their own filters are used), listing URLs or ids, makelaar office URLs. |
| `offeringType` | select | `buy` (default), `rent`, `both`. |
| `maxResults` | integer | Total listings to deliver. Default 100, prefill 10, 0 = no limit. |
| `objectTypes` | multi-select | house, apartment, parking, land, other. |
| `minPrice` / `maxPrice` | integer | Asking price, or rent per month for rentals (EUR). |
| `minLivingArea` / `maxLivingArea`, `minPlotArea` / `maxPlotArea` | integer | m². |
| `minRooms` / `maxRooms`, `minBedrooms` / `maxBedrooms`, `minBathrooms` | integer | Counts. |
| `energyLabels` | multi-select | A+++++ … G. |
| `constructionType` | select | any (default), resale, newly_built. |
| `minConstructionYear` / `maxConstructionYear` | integer | Year built. |
| `availability` | multi-select | available, negotiations (default both — funda's own default). |
| `publishedWithinDays` | integer | Only listings funda published in the last N days. |
| `mustHave` | multi-select | garden, balcony, roofTerrace, garage, parkingOnOwnProperty, solarPanels, heatPump, fixerUpper, monument, openHouse. |
| `keywords` | list | Keep listings whose text contains any of these words. |
| `radiusKm` | integer | Add listings up to N km from each place's centre. |
| `includeProjects` | boolean | New-build project rows (default on). |
| `includeRecreational` / `includeAbroad` | boolean | Holiday homes / funda's European listings (default off). |
| `sortBy` | select | `updated` (recently updated first, default) or `newest` (publication date). |
| `includeMakelaarContact` / `includeNeighbourhoodData` | boolean | Default on. |
| `language` | select | `nl` (default) or `en` — funda's own translation of labels and values. |
| `includeDescription`, `descriptionMaxLength`, `includeFeatures` | | Shape the text fields. |
| `makelaarListings` | multi-select | For makelaar URLs: forSale (default), sold, rentedOut, purchased. |
| `maxResultsPerSearch`, `maxListingsRead` | integer | Per-search cap; read limit for very narrow filters (0 = automatic). |
| `monitorMode`, `monitorKey` | | Only new and changed listings since the last run. |
| `proxyConfiguration` | proxy | Leave as is — see Limits. |

#### Input JSON

```json
{
  "locations": ["Utrecht", "provincie Zeeland"],
  "offeringType": "buy",
  "minPrice": 300000,
  "maxPrice": 600000,
  "minRooms": 4,
  "mustHave": ["garden"],
  "maxResults": 200
}
```

#### Type the place the way funda writes it

A plain name searches every place funda files under it: `Hengelo` returns Hengelo (Overijssel) and Hengelo (Gelderland), and the run log names both — type `Hengelo-ov` for one. `Den Haag` and `'s-Gravenhage` are the same place. A buurt uses funda's own id from any listing (`neighbourhoodId`, e.g. `rotterdam/nesselande`).

#### Paste a URL when you already filtered on funda

Set your filters on funda.nl, copy the address bar and paste it in **funda.nl URLs**: area, price, floor and plot area, rooms, bedrooms, bathrooms, object type, energy label, construction type and period, availability, published-within, exterior space, garage, amenities, free text and radius are read from it. A filter the actor cannot apply is named in the run log.

### ⬆️ Output

One row per listing (or new-build project). Real row from a Rotterdam run on 2026-10-16, trimmed:

```json
{
  "tinyId": "43320639",
  "url": "https://www.funda.nl/detail/koop/rotterdam/huis-laan-van-magisch-realisme-1/43320639/",
  "status": "available",
  "price": 969000, "priceText": "€ 969.000 k.k.", "originalPrice": 990000, "pricePerM2": 5945,
  "street": "Laan van Magisch Realisme", "houseNumber": "1", "postcode": "3059VJ", "city": "Rotterdam",
  "neighbourhood": "Nesselande", "latitude": 51.973167, "longitude": 4.5952406,
  "kindOfHouse": "Herenhuis, geschakelde woning", "constructionYear": 2009,
  "livingArea": 163, "plotArea": 387, "volume": 606, "rooms": 5, "bedrooms": 4, "energyLabel": "A",
  "garden": "Achtertuin, voortuin en zijtuin", "mainGardenArea": 162, "heating": "Stadsverwarming",
  "publicationDate": "2026-04-23", "imageCount": 74, "views": 10861, "saves": 156,
  "makelaarName": "Van Herk Makelaars Capelle aan den IJssel", "makelaarPhone": "(+31) 102 58 29 00",
  "makelaarEmail": "capelle@vanherk.nl", "makelaarWebsite": "https://www.vanherk.nl",
  "makelaarRating": 8.9, "makelaarReviewCount": 124,
  "neighbourhoodAvgAskingPricePerM2": 4665, "neighbourhoodAvgAskingPrice": 601905, "neighbourhoodAvgDaysOnMarket": 31,
  "features": { "Overdracht": { "Oorspronkelijke vraagprijs": "€ 990.000 kosten koper", "Aangeboden sinds": "5 maanden", "…": "…" }, "…": "…" }
}
```

#### Fields and measured fill

Measured on a 100-listing Rotterdam for-sale run and a 10-listing Amsterdam run (2026-10-16):

| Fields | Filled |
|---|---|
| `listingId`, `url`, `price`, `priceText`, `postcode`, `city`, `province`, `latitude`, `longitude`, `publicationDate`, `description`, `images` | 100% |
| `makelaarName`, `makelaarPhone`, `makelaarEmail`, `makelaarWebsite`, `makelaarAddress` | 100% |
| `livingArea`, `rooms` 98% · `volume`, `pricePerM2`, `ownership`, `floors` 96% · `bedrooms`, `energyLabel` 94% · `constructionYear` 93% | |
| `makelaarRating` + `makelaarReviewCount` 94% · `makelaarWhatsApp` 28-40% · buurt figures 99-100% | |
| `floorPlans` 85% · `views` / `saves` / `highlights` 81% · `videos` 67% · `photos360` 60% · `brochureUrl` 59% | |
| `vveContributionMonthly` 75% (apartments) · `garden` 32% / `plotArea` 12% in a city (houses only) | |
| `rentPrice`, `deposit`, `rentalAgreement` | every rent row with a deposit / contract listed |
| `saleHistory`, `transactionDate` | sold listings (makelaar mode, listing URLs) |
| project fields (`priceMax`, `projectUnitsTotal`, `expectedDelivery`…) | new-build project rows |

A field funda does not publish for a listing is `null`, never a guessed value. The listing agent's personal name is not delivered (makelaar office contacts only).

### Use cases

- 🏢 **Makelaars and mortgage advisors** — every new listing in your area with the selling office's phone and email.
- 📈 **Investors and analysts** — asking price per m² next to the buurt average, days on the market, price cuts (`originalPrice`).
- 🔔 **House hunters** — a daily "published within 1 day" run in monitor mode, straight to Google Sheets or Slack.
- 🏗️ **Developers and builders** — new-build projects with unit prices, availability and delivery dates.
- 🧾 **Agency benchmarking** — any makelaar's for-sale and sold portfolio with sale dates.
- 🏡 **Rental platforms** — huur listings with rent, deposit and contract type.

### How much does it cost to scrape funda.nl?

Pay per result, no start fee: **$0.00063 per listing** ($0.63 per 1,000). Makelaar contacts and neighbourhood figures are included. Filtered, duplicate, unchanged (monitor mode), removed and unreachable listings are never charged.

| Run | Listings | Price |
|---|---|---|
| Demo (prefill) | 10 | $0.0063 |
| A city | 100 | $0.063 |
| A region | 1,000 | $0.63 |

### Integrations, API, scheduling & MCP

- **Schedule** the actor daily with **monitor mode** on to get only new and changed listings.
- **Integrations**: Google Sheets, Slack, Make, Zapier, n8n and webhooks from the Integrations tab.
- **API**: call it from [Python](https://apify.com/scrapersdelight/funda-scraper/api/python) or [JavaScript](https://apify.com/scrapersdelight/funda-scraper/api/javascript) with `apify-client`, then read the dataset.
- **MCP**: connect it to Claude, ChatGPT or Cursor through the [MCP tab](https://apify.com/scrapersdelight/funda-scraper/api/mcp).

### More property scrapers

<table>
<tr><td>🇪🇸 <a href="https://apify.com/scrapersdelight/idealista-scraper"><b>Idealista Scraper</b></a><br>Spain, Italy, Portugal listings.</td><td>🇪🇸 <a href="https://apify.com/scrapersdelight/fotocasa-scraper"><b>Fotocasa Scraper</b></a><br>Spanish property listings.</td><td>🇫🇷 <a href="https://apify.com/scrapersdelight/seloger-scraper"><b>SeLoger Scraper</b></a><br>French property listings.</td></tr>
<tr><td>🇬🇧 <a href="https://apify.com/scrapersdelight/rightmove-scraper"><b>Rightmove Scraper</b></a><br>UK listings and agents.</td><td>🇦🇺 <a href="https://apify.com/scrapersdelight/domain-com-au-scraper"><b>Domain.com.au Scraper</b></a><br>Australian listings.</td><td>🇳🇱 <a href="https://apify.com/scrapersdelight/nl-kvk-website-contact-scraper"><b>Dutch KvK & BTW Scraper</b></a><br>Dutch company data and contacts.</td></tr>
</table>

See every actor on our [profile](https://apify.com/scrapersdelight).

### Limits & empty runs

- funda refreshes the list of its listings once a day: a listing published in the last few hours can appear in the next day's run.
- Sold and rented listings are not searchable place-wide (funda's search is the only place-wide sold index); get them per makelaar office or by listing URL.
- Results are ordered by last update or by publication date; there is no price sort — use the price filters.
- Price, size, rooms, energy-label and feature filters are checked on each listing. When filters match very few listings, the run stops at **Max listings to read** (automatic: 300 + 25 per delivered listing) and says so; raise it to search deeper.
- funda's marketing regions (`regio-…`) and wijk-level areas are not supported; use places, buurten or a radius.
- Speed, measured in test runs on 2026-10-16: 10 listings in ~10 s, 100 in ~35 s, 1,000 in ~4 min; on the default 256 MB memory, reading funda's listing index adds up to ~30 s per run.
- A run with no match ends with "Nothing was charged".

### ❓ FAQ

#### How much does Funda Scraper cost?

$0.00063 per delivered listing, no start fee, with makelaar contacts and neighbourhood figures included. 100 listings cost $0.063.

#### How many listings can Funda Scraper return?

Everything funda publishes: 100,810 for sale, 4,471 for rent and 2,054 new-build projects on 2026-10-16. Set **Max listings** to 0 for no limit.

#### Does Funda Scraper return makelaar phone numbers and emails?

Yes — the office phone, email, website, WhatsApp number and address of the listing's makelaar, from funda's own makelaar page, on 100% of rows in our test runs.

#### Can Funda Scraper search with my funda.nl filters?

Yes. Paste the funda search URL, or use the filter fields. Both work for koop and huur.

#### Can I get sold prices with Funda Scraper?

Per makelaar office: paste the makelaar URL and tick **Sold** — each row has the last asking price, sale date and time on the market. A sold listing's URL works too.

#### Can I schedule Funda Scraper to watch for new listings?

Yes. Turn on **Only new and changed listings**, set **Published within** to 1 or 2 days and schedule a daily run. Unchanged listings are skipped without being read and are not charged.

#### Does Funda Scraper return new-build projects?

Yes, as their own rows: price range, homes in the project, how many are available, each unit type with its price, construction start and expected delivery.

#### Can I get the data in English with Funda Scraper?

Set **Language** to English: labels and characteristics come back in funda's English. The description stays as the makelaar wrote it.

#### Can I use Funda Scraper with the Apify API or an MCP server?

Yes — see the API tab for Python and JavaScript, and the MCP tab to use it from an AI assistant.

#### Do I need a funda.nl account or API key?

No. Funda Scraper reads funda's public listing pages' data; no login, cookies or API key.

#### Why did my Funda Scraper run return no results?

The run summary (`RUN_SUMMARY`) lists, per search, how many listings were candidates, read, and filtered out by which filter. A place funda does not know, or filters nothing matches, ends with "Nothing was charged".

#### Your feedback

Something missing or wrong? Open an issue on the [Issues tab](https://apify.com/scrapersdelight/funda-scraper/issues/open) — we read every one.

# Actor input Schema

## `locations` (type: `array`):

Where to search: a city or village ("Amsterdam", "Den Haag", "Hengelo-ov"), a neighbourhood the way funda writes it ("amsterdam/buiksloterham-zuid"), "gemeente Haarlemmermeer", "provincie Utrecht", a postcode ("1031" or "1031 JH") or "Nederland" for the whole country. Each line is its own search.

## `startUrls` (type: `array`):

funda search URLs (https://www.funda.nl/zoeken/koop?selected_area=\["utrecht"]\&price="300000-500000" - the URL's own filters are used), listing URLs or ids (e.g. 44548406), or makelaar office URLs (https://www.funda.nl/makelaar/24819-.../) to get every listing that office publishes.

## `offeringType` (type: `string`):

Koop (for sale), huur (for rent) or both. Applies to the locations above.

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

Stop after this many listings in total (0 = no limit). You are charged per listing delivered.

## `objectTypes` (type: `array`):

Leave empty for all types.

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

For sale: asking price. For rent: rent per month.

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

For sale: asking price, e.g. 500000. For rent: rent per month, e.g. 2000.

## `minLivingArea` (type: `integer`):

Woonoppervlakte in square metres.

## `maxLivingArea` (type: `integer`):

Woonoppervlakte in square metres.

## `minPlotArea` (type: `integer`):

Perceeloppervlakte in square metres.

## `maxPlotArea` (type: `integer`):

Perceeloppervlakte in square metres.

## `minRooms` (type: `integer`):

Total rooms (kamers), bedrooms included.

## `maxRooms` (type: `integer`):

Total rooms (kamers).

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

Slaapkamers.

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

Slaapkamers.

## `minBathrooms` (type: `integer`):

Badkamers.

## `energyLabels` (type: `array`):

Only these energy labels. Leave empty for any.

## `constructionType` (type: `string`):

Bestaande bouw (resale) or nieuwbouw (newly built).

## `minConstructionYear` (type: `integer`):

Bouwjaar, e.g. 1990.

## `maxConstructionYear` (type: `integer`):

Bouwjaar, e.g. 1940.

## `availability` (type: `array`):

Available, and/or in negotiation (onder bod, onder optie, verkocht/verhuurd onder voorbehoud). funda's own default is both. Sold and rented listings: paste a makelaar URL (see "Makelaar office listings") or the listing URL.

## `publishedWithinDays` (type: `integer`):

Only listings funda published in the last N days (1 = today and yesterday). Fast: older listings are skipped before they are read.

## `mustHave` (type: `array`):

Every one you tick must be present.

## `keywords` (type: `array`):

Keep a listing when its title, description or characteristics contain ANY of these words, e.g. "tuin op het zuiden", "erfpacht afgekocht", "aan het water".

## `radiusKm` (type: `integer`):

Also return listings up to this many km from the centre of each place (like funda's + km option). 0 = the place itself.

## `includeProjects` (type: `boolean`):

New-build project overviews (nieuwbouwprojecten) come back as their own rows: price range, units per type, availability, timeline, project website. funda shows them in its for-sale search too.

## `includeRecreational` (type: `boolean`):

funda's recreational listings (holiday homes, chalets, holiday parks). Off = residential only, like funda's default.

## `includeAbroad` (type: `boolean`):

funda's European listings (Belgium, Germany, Spain, France...) - use with a foreign place name or "Nederland" for all.

## `sortBy` (type: `string`):

Recently updated on funda first, or newest publication date first (exact: the run reads only as far as needed to be sure).

## `includeMakelaarContact` (type: `boolean`):

Add the makelaar office's name, phone, email, website, WhatsApp, address, rating and review count to every row.

## `includeNeighbourhoodData` (type: `boolean`):

Add funda's buurt figures: inhabitants, % families with children, average asking price and asking price per m², average days on the market.

## `language` (type: `string`):

Dutch or English labels and characteristic values (funda's own translation). The description stays as the makelaar wrote it.

## `includeDescription` (type: `boolean`):

The makelaar's full listing text.

## `descriptionMaxLength` (type: `integer`):

0 = full text.

## `includeFeatures` (type: `boolean`):

Every characteristic funda lists (kenmerken), grouped by section, as one object - next to the flat fields.

## `makelaarListings` (type: `array`):

For makelaar URLs in the URL list: which of the office's listings to return.

## `maxResultsPerSearch` (type: `integer`):

Cap for each location / URL (0 = no cap per search; the total cap above still applies).

## `maxListingsRead` (type: `integer`):

Price, size, rooms, energy-label and feature filters are checked on each listing, so very narrow filters can mean reading many listings per match. 0 = automatic (300 + 25 per listing delivered); set a higher number to search deeper. Listings read but not delivered are never charged.

## `monitorMode` (type: `boolean`):

Remember what earlier runs delivered (same searches) and return only new listings and listings whose price or status changed. Unchanged listings are skipped without being read and are not charged.

## `monitorKey` (type: `string`):

Optional name for the monitor memory, so you can change the inputs and keep the history. Empty = derived from the inputs.

## `proxyConfiguration` (type: `object`):

Leave as is: the actor reads funda directly and switches to Dutch residential proxies by itself only if funda refuses (capped per run). Your own proxy URLs are used first if you add them.

## Actor input object example

```json
{
  "locations": [
    "Amsterdam"
  ],
  "offeringType": "buy",
  "maxResults": 10,
  "constructionType": "any",
  "availability": [
    "available",
    "negotiations"
  ],
  "radiusKm": 0,
  "includeProjects": true,
  "includeRecreational": false,
  "includeAbroad": false,
  "sortBy": "updated",
  "includeMakelaarContact": true,
  "includeNeighbourhoodData": true,
  "language": "nl",
  "includeDescription": true,
  "descriptionMaxLength": 0,
  "includeFeatures": true,
  "makelaarListings": [
    "forSale"
  ],
  "maxResultsPerSearch": 0,
  "maxListingsRead": 0,
  "monitorMode": false,
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}
```

# Actor output Schema

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

One item per listing or new-build project: price, address, GPS, size, rooms, energy label, characteristics, photos, makelaar contact and neighbourhood figures.

## `summary` (type: `string`):

Per-search candidates, listings read / delivered / filtered (by reason), sitemap files, routes used and residential spend.

# 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 = {
    "locations": [
        "Amsterdam"
    ],
    "maxResults": 10
};

// Run the Actor and wait for it to finish
const run = await client.actor("scrapersdelight/funda-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 = {
    "locations": ["Amsterdam"],
    "maxResults": 10,
}

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

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

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

```

## CLI example

```bash
echo '{
  "locations": [
    "Amsterdam"
  ],
  "maxResults": 10
}' |
apify call scrapersdelight/funda-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,scrapersdelight/funda-scraper"
        }
    }
}
```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/kO6KgWqBsc2eQJ6WO/builds/fI2AiFpZi67jCXr7t/openapi.json
