# Findainbusiness Scraper (`ivanvs/findainbusiness-scraper`) Actor

Extract data from fundainbusiness.nl for data on thousands of listings. Scrape listing location, extract descriptions, images, prices, addresses, names, and all other listing details. Unlimited and extremely fast!

- **URL**: https://apify.com/ivanvs/findainbusiness-scraper.md
- **Developed by:** [Gen First](https://apify.com/ivanvs) (community)
- **Categories:** Real estate, Automation, E-commerce
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 1 bookmarks
- **User rating**: No ratings yet

## Pricing

from $1.50 / 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.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

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

## What's an Apify Actor?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
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.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — 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 in Business Scraper

Turn any [fundainbusiness.nl](https://www.fundainbusiness.nl/) search page, object page or project page into
clean, structured JSON — no login, no cookies, and no proxy setup required. Funda in Business
Scraper collects Dutch **commercial** real-estate listings (horeca, kantoor, bedrijfsruimte,
belegging) and exports them to JSON, CSV, Excel, XML, or HTML Table.

### What does Funda in Business Scraper do?

- 🔎 **Scrapes search & category pages** — paste any Funda in Business search URL and collect every
  listing on it. Pagination is automatic: the scraper follows the site's own "next page" link, so it
  never stops early and never invents pages that don't exist.
- 📄 **Scrapes individual objects** — paste a single object URL to get its full detail record.
- 🏗️ **Expands multi-unit projects** — a development page is unpacked into a full record for each
  object it holds, whether you paste it directly or it turns up inside a search page.
- 🏢 **Covers every commercial segment** — horeca, kantoor, bedrijfsruimte, belegging, and more, for
  both sale (`koop`) and rent (`huur`).
- 🧾 **Returns rich structured data** — address with coordinates, price, the complete Dutch
  **Kenmerken** table, investment figures, photos, floor plans, 360° panoramas, videos, broker
  details, and the description in both plain text and raw HTML.
- 🎯 **Per-URL limits** — set a global `maxRecords` budget and, optionally, a separate
  `maxResultsPerSearch` cap for each individual URL.
- 🌐 **Proxy preconfigured** — uses the Apify **residential** proxy out of the box.
- 🔓 **No login or session cookies** required.
- 📤 **Export anywhere** — JSON, CSV, Excel, XML, HTML Table, or the Apify API.

### About Funda in Business

Funda in Business is the commercial arm of funda.nl, the leading Dutch property marketplace. It
lists business real estate across the Netherlands — hospitality venues, offices, industrial and
retail space, and investment properties — making it a primary source of Dutch commercial property
and pricing data.

### What can you do with this data?

- **Price & rent monitoring** — track asking prices and rents per city, segment, or broker over time.
- **Investment & yield analysis** — use the gross rental income, tenant count, and let area from the
  `Beleggingsobject` block alongside the asking price.
- **Market & availability tracking** — watch what comes on and off the market in a given city or
  category.
- **Broker coverage** — see which agencies list what, and where.
- **Dataset building** — feed structured listing data into analytics, dashboards, or ML pipelines.

### How to use Funda in Business Scraper

1. Open the actor on Apify.
2. Add one or more Funda in Business URLs to the **urls** field (search pages, object pages, project
   pages, or any mix of them).
3. Optionally give any entry its own `maxResultsPerSearch` cap.
4. Set **maxRecords** to cap how many listings to collect in total (default `100`).
5. Click **Start**, then download the results in JSON, CSV, Excel, XML, or HTML Table.

#### Input parameters

| Input parameter              | Description                                                                      | Required | Default value              |
| ---------------------------- | -------------------------------------------------------------------------------- | -------- | -------------------------- |
| `urls`                       | List of URLs to scrape. Each entry is an object: `{ url, maxResultsPerSearch? }` | `true`   | —                          |
| `urls[].url`                 | A Funda in Business search, object or project URL                                | `true`   | —                          |
| `urls[].maxResultsPerSearch` | Cap for this URL only. Ignored on object URLs (one object is always one record)  | `false`  | falls back to `maxRecords` |
| `maxRecords`                 | Maximum total number of records across all URLs                                  | `false`  | `100`                      |

Only `https://www.fundainbusiness.nl/` URLs are accepted — any other host is skipped with a warning
in the run log.

#### Supported input URLs

Funda in Business Scraper accepts three kinds of URLs:

- **Search / category URL** — collects every listing on the page and paginates automatically:
  - `https://www.fundainbusiness.nl/horeca/amsterdam/`
  - `https://www.fundainbusiness.nl/belegging/amsterdam/`
  - Already-paginated URLs such as `https://www.fundainbusiness.nl/horeca/amsterdam/p2/` work too —
    the scraper simply continues from there.
- **Object URL** — collects one listing's full detail record. Funda uses two URL shapes and both are
  supported:
  - `https://www.fundainbusiness.nl/belegging/amsterdam/object-44567225-haarlemmerdijk-57-1/`
  - `https://www.fundainbusiness.nl/horeca/nassaukade-377/object-44421168/`
- **Project URL** — a multi-unit development, which holds several separate objects. The project
  itself is not a listing, so it produces no record of its own; the scraper collects a full detail
  record for each object inside it:

  - `https://www.fundainbusiness.nl/alle-bedrijfsaanbod/amsterdam/project-89962976-bos-en-lommerplantsoen/`

  Funda also mixes project pages into ordinary search results, where they are expanded the same way.

You can mix all three URL types in the same `urls` list. Every output record echoes the input entry
that produced it via `original_request_url` and `input_params`, so results from multiple URLs stay
easy to tell apart.

### Examples

#### Input

Scrape 20 listings from a search URL:

```json
{
  "urls": [{ "url": "https://www.fundainbusiness.nl/horeca/amsterdam/" }],
  "maxRecords": 20
}
```

Scrape two searches with a separate cap for each, plus one specific object:

```json
{
  "urls": [
    { "url": "https://www.fundainbusiness.nl/horeca/amsterdam/", "maxResultsPerSearch": 10 },
    { "url": "https://www.fundainbusiness.nl/kantoor/utrecht/", "maxResultsPerSearch": 5 },
    { "url": "https://www.fundainbusiness.nl/horeca/nassaukade-377/object-44421168/" }
  ],
  "maxRecords": 50
}
```

#### Output

> In the sample below the broker's name, phone number, and links are replaced with placeholders, and
> the long text, photo, and feature lists are trimmed for readability. A real run returns them in
> full.

```json
{
  "id": "44421168",
  "global_id": 8076705,
  "url": "https://www.fundainbusiness.nl/belegging/amsterdam/object-44421168-nassaukade-377/",
  "title": "Nassaukade 377",
  "object_type": "Overig",
  "offering_type": "horeca",
  "transaction_type": "koop",
  "status": "Beschikbaar",
  "promo_label": "Blikvanger",
  "promo_description": "Volledig verhuurd boetiekhotel op toplocatie in Amsterdam",
  "promo_description_html": "<span class=\"object-promolabel__description\">Volledig verhuurd boetiekhotel op toplocatie in Amsterdam</span>",
  "description": "Op een uitstekende locatie aan de Nassaukade in Amsterdam wordt dit volledig verhuurde boetiekhotel met 15 hotelkamers aangeboden. Het hotel is gevestigd in een karakteristiek hoekpand dat in de periode 2012-2014 ingrijpend is getransformeerd en volledig is verbouwd tot hotel.\n\n… (truncated)",
  "description_html": "<div class=\"object-description-body\" data-object-description-body>Op een uitstekende locatie aan de Nassaukade in Amsterdam wordt dit volledig verhuurde boetiekhotel met 15 hotelkamers aangeboden. <br> <br>LOCATIE <br> <br>… (truncated)</div>",
  "address": {
    "title": "Nassaukade 377",
    "subtitle": "1054 AC Amsterdam",
    "street": "Nassaukade",
    "house_number": "377",
    "postcode": "1054 AC",
    "city": "Amsterdam",
    "neighborhood": "Helmersbuurt-Oost",
    "municipality": "amsterdam",
    "province": "Noord-Holland",
    "country": "Nederland",
    "latitude": 52.36512,
    "longitude": 4.878433
  },
  "price_info": {
    "selling_price": "€ 4.450.000 k.k.",
    "rental_price": null,
    "numeric_price": 4450000,
    "currency": "EUR"
  },
  "floor_area": "411 m²",
  "plot_area": null,
  "energy_label": "A+",
  "construction_year": "1892",
  "construction_type": "Bestaande bouw",
  "main_function": "Belegging",
  "possible_functions": "Horeca",
  "number_of_floors": "5 bouwlagen",
  "photos": [
    "https://cloud.funda.nl/valentina_media/231/803/800_1440x960.jpg",
    "https://cloud.funda.nl/valentina_media/231/803/824_1440x960.jpg",
    "https://cloud.funda.nl/valentina_media/231/803/827_1440x960.jpg",
    "https://cloud.funda.nl/valentina_media/231/803/842_1440x960.jpg",
    "https://cloud.funda.nl/valentina_media/231/803/811_1440x960.jpg"
  ],
  "floor_plans": [
    "https://cloud.funda.nl/valentina_media/231/803/861_plattegrond_600_450.png",
    "https://cloud.funda.nl/valentina_media/231/803/862_plattegrond_600_450.png",
    "https://cloud.funda.nl/valentina_media/231/803/863_plattegrond_600_450.png"
  ],
  "photos360": [
    "https://www.fundainbusiness.nl/panorama/44421168/231803852/",
    "https://www.fundainbusiness.nl/panorama/44421168/231803853/",
    "https://www.fundainbusiness.nl/panorama/44421168/231803854/"
  ],
  "videos": ["https://customer-vzk8jgcsaz84e8sb.cloudflarestream.com/215d32af98f1db67e1ef1cc66e54f656/manifest/video.m3u8"],
  "features": [
    {
      "title": "Overdracht",
      "value": null,
      "subfeatures": [
        { "title": "Vraagprijs", "value": "€ 4.450.000 kosten koper", "subfeatures": null },
        { "title": "Status", "value": "Beschikbaar", "subfeatures": null },
        { "title": "Aanvaarding", "value": "In overleg", "subfeatures": null }
      ]
    },
    {
      "title": "Bouw",
      "value": null,
      "subfeatures": [
        { "title": "Hoofdfunctie", "value": "Belegging", "subfeatures": null },
        { "title": "Mogelijke functie(s)", "value": "Horeca", "subfeatures": null },
        { "title": "Soort bouw", "value": "Bestaande bouw", "subfeatures": null },
        { "title": "Bouwjaar", "value": "1892", "subfeatures": null }
      ]
    },
    {
      "title": "Beleggingsobject",
      "value": null,
      "subfeatures": [
        { "title": "Bruto huuropbrengst", "value": "€ 233.197 per jaar", "subfeatures": null },
        { "title": "Huurders", "value": "1 huurder", "subfeatures": null },
        { "title": "Verhuurd", "value": "411 m²", "subfeatures": null }
      ]
    }
  ],
  "investment": {
    "gross_rental_income": "€ 233.197 per jaar",
    "number_of_tenants": "1 huurder",
    "rented_area": "411 m²"
  },
  "broker": {
    "id": "000",
    "name": "Example Vastgoed Makelaars",
    "association_code": "nvm",
    "url": "https://www.fundainbusiness.nl/makelaar/000-example-vastgoed-makelaars/",
    "logo_url": "https://cloud.funda.nl/valentina_media/000/000/000_720x720.jpg",
    "phone_number": "(+31) 00 000 00 00",
    "contact_url": "https://www.fundainbusiness.nl/makelaar-contact/?listingId=00000000"
  },
  "original_request_url": "https://www.fundainbusiness.nl/horeca/amsterdam/",
  "input_params": {
    "url": "https://www.fundainbusiness.nl/horeca/amsterdam/",
    "max_results_per_search": 5
  }
}
```

### Output formats

Every scraped listing is one record in the `ad_details` dataset. After a run finishes you can
download the data as **JSON, CSV, Excel, XML, or HTML Table**, or pull it via the Apify API. The
dataset's `overview` view gives you a quick table of ID, address, city, price, and URL.

### ❓ FAQ

#### Do I need proxies to scrape Funda in Business?

No. The actor is preconfigured to use the Apify residential proxy in the Netherlands — you don't need
to set anything up.

#### Do I need to write code?

No. Funda in Business Scraper is a no-code tool: paste your URLs, set `maxRecords`, and run.

#### Can I scrape a single object or a whole city?

Both. Provide a search URL to collect many listings across all its pages, or an object URL to collect
one listing's full record. You can mix both in the same `urls` list.

#### How many listings can I scrape?

Use `maxRecords` to set the total cap (default `100`). To split that budget between URLs, give each
entry its own `maxResultsPerSearch` — for example 10 from Amsterdam and 5 from Utrecht within a
budget of 50.

#### Does it handle rentals as well as sales?

Yes. Sale listings fill `price_info.selling_price` and rentals fill `price_info.rental_price`, so you
can tell the two apart from a single field.

#### Do I get photos and floor plans?

Yes — full-size photo URLs, floor-plan images, 360° panorama viewer links, and video stream URLs,
each as its own array.

#### What export formats are available?

JSON, CSV, Excel, XML, and HTML Table — plus programmatic access via the Apify API.

#### Is it legal to scrape Funda in Business?

Scraping publicly available data is generally permitted, but you are responsible for how you use it.
Avoid collecting or storing personal data beyond what your use case requires, and comply with
applicable laws (including the GDPR) and funda's terms. Consult legal counsel if you're unsure.

### Support

For custom or simplified outputs, or to report a bug, contact the developer at
**support (at) getmediumdata.com** or open an issue.

# Actor input Schema

## `maxRecords` (type: `integer`):

Maximum total number of records to be scraped across all URLs

## `urls` (type: `array`):

List of URLs from Funda in business (https://www.fundainbusiness.nl/) that needs to be scraped

## Actor input object example

```json
{
  "maxRecords": 10,
  "urls": [
    {
      "url": "https://www.fundainbusiness.nl/horeca/amsterdam/",
      "maxResultsPerSearch": 10
    }
  ]
}
```

# Actor output Schema

## `results` (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 = {
    "maxRecords": 10,
    "urls": [
        {
            "url": "https://www.fundainbusiness.nl/horeca/amsterdam/",
            "maxResultsPerSearch": 10
        }
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("ivanvs/findainbusiness-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 = {
    "maxRecords": 10,
    "urls": [{
            "url": "https://www.fundainbusiness.nl/horeca/amsterdam/",
            "maxResultsPerSearch": 10,
        }],
}

# Run the Actor and wait for it to finish
run = client.actor("ivanvs/findainbusiness-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 '{
  "maxRecords": 10,
  "urls": [
    {
      "url": "https://www.fundainbusiness.nl/horeca/amsterdam/",
      "maxResultsPerSearch": 10
    }
  ]
}' |
apify call ivanvs/findainbusiness-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,ivanvs/findainbusiness-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/cLffZIWYuOmlc25ga/builds/5vTMivRiCi6g7P1pQ/openapi.json
