# Immoweb Scraper: Belgian Real Estate Listings, Prices & €/m² (`dltik/immoweb-scraper`) Actor

Scrape Immoweb.be Belgian property listings (sale & rent): price, €/m², surface, land, bedrooms, type, city, postal code, province, GPS, agency. Reads the internal JSON API — no browser, no proxy. Filter by type, price, bedrooms, province, postal code.

- **URL**: https://apify.com/dltik/immoweb-scraper.md
- **Developed by:** [Walid](https://apify.com/dltik) (community)
- **Categories:** Real estate, Business, Lead generation
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

$5.00 / 1,000 listing scrapeds

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

## Immoweb Scraper: Belgian Real Estate Listings, Prices & €/m²

> Scrape Immoweb. **$0.005 per listing-scraped**.

⭐ **Bookmark this Immoweb Scraper** — Apify ranks actors by bookmarks, so it directly helps the visibility of this actor on the Apify Store.

### What is the Immoweb Scraper?

The **Immoweb Scraper** is an Apify actor that scrape immoweb.be belgian property listings (sale & rent): price, €/m², surface, land, bedrooms, type, city, postal code, province, gps, agency. reads the internal json api — no browser, no proxy. filter by type, price, bedrooms, province, postal code.. Feed it queries, get back clean JSON. No browser needed — pure HTTP. The Immoweb Scraper is built to run at scale: batch up to thousands of inputs per run, pay only for what you get.

### Use cases

- **Real estate valuation** — auto-compute fair price using nearby comparables.
- **Investor sourcing** — find every transaction under a price/m² threshold.
- **Notary / agent comparables** — generate price reports per neighborhood.
- **Energy compliance** — DPE class lookups for due diligence.
- **Mortgage / loan analysis** — verify declared property value vs market.

### Input

```json
{
  "transaction": "buy",
  "propertyTypes": [
    "example propertyTypes"
  ],
  "provinces": [
    "example provinces"
  ],
  "postalCodes": [
    "example postalCodes"
  ],
  "priceMin": 50,
  "priceMax": 50,
  "minBedrooms": 50,
  "surfaceMin": 50,
  "orderBy": "newest",
  "maxResults": 100,
  "proxyConfiguration": {
    "useApifyProxy": true
  },
  "customProxyUrl": ""
}
```

### Output

```json
{
  "id": "example_id",
  "title": "Example Immoweb Scraper record",
  "url": "https://target-source.example/record/123",
  "main_field": "extracted value",
  "secondary_field": "another extracted value"
}
```

### Pricing

**PAY\_PER\_EVENT — $0.005 per listing-scraped**. Failed runs are not charged.

### FAQ — Immoweb Scraper alternatives

**Why Immoweb Scraper on Apify vs writing it yourself?** Maintenance. APIs change. CAPTCHAs rotate. Anti-bot fingerprints update. This actor handles all that — you focus on the data.
**Can I run it from Python / Node / curl?** Yes. Use Apify's `run-sync-get-dataset-items` endpoint with your token, or the official Apify SDK.
**What about rate limits?** The actor handles backoff automatically. For high volume, queue runs sequentially or use Apify's run-pool feature.

***

⭐ **Found this Immoweb Scraper useful? Bookmark it** — Apify ranks actors by bookmarks, it's the strongest signal for Store visibility.

#### Related actors

- [ADEME DPE Scraper](https://apify.com/dltik/ademe-dpe-scraper) — 25M+ French energy diagnostics
- [DVF France Transactions](https://apify.com/dltik/dvf-france-transactions) — All FR real estate sales since 2014
- [Pige Immo FR](https://apify.com/dltik/pige-immo-fr-scraper) — Multi-source FR listings (LBC, SeLoger, PAP)

License: MIT · Author: [dltik](https://apify.com/dltik)

# Actor input Schema

## `transaction` (type: `string`):

Sale or rent.

## `propertyTypes` (type: `array`):

Filter by type: house, apartment. Empty = both.

## `provinces` (type: `array`):

Belgian provinces (e.g. \["brussels","antwerp","liege","east-flanders"]). Empty = all Belgium.

## `postalCodes` (type: `array`):

Belgian postal codes (e.g. \["1000","1200","2000"]). Overrides provinces when set.

## `priceMin` (type: `integer`):

Minimum price in euros (monthly rent if transaction=rent).

## `priceMax` (type: `integer`):

Maximum price in euros (monthly rent if transaction=rent).

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

Minimum number of bedrooms.

## `surfaceMin` (type: `integer`):

Minimum net habitable surface in m².

## `orderBy` (type: `string`):

Result order.

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

Maximum number of listings to return.

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

Immoweb needs no proxy. Configure one only for very large pulls.

## `customProxyUrl` (type: `string`):

Your own proxy URL (http://user:pass@host:port).

## Actor input object example

```json
{
  "transaction": "buy",
  "propertyTypes": [],
  "provinces": [],
  "postalCodes": [],
  "orderBy": "newest",
  "maxResults": 100
}
```

# Actor output Schema

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

All scraped Immoweb listings.

# 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 = {
    "propertyTypes": [],
    "provinces": [],
    "postalCodes": [],
    "maxResults": 100
};

// Run the Actor and wait for it to finish
const run = await client.actor("dltik/immoweb-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 = {
    "propertyTypes": [],
    "provinces": [],
    "postalCodes": [],
    "maxResults": 100,
}

# Run the Actor and wait for it to finish
run = client.actor("dltik/immoweb-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 '{
  "propertyTypes": [],
  "provinces": [],
  "postalCodes": [],
  "maxResults": 100
}' |
apify call dltik/immoweb-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,dltik/immoweb-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/dHjPi16msdHw2GXY9/builds/IQizSdoFz2qJI18CS/openapi.json
