# Immoscoop Scraper - Belgian Real Estate Listings (`studio-amba/immoscoop-scraper`) Actor

Scrape property listings from Immoscoop.be, a Belgian real estate aggregator. Extract prices, addresses, surfaces, EPC scores, bedrooms, bathrooms, images, and agency details. No login required. Supports sale and rental listings.

- **URL**: https://apify.com/studio-amba/immoscoop-scraper.md
- **Developed by:** [Studio Amba](https://apify.com/studio-amba) (community)
- **Categories:** Real estate
- **Stats:** 2 total users, 1 monthly users, 70.0% runs succeeded, NaN bookmarks
- **User rating**: No ratings yet

## Pricing

Pay per usage

This Actor is paid per platform usage. The Actor is free to use, and you only pay for the Apify platform usage, which gets cheaper the higher subscription plan you have.

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

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

## Immoscoop Scraper

Scrape real estate listings from [Immoscoop.be](https://www.immoscoop.be), a Belgian property aggregator. Extract property prices, locations, surfaces, EPC energy scores, images, and agency details — no login or cookies required.

### How to scrape Immoscoop data

1. Go to the [Immoscoop Scraper](https://apify.com/store) on the Apify Store.
2. Click **Try for free** to open the actor in Apify Console.
3. Enter a Belgian city name (e.g., `gent`, `brussel`, `antwerpen`) in the **Search Location** field.
4. Choose whether you want **For Sale** or **For Rent** listings.
5. Set the **Max Results** to control how many listings you want.
6. Click **Start** and wait for the run to complete.
7. Download your data in JSON, CSV, Excel, or any other format from the **Dataset** tab.

You can also provide direct Immoscoop.be URLs in the **Start URLs** field to scrape specific search results or individual property pages.

### Why use this actor?

Real estate professionals, data analysts, and property investors need structured data from Belgian property portals. Immoscoop.be aggregates listings from multiple agencies across Belgium, giving you a broad view of the market in one scrape. This actor extracts all key property attributes in a clean, structured format ready for analysis, comparison, or integration with your own tools.

### Features

- Scrapes both **sale** and **rental** listings
- Extracts detailed property specifications (bedrooms, bathrooms, surface, EPC)
- Collects all listing images
- Captures agency/broker contact information
- Handles pagination automatically
- No login, cookies, or authentication required
- Supports direct URL input for specific pages
- Default search query ensures the actor works even with empty input

### Input

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `searchQuery` | String | No | City or region to search (e.g., `gent`, `brussel`). Defaults to `gent`. |
| `startUrls` | Array | No | Direct Immoscoop.be search or property URLs. Overrides `searchQuery`. |
| `listingType` | String | No | `sale` (default) or `rent` |
| `maxResults` | Integer | No | Maximum listings to scrape (default: 100) |
| `proxyConfiguration` | Object | No | Proxy settings. Belgian residential proxies recommended. |

#### Input example

```json
{
    "searchQuery": "gent",
    "listingType": "sale",
    "maxResults": 50,
    "proxyConfiguration": {
        "useApifyProxy": true,
        "apifyProxyGroups": ["RESIDENTIAL"],
        "countryCode": "BE"
    }
}
````

### Output

Each result contains the following fields:

| Field | Type | Example |
|-------|------|---------|
| `title` | String | `"Appartement te koop"` |
| `price` | Number | `282500` |
| `currency` | String | `"EUR"` |
| `url` | String | `"https://www.immoscoop.be/te-koop/9000-gent/1137659"` |
| `listingType` | String | `"sale"` or `"rent"` |
| `propertyType` | String | `"appartement"`, `"huis"`, `"villa"`, etc. |
| `address` | String | `"Wilderoosstraat 46"` |
| `city` | String | `"Gent"` |
| `postalCode` | String | `"9000"` |
| `bedrooms` | Integer | `2` |
| `bathrooms` | Integer | `1` |
| `surface` | Number | `65` (m2) |
| `landSurface` | Number | `255` (m2) |
| `buildYear` | Integer | `1985` |
| `epcScore` | String | `"B"` |
| `epcValue` | Number | `186` (kWh/m2/year) |
| `imageUrl` | String | Main property image URL |
| `imageUrls` | Array | All property image URLs |
| `description` | String | Full property description text |
| `latitude` | Number | Geographic latitude |
| `longitude` | Number | Geographic longitude |
| `agencyName` | String | `"Herbert Lambrecht"` |
| `agencyAddress` | String | `"Dublinstraat 37, 9000 Gent"` |
| `listingId` | String | `"1137659"` |
| `scrapedAt` | String | `"2026-05-29T14:30:00.000Z"` |

### Example output

```json
{
    "title": "Appartement te koop in Wilderoosstraat 46 9000 Gent",
    "price": 282500,
    "currency": "EUR",
    "url": "https://www.immoscoop.be/te-koop/9000-gent/1137659",
    "listingType": "sale",
    "propertyType": "appartement",
    "address": "Wilderoosstraat 46",
    "city": "Gent",
    "postalCode": "9000",
    "bedrooms": 1,
    "bathrooms": 1,
    "surface": 65,
    "landSurface": null,
    "buildYear": null,
    "epcScore": "B",
    "epcValue": 186,
    "imageUrl": "https://images.immoscoop.be/cp-c653855c3bcbac8b46c6885506e90553.jpg",
    "imageUrls": [
        "https://images.immoscoop.be/cp-c653855c3bcbac8b46c6885506e90553.jpg",
        "https://images.immoscoop.be/cp-a1b2c3d4e5f6.jpg"
    ],
    "description": "Licht en rustig 1-slaapkamerappartement met terras in hartje Gent...",
    "latitude": null,
    "longitude": null,
    "agencyName": "Herbert Lambrecht",
    "agencyAddress": "Dublinstraat 37, 9000 Gent",
    "listingId": "1137659",
    "scrapedAt": "2026-05-29T14:30:00.000Z"
}
```

### How much does it cost to scrape Immoscoop?

This actor uses lightweight HTTP requests (CheerioCrawler), making it very efficient. Approximate costs:

| Results | Compute Units | Estimated Cost |
|---------|--------------|----------------|
| 100 | ~0.05 CU | ~$0.02 |
| 1,000 | ~0.5 CU | ~$0.25 |
| 5,000 | ~2.5 CU | ~$1.25 |

Actual costs depend on proxy usage. Residential proxies add to the cost but are recommended for reliability.

### Tips for best results

- **Use Belgian cities in Dutch**: Immoscoop uses Dutch city names (e.g., `gent` not `ghent`, `brussel` not `brussels`, `antwerpen` not `antwerp`).
- **Residential proxies**: For best reliability, use Belgian residential proxies. The actor works without proxies for small runs but may get blocked on larger scrapes.
- **Start URLs**: For targeted scraping, paste Immoscoop.be search URLs directly into the Start URLs field. This gives you full control over filters.
- **Rate limiting**: The actor includes built-in concurrency limits and retry logic to avoid overloading the site.

### Limitations

- Coordinates (latitude/longitude) are only available when the listing page includes map data.
- Some fields may be empty depending on what the listing agent provided.
- Data is scraped from the public website and may change without notice.
- The actor scrapes the Dutch (nl) version of the site.

### Changelog

- **v0.1** — Initial release. Supports search by city, sale/rent filtering, full detail extraction with pagination.

# Actor input Schema

## `searchQuery` (type: `string`):

City or region to search for properties, e.g., 'gent', 'brussel', 'antwerpen', 'brugge'. Defaults to 'gent' if empty.

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

Immoscoop.be search or property detail URLs. Overrides searchQuery if provided.

## `listingType` (type: `string`):

Search for properties for sale or for rent.

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

Maximum number of property listings to scrape.

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

Proxy settings. Belgian residential proxies recommended for best results.

## Actor input object example

```json
{
  "searchQuery": "gent",
  "startUrls": [
    {
      "url": "https://www.immoscoop.be/zoeken/te-koop/gent"
    }
  ],
  "listingType": "sale",
  "maxResults": 20,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ],
    "apifyProxyCountry": "BE"
  }
}
```

# 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 = {
    "searchQuery": "gent",
    "startUrls": [
        {
            "url": "https://www.immoscoop.be/zoeken/te-koop/gent"
        }
    ],
    "maxResults": 20,
    "proxyConfiguration": {
        "useApifyProxy": true,
        "apifyProxyGroups": [
            "RESIDENTIAL"
        ],
        "apifyProxyCountry": "BE"
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("studio-amba/immoscoop-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 = {
    "searchQuery": "gent",
    "startUrls": [{ "url": "https://www.immoscoop.be/zoeken/te-koop/gent" }],
    "maxResults": 20,
    "proxyConfiguration": {
        "useApifyProxy": True,
        "apifyProxyGroups": ["RESIDENTIAL"],
        "apifyProxyCountry": "BE",
    },
}

# Run the Actor and wait for it to finish
run = client.actor("studio-amba/immoscoop-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 '{
  "searchQuery": "gent",
  "startUrls": [
    {
      "url": "https://www.immoscoop.be/zoeken/te-koop/gent"
    }
  ],
  "maxResults": 20,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ],
    "apifyProxyCountry": "BE"
  }
}' |
apify call studio-amba/immoscoop-scraper --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Immoscoop Scraper - Belgian Real Estate Listings",
        "description": "Scrape property listings from Immoscoop.be, a Belgian real estate aggregator. Extract prices, addresses, surfaces, EPC scores, bedrooms, bathrooms, images, and agency details. No login required. Supports sale and rental listings.",
        "version": "0.1",
        "x-build-id": "4qigBue2B0rXbiO13"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/studio-amba~immoscoop-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-studio-amba-immoscoop-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/studio-amba~immoscoop-scraper/runs": {
            "post": {
                "operationId": "runs-sync-studio-amba-immoscoop-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/studio-amba~immoscoop-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-studio-amba-immoscoop-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": {
                    "searchQuery": {
                        "title": "Search Location",
                        "type": "string",
                        "description": "City or region to search for properties, e.g., 'gent', 'brussel', 'antwerpen', 'brugge'. Defaults to 'gent' if empty."
                    },
                    "startUrls": {
                        "title": "Start URLs",
                        "type": "array",
                        "description": "Immoscoop.be search or property detail URLs. Overrides searchQuery if provided.",
                        "items": {
                            "type": "object",
                            "required": [
                                "url"
                            ],
                            "properties": {
                                "url": {
                                    "type": "string",
                                    "title": "URL of a web page",
                                    "format": "uri"
                                }
                            }
                        }
                    },
                    "listingType": {
                        "title": "Listing Type",
                        "enum": [
                            "sale",
                            "rent"
                        ],
                        "type": "string",
                        "description": "Search for properties for sale or for rent.",
                        "default": "sale"
                    },
                    "maxResults": {
                        "title": "Max Results",
                        "minimum": 1,
                        "maximum": 10000,
                        "type": "integer",
                        "description": "Maximum number of property listings to scrape.",
                        "default": 100
                    },
                    "proxyConfiguration": {
                        "title": "Proxy Configuration",
                        "type": "object",
                        "description": "Proxy settings. Belgian residential proxies recommended for best results."
                    }
                }
            },
            "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
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
