# Funda.nl & FundainBusiness.nl Scraper (Search + Detail) (`ahmed_jasarevic/funda-hybrid-scraper`) Actor

High-performance hybrid scraper for Funda.nl (residential properties: apartments, houses) and FundainBusiness.nl (commercial real estate).

- **URL**: https://apify.com/ahmed\_jasarevic/funda-hybrid-scraper.md
- **Developed by:** [Ahmed Jasarevic](https://apify.com/ahmed_jasarevic) (community)
- **Categories:** Real estate, Developer tools, Automation
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, NaN bookmarks
- **User rating**: No ratings yet

## Pricing

from $3.50 / 1,000 results

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/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 Scraper (Residential + Commercial Real Estate Netherlands)

A powerful and high-performance **real estate scraper for Funda.nl and Fundainbusiness.nl (Netherlands)**.

This actor extracts structured property data from:

* 🏠 **Funda.nl (Residential real estate)** → apartments, houses
* 🏢 **Fundainbusiness.nl (Commercial real estate)** → offices, warehouses, industrial units

It supports **LIST, DETAIL and SEARCH crawling modes** with full pagination support.

---

## 🚀 What this scraper does

This scraper automatically extracts **structured real estate intelligence**:

#### 📍 Property Data

* Street address, postcode, city
* Full listing URL
* Unique IDs (tinyId, globalId)

#### 💰 Pricing

* Asking price / rent price
* Price per m²
* Availability status

#### 🏗️ Building Info

* Year of construction
* Property type
* Energy label
* Floors & structure

#### 📐 Surface Data

* Living / office / warehouse area
* Total usable space

#### 🖼️ Media

* High-quality image URLs
* Listing gallery extraction

#### 📊 Structured Features

* Grouped characteristics (Overdracht, Bouw, Energie, etc.)
* Business-specific metadata (industrial zones, logistics specs)

#### 🧾 Description

* Full HTML-cleaned property description

---

## ⚙️ Input

This actor supports **multiple modes**:

### 1️⃣ Residential Listings (Funda.nl)

```json
{
  "startUrls": [
    {
      "url": "https://www.funda.nl/zoeken/koop?selected_area=[\"amsterdam\"]"
    }
  ],
  "maxItems": 50,
  "proxy": {
    "useApifyProxy": true,
    "apifyProxyGroups": ["RESIDENTIAL"]
  }
}
````

***

### 2️⃣ Commercial Listings (Fundainbusiness.nl)

```json
{
  "startUrls": [
    {
      "url": "https://www.fundainbusiness.nl/alle-bedrijfsaanbod/heel-nederland/"
    }
  ],
  "maxItems": 100,
  "proxy": {
    "useApifyProxy": true,
    "apifyProxyGroups": ["RESIDENTIAL"]
  }
}
```

***

### 3️⃣ Mixed Mode (Residential + Commercial)

```json
{
  "startUrls": [
    {
      "url": "https://www.funda.nl/zoeken/koop?selected_area=[\"amsterdam\"]"
    },
    {
      "url": "https://www.fundainbusiness.nl/alle-bedrijfsaanbod/heel-nederland/"
    }
  ],
  "maxItems": 150
}
```

***

## 🔎 Crawling Modes

### 📋 LIST MODE

- Scrapes listing pages
- Extracts URLs
- Handles pagination automatically
- Enqueues DETAIL pages

***

### 📄 DETAIL MODE

- Extracts full property information
- Structured JSON output
- Media + characteristics + description

***

### 🔍 SEARCH MODE

- Works via search URLs
- Supports filters (city, price, category)

Example:

```text
Funda search:
https://www.funda.nl/zoeken/koop?selected_area=["rotterdam"]

Fundainbusiness search:
https://www.fundainbusiness.nl/zoeken/huur/
```

***

## 📤 Output

Each item represents **one property listing (residential or commercial)**.

***

### 🏠 Example Output (Residential)

```json
{
	"url": "https://www.fundainbusiness.nl/bedrijfshal/sprang-capelle/object-43184630-tinus-van-der-sijdestraat-7/",
	"tinyId": "43184630",
	"globalId": null,
	"title": "Tinus van der Sijdestraat 7 5161 CD Sprang-Capelle",
	"address": {
		"streetAddress": "Tinus van der Sijdestraat 7\r\n    5161 CD Sprang-Capelle",
		"postcode": "5161cd",
		"city": "sprangcapelle"
	},
	"surfaces": {
		"surfaceTotal": "695 m²",
		"numberOfFloors": null
	},
	"build": {
		"year": "1999",
		"energyLabel": "Niet"
	},
	"media": {
		"photoUrls": [
			"https://cloud.funda.nl/valentina_media/218/213/235_1440x960.jpg",
			"https://cloud.funda.nl/valentina_media/218/213/218_1440x960.jpg"
		]
	},
	"characteristicsBySection": {
		"Overdracht": {
			"Vraagprijs": "Prijs op aanvraag",
			"Huurprijs": "€ 54.000 per jaar",
			"Status": "Beschikbaar",
			"Aanvaarding": "In overleg"
		},
		"Bouw": {
			"Hoofdfunctie": "Bedrijfshal",
			"Soort bouw": "Bestaande bouw",
			"Bouwjaar": "1999"
		},
		"Oppervlakten": {
			"Oppervlakte": "695 m²",
			"Bedrijfshal oppervlak": "455 m²",
			"Kantoor oppervlak": "240 m²",
			"Vrije hoogte": "6,9 m",
			"Vrije overspanning": "20 m",
			"Draagvermogen": "1.500 kg/m²",
			"Perceel": "691 m²"
		},
		"Indeling": {
			"Aantal bouwlagen": "2 bouwlagen",
			"Voorzieningen": "Lichtstraten, overheaddeuren, betonvloer, toilet, pantry en te openen ramen"
		},
		"Energie": {
			"Energielabel": "Niet beschikbaar"
		},
		"Omgeving": {
			"Ligging": "Bedrijventerrein"
		}
	},
	"advertisementTargeting": {
		"cat42": "0",
		"taal": "nl",
		"loggedin": "false",
		"cat1": "noordbrabant",
		"cat2": "sprangcapelle",
		"cat3": "5161cd",
		"cat4": "7",
		"cat6": "54000",
		"cat9": "695",
		"cat11": "11082",
		"cat13": "bestaandebouw",
		"cat24": "0",
		"cat26": "nvm",
		"cat28": "0",
		"cat29": "1999",
		"cat30": "6000",
		"cat33": "huur",
		"cat35": "43184630",
		"cat36": "0",
		"cat38": "gemeentewaalwijk",
		"cat39": "sprang",
		"cat43": "0",
		"cat44": "0",
		"postcode": "5161cd",
		"plaats": "sprangcapelle",
		"provincie": "noordbrabant",
		"huisnummer": "7",
		"oppervlakte": "695",
		"huurprijs": "54000",
		"hoofdaanbieder": "11082",
		"bouwvorm": "bestaandebouw",
		"bedrijfsruimte": "false",
		"branchevereniging": "nvm",
		"dakterras": "false",
		"tuin": "false",
		"balkon": "false",
		"soortaanbieding": "huur",
		"tinyid": "43184630",
		"huurprijsrange": "6000",
		"bouwjaar": "1999",
		"openhuis": "false",
		"gemeente": "waalwijk",
		"buurt": "sprang",
		"monumentalestatus": "false",
		"rijksmonument": "false",
		"soortaanbod": "bedrijfshal",
		"kluswoning": "false",
		"adgroup": "b",
		"status": "beschikbaar",
		"zonnepanelen": "false",
		"parkeergelegenheidopafgeslotenterrein": "false",
		"parkeergelegenheidopeigenterrein": "false",
		"warmtepomp": "false",
		"service": "fundainbusinesswebsite",
		"environment": "production"
	},
	"description": "Op bedrijventerrein ‘’de Kets’’ gelegen moderne bedrijfsruimte met kantoorruimtes en parkeerplaatsen op eigen terrein. Algemeen Sprang-Capelle is een gunstig gelegen dorp in de gemeente Waalwijk, in het hart van Noord-Brabant. Dankzij de centrale ligging nabij de A59 en N261 zijn steden als Tilburg, ’s-Hertogenbosch en Breda snel bereikbaar. Dit maakt Sprang-Capelle tot een uitstekende vestigingslocatie voor ondernemers die op zoek zijn naar een goed bereikbare en representatieve plek voor hun bedrijf. De regio kenmerkt zich door een sterke economische dynamiek, met volop kansen in de industrie, logistiek, retail en dienstverlening. Daarnaast ligt de Efteling op korte afstand, wat zorgt voor extra bezoekersaantrekkingen en naamsbekendheid in de omgeving. Bouwjaar 1999 Vloeroppervlakte: Bedrijfsruimte : ca. 455 m² Kantoorruimte : ca. 240 m² Totaal : ca. 695 m² Bestemming: Het object valt binnen het bestemmingsplan “Bedrijventerrein”, vastgesteld op 20-11-2014, waarin het de bestemming “Bedrijventerrein” heeft gekregen met de aanduiding “Milieucategorie 1 t/m 3.1”. Voor een afschrift van dit bestemmingsplan kunt u contact met ons kantoor opnemen. Max. vloerbelasting: Ca. 1.500 kg/m² Vrije hoogte: Ca. 690 cm Vrije overspanning: Ca. 20 meter Indeling Entree, toegang tot showroom/productie of kantoorruimte met toilet en pantry, toegang naar de bedrijfsruimte die is verdeeld in 2 segmenten, trapopgang naar verdieping met 1 kantoorruimte en vergaderruimte/showroomruimte. Voorzieningen Bedrijfsruimte: - Betonvloer; - 2 elektrische overheaddeuren; - Cv-verwarmd; - Deels systeemplafond met verlichting; - Lichtstraat; - 3x25 Ampère. Kantoorruimte: - Alarm; - Systeemplafond met verlichting; - Cv-verwarmd middels radiatoren; - Tegelvoer, vloerstoffering; - Toilet; - Pantry met vaatwasser en koelkast. Opmerkingen: - Ca. 6 parkeerplaatsen op eigen terrein. - Aan de achterzijde van het pand is er volop parkeermogelijkheid op het achtergelegen terrein van de supermarkt. Middels een loopdeur is de bedrijfsruimte bereikbaar. Kadastrale gegevens Gemeente : Sprang Sectie : C Nummer : 1647 en 1648 Oplevering In overleg Verhuurvoorwaarden Wij bieden het object aan op basis van onder meer de volgende voorwaarden: - huurtermijn van vijf (5) jaren met telkenmale verlengingsperioden van vijf (5) jaren; - wederzijdse opzegtermijn van twaalf (12) maanden voorafgaand aan expiratiedatum; - jaarlijkse indexering op basis van het CPI indexcijfer alle huishoudens (2015=100), voor het eerst één jaar na huuringangsdatum; - betaling per drie (3) maanden vooruit; - uitgangspunt is een met BTW belaste verhuur; - doorlopende bankgarantie of waarborgsom ter grootte van drie (3) maanden huur; - model huurovereenkomst kantoorruimte en andere bedrijfsruimte in de zin van artikel 7:230a BW met bijbehorende algemene bepalingen, zoals vastgesteld door de Raad voor Onroerende Zaken (ROZ) op 30 januari 2025. Huurprijs: € 54.000,- per jaar te vermeerderen met BTW Verkoopvoorwaarden Wij bieden het object aan op basis van onder meer de volgende voorwaarden: - De kosten verbonden aan de eigendomsoverdracht zijn voor rekening van de koper; - Instrumenterend notaris is te bepalen door de koper; - Een bankgarantie/waarborgsom ter grootte van 10% van de koopsom, te storten bij instrumenterend notaris uiterlijk 14 dagen na het ondertekenen van de koopovereenkomst. Vraagprijs: € n.o.t.k. k.k."
}
```

***

### 🏢 Example Output (Commercial)

```json
{
	"url": "https://www.funda.nl/detail/koop/amsterdam/appartement-jan-bernardusstraat-23-2l/43339890/",
	"tinyId": "43339890",
	"globalId": "7984437",
	"title": "Jan Bernardusstraat 23-2L 1091TS Amsterdam",
	"address": {
		"streetAddress": "Jan Bernardusstraat 23-2L",
		"postcode": "1091TS",
		"city": "Amsterdam"
	},
	"surfaces": {
		"surfaceTotal": "34 m²",
		"numberOfFloors": null
	},
	"build": {
		"year": "1911",
		"energyLabel": "B"
	},
	"media": {
		"photoUrls": [
			"https://cloud.funda.nl/valentina_media/228/126/683.jpg",
			"https://cloud.funda.nl/valentina_media/228/126/526.jpg",
			"https://cloud.funda.nl/valentina_media/228/126/859.jpg",
			"https://cloud.funda.nl/valentina_media/228/126/762.jpg",
			"https://cloud.funda.nl/valentina_media/228/126/847.jpg",
			"https://cloud.funda.nl/valentina_media/228/126/716.jpg",
			"https://cloud.funda.nl/valentina_media/228/126/712.jpg",
			"https://cloud.funda.nl/valentina_media/228/126/597.jpg",
			"https://cloud.funda.nl/valentina_media/228/126/793.jpg",
			"https://cloud.funda.nl/valentina_media/228/126/893.jpg",
			"https://cloud.funda.nl/valentina_media/228/126/702.jpg",
			"https://cloud.funda.nl/valentina_media/228/126/792.jpg",
			"https://cloud.funda.nl/valentina_media/228/126/600.jpg",
			"https://cloud.funda.nl/valentina_media/228/126/619.jpg",
			"https://cloud.funda.nl/valentina_media/228/126/495.jpg",
			"https://cloud.funda.nl/valentina_media/228/126/903.jpg",
			"https://cloud.funda.nl/valentina_media/228/126/683.jpg?options=width=1440",
			"https://cloud.funda.nl/valentina_media/228/126/526.jpg?options=width=720",
			"https://cloud.funda.nl/valentina_media/228/126/859.jpg?options=width=720",
			"https://cloud.funda.nl/valentina_media/228/126/762.jpg?options=width=720",
			"https://cloud.funda.nl/listing-management/57e5ca0e-f178-4342-b997-7c03441e803e?options=width=464",
			"https://cloud.funda.nl/listing-management/c0ce2501-f9d6-4943-860c-f66e671c2b09?options=width=464"
		]
	},
	"characteristicsBySection": {
		"Overdracht": {
			"Aangeboden sinds": "Vandaag",
			"Aanvaarding": "In overleg",
			"Vraagprijs": "€ 395.000 kosten koper",
			"Vraagprijs per m²": "€ 11.618",
			"Status": "Beschikbaar",
			"Bijdrage VvE": "€ 150,00 per maand"
		},
		"Bouw": {
			"Soort appartement": "Tussenverdieping (appartement)",
			"Soort bouw": "Bestaande bouw",
			"Bouwjaar": "1911",
			"Soort dak": "Plat dak bedekt met bitumineuze dakbedekking"
		},
		"Oppervlakten en inhoud": {
			"Wonen": "34 m²",
			"Gebouwgebonden buitenruimte": "1 m²",
			"Inhoud": "112 m³"
		},
		"Indeling": {
			"Aantal kamers": "1 kamer (1 slaapkamer)",
			"Aantal badkamers": "1 badkamer",
			"Badkamervoorzieningen": "Inloopdouche, toilet, wastafel, en wastafelmeubel",
			"Aantal woonlagen": "1 woonlaag",
			"Voorzieningen": "Frans balkon, natuurlijke ventilatie, en TV kabel",
			"Gelegen op": "2e woonlaag"
		},
		"Energie": {
			"Energielabel": "Wat betekent dit?",
			"Isolatie": "Dubbel glas en muurisolatie",
			"Verwarming": "Cv-ketel",
			"Warm water": "Cv-ketel",
			"Cv-ketel": "Feenstra (gas gestookt combiketel uit 2012, eigendom)"
		},
		"Kadastrale gegevens": {
			"Eigendomssituatie": "Volle eigendom"
		},
		"Buitenruimte": {
			"Ligging": "Aan rustige weg",
			"Balkon/dakterras": "Balkon aanwezig"
		},
		"Parkeergelegenheid": {
			"Soort parkeergelegenheid": "Betaald parkeren en parkeervergunningen"
		},
		"VvE checklist": {
			"Inschrijving KvK": "Ja",
			"Jaarlijkse vergadering": "Ja",
			"Periodieke bijdrage": "Ja (€ 150,00 per maand)",
			"Reservefonds aanwezig": "Ja",
			"Onderhoudsplan": "Ja",
			"Opstalverzekering": "Ja"
		}
	},
	"advertisementTargeting": {
		"taal": "nl",
		"cat42": "0",
		"soortaanbod": "koop",
		"globalid": "7984437",
		"cat1": "noordholland",
		"cat2": "amsterdam",
		"cat3": "1091ts",
		"cat4": "23",
		"cat5": "2l",
		"cat6": "395000",
		"cat7": "appartement",
		"cat8": "1",
		"cat9": "34",
		"cat10": "b",
		"cat11": "24690",
		"cat13": "bestaandebouw",
		"cat20": "oud",
		"cat24": "0",
		"cat26": "nvm",
		"cat28": "0",
		"cat29": "1911",
		"cat30": "375000",
		"cat33": "koop",
		"cat35": "43339890",
		"cat36": "0",
		"cat38": "gemeenteamsterdam",
		"cat39": "weesperzijdemiddenzuid",
		"cat43": "0",
		"cat44": "0",
		"postcode": "1091ts",
		"plaats": "amsterdam",
		"provincie": "noordholland",
		"huisnummer": "23",
		"huisnummertoevoeging": "2l",
		"woonoppervlakte": "34",
		"vraagprijs": "395000",
		"aantalkamers": "1",
		"soortobject": "appartement",
		"energieklasse": "b",
		"hoofdaanbieder": "24690",
		"bouwvorm": "bestaandebouw",
		"bedrijfsruimte": "false",
		"cvketel": "oud",
		"branchevereniging": "nvm",
		"dakterras": "false",
		"tuin": "false",
		"balkon": "true",
		"soortaanbieding": "koop",
		"tinyid": "43339890",
		"vraagprijsrange": "375000",
		"bouwjaar": "1911",
		"openhuis": "false",
		"gemeente": "amsterdam",
		"buurt": "weesperzijdemiddenzuid",
		"monumentalestatus": "false",
		"rijksmonument": "false",
		"energiezuinig": "true",
		"kluswoning": "false",
		"adgroup": "b",
		"status": "beschikbaar",
		"zonnepanelen": "false",
		"parkeergelegenheidopafgeslotenterrein": "false",
		"parkeergelegenheidopeigenterrein": "false",
		"warmtepomp": "false"
	},
	"description": "PUUR* Wonen in de Weesperzijdebuurt – licht, slim ingedeeld en op toplocatie!\n\nOntdek dit verrassend lichte en efficiënt ingedeelde appartement van ca. 34 m², gelegen op eigen grond. Het appratement ligt op de tweede verdieping van een karakteristiek pand in de geliefde Weesperzijdebuurt. De woning beschikt over een Frans balkon op het zuidoosten, een open keuken en een moderne badkamer. In 2012 is het appartement volledig gerenoveerd en sindsdien uitstekend onderhouden.\n\nMet de Amstel aan het einde van de straat en het bruisende stadsleven binnen handbereik, woon je hier op een unieke locatie in Amsterdam.\n\nINDELING\nVia het ruime en verzorgde gemeenschappelijke trappenhuis bereik je de entree van de woning op de tweede verdieping.\n\nAan de voorzijde bevindt zich de lichte woonkamer met openslaande deuren naar het Franse balkon op het zuidoosten. Dankzij de grote raampartijen geniet de ruimte van veel natuurlijk daglicht en een prettige, open sfeer.\n\nDe open keuken is centraal in de woning geplaatst en voorzien van diverse inbouwapparatuur, waaronder een gasfornuis, oven, afzuigkap en koelkast. Tevens bevindt zich hier de cv-installatie.\n\nAan de rustige achterzijde ligt het slaapgedeelte, met voldoende ruimte voor een bed en kastruimte. Momenteel staat deze in open verbinding met de woonkamer, maar door het plaatsen van een wand of schuifdeur is eenvoudig een separate slaapkamer te realiseren.\n\nDe moderne badkamer is praktisch ingedeeld en voorzien van een inloopdouche, wastafel, toilet en aansluiting voor de wasmachine.\n\nLOCATIE\nDe Jan Bernardusstraat is gelegen in de populaire Weesperzijdebuurt, tussen de Amstel en de Wibautstraat. Een ideale locatie op de grens van het centrum, De Pijp en Amsterdam-Oost.\n\nOp loopafstand vind je diverse geliefde horecagelegenheden zoals De Ysbreeker, Hesp, Loetje, het Volkshotel en Restaurant C. Langs de Amstel kun je heerlijk wandelen, sporten of ontspannen aan het water.\n\nDe bereikbaarheid is uitstekend: metrostation Wibautstraat en station Amstel liggen op korte afstand en ook de uitvalswegen (A1, A2 en Ring A10) zijn snel bereikbaar.\n\nBIJZONDERHEDEN\n* Woonoppervlakte ca. 34 m² (NEN 2580 gemeten);\n* Gelegen op de tweede verdieping;\n* Volledig gerenoveerd in 2012;\n* Frans balkon op het zuidoosten;\n* Mogelijkheid tot creëren van separate slaapkamer;\n* Moderne badkamer met inloopdouche;\n* Goed geïsoleerd, voorzien van dubbel glas;\n* Energielabel A;\n* Gelegen op eigen grond;\n* Actieve en professioneel beheerde VvE;\n* Servicekosten ca. € 150,- per maand;\n* Oplevering in overleg."
}
```

***

## 📦 Key Features

- ⚡ High-speed CheerioCrawler engine
- 🔁 Automatic pagination handling
- 🧠 Smart LIST → DETAIL pipeline
- 🏠 Residential + 🏢 Commercial support
- 🖼️ Full image extraction
- 📊 Structured real estate schema
- 🛡️ Proxy + anti-block ready
- 📍 Clean normalized JSON output

***

## 💡 Use Cases

- Real estate analytics platform
- Investment research
- Lead generation (agents / brokers)
- Market price tracking
- Data pipelines (Airflow / ETL)
- AI training datasets

***

## ⚠️ Notes

- Respect Funda terms of use
- Use proxy for large-scale scraping
- Residential and commercial sites are handled automatically

# Actor input Schema

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

Funda search URLs (e.g., https://www.fundainbusiness.nl/alle-bedrijfsaanbod/heel-nederland/)

## `maxItems` (type: `integer`):

Maximum number of listings to collect. Set to 0 for unlimited.

## `proxy` (type: `object`):

Residential proxies are mandatory for Funda to avoid blocks and interstitials.

## Actor input object example

```json
{
  "startUrls": [
    {
      "url": "https://www.fundainbusiness.nl/alle-bedrijfsaanbod/heel-nederland/"
    }
  ],
  "maxItems": 10,
  "proxy": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ]
  }
}
```

# Actor output Schema

## `datasetItems` (type: `string`):

Scraped Funda listings

## `datasetUrl` (type: `string`):

No description

# 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 = {
    "startUrls": [
        {
            "url": "https://www.fundainbusiness.nl/alle-bedrijfsaanbod/heel-nederland/"
        }
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("ahmed_jasarevic/funda-hybrid-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 = { "startUrls": [{ "url": "https://www.fundainbusiness.nl/alle-bedrijfsaanbod/heel-nederland/" }] }

# Run the Actor and wait for it to finish
run = client.actor("ahmed_jasarevic/funda-hybrid-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 '{
  "startUrls": [
    {
      "url": "https://www.fundainbusiness.nl/alle-bedrijfsaanbod/heel-nederland/"
    }
  ]
}' |
apify call ahmed_jasarevic/funda-hybrid-scraper --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Funda.nl & FundainBusiness.nl Scraper (Search + Detail)",
        "description": "High-performance hybrid scraper for Funda.nl (residential properties: apartments, houses) and FundainBusiness.nl (commercial real estate).",
        "version": "1.0",
        "x-build-id": "MJtWreqZalNut04RN"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/ahmed_jasarevic~funda-hybrid-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-ahmed_jasarevic-funda-hybrid-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/ahmed_jasarevic~funda-hybrid-scraper/runs": {
            "post": {
                "operationId": "runs-sync-ahmed_jasarevic-funda-hybrid-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/ahmed_jasarevic~funda-hybrid-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-ahmed_jasarevic-funda-hybrid-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",
                "required": [
                    "startUrls"
                ],
                "properties": {
                    "startUrls": {
                        "title": "Start URLs",
                        "type": "array",
                        "description": "Funda search URLs (e.g., https://www.fundainbusiness.nl/alle-bedrijfsaanbod/heel-nederland/)",
                        "items": {
                            "type": "object",
                            "required": [
                                "url"
                            ],
                            "properties": {
                                "url": {
                                    "type": "string",
                                    "title": "URL of a web page",
                                    "format": "uri"
                                }
                            }
                        }
                    },
                    "maxItems": {
                        "title": "Max Items to Scrape",
                        "minimum": 0,
                        "type": "integer",
                        "description": "Maximum number of listings to collect. Set to 0 for unlimited.",
                        "default": 10
                    },
                    "proxy": {
                        "title": "Proxy configuration",
                        "type": "object",
                        "description": "Residential proxies are mandatory for Funda to avoid blocks and interstitials.",
                        "default": {
                            "useApifyProxy": true,
                            "apifyProxyGroups": [
                                "RESIDENTIAL"
                            ]
                        }
                    }
                }
            },
            "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
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
