# Immoweb.be Scraper \[$0.9💰] | Belgian Property | EPC | Agency (`ahmed_jasarevic/immoweb-be-scraper`) Actor

Extract Belgian real estate listings from Immoweb.be with prices, EPC ratings, and agency contacts

- **URL**: https://apify.com/ahmed\_jasarevic/immoweb-be-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, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.90 / 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/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

## Immoweb.be Scraper

Scrape property listings from Belgium's largest real estate platform. Extract structured data from thousands of Immoweb listings including prices, EPC ratings, agency contacts, and property details for market analysis, lead generation, and investment research.

### Use Cases

- **Belgian Real Estate Market Analysis** — Track property prices across Brussels, Antwerp, Ghent, and other regions. Monitor supply trends and identify investment opportunities in the Belgian housing market.
- **Agency Lead Generation** — Collect agency names, contact details, and listing volumes to build B2B sales pipelines for real estate services, software, and marketing.
- **EPC Energy Rating Research** — Analyze Energy Performance Certificate data to identify properties with high/low efficiency for green investment strategies or renovation targeting.
- **Rental Market Monitoring** — Compare rental yields across provinces and cities to evaluate buy-to-let investment potential in Belgium.
- **Price Monitoring & Alerts** — Track price changes on listings over time to spot negotiation opportunities or market shifts.
- **Full Belgium Scan** — Comprehensive extraction of all property types across Belgian provinces for macro-level market research.

### What You Get

Each dataset item includes:

| Field | Description |
|-------|-------------|
| `id` | Immoweb listing ID |
| `url` | Direct link to the listing |
| `title` | Property headline |
| `transactionType` | FOR\_SALE or FOR\_RENT |
| `propertyType` | house, apartment, apartment-building, etc. |
| `price` | Listed price (numeric) |
| `bedrooms` | Number of bedrooms |
| `area` | Living area in m² |
| `landArea` | Total plot area in m² |
| `epcScore` | Energy Performance Certificate rating (A–G) |
| `agency` | Agency name and contact info |
| `postalCode` | Postal code of the property |
| `city` | City name |
| `province` | Belgian province |
| `latitude` | Geographic latitude |
| `longitude` | Geographic longitude |
| `images` | Array of listing image URLs |
| `description` | Full property description |
| `createdAt` | Listing creation date |
| `modifiedAt` | Last modification date |

### Input

| Parameter | Type | Default | Description |
|-----------|------|---------|-------------|
| `searchUrls` | array | — | Custom Immoweb search URLs to scrape (overrides other filters) |
| `transactionType` | enum | FOR\_SALE | `FOR_SALE`, `FOR_RENT`, or `BOTH` |
| `propertyTypes` | array | `["house", "apartment"]` | Property types: house, apartment, apartment-building, office, commercial, industry, land, other |
| `location` | string | — | Belgian city or province (e.g. "brussels/province", "antwerp/city") |
| `maxItems` | integer | 60 | Maximum number of listings to extract |
| `maxPagesPerSearch` | integer | 3 | Max search result pages per query |
| `fetchDetailPages` | boolean | true | Visit each listing page for full details |
| `maxRequestsPerCrawl` | integer | 500 | Total HTTP requests cap |
| `maxConcurrency` | integer | 10 | Parallel requests limit |
| `proxyConfiguration` | object | — | Apify proxy settings |

### Output Example

```json
{
  "id": "10665270",
  "url": "https://www.immoweb.be/en/property/house/brussels/10665270",
  "title": "Spacious family house with garden in Uccle",
  "transactionType": "FOR_SALE",
  "propertyType": "house",
  "price": 895000,
  "bedrooms": 4,
  "area": 220,
  "landArea": 350,
  "epcScore": "C",
  "agency": {
    "name": "Sotheby's International Realty",
    "phone": "+32 2 XXX XX XX",
    "email": "info@sothebysrealty.be"
  },
  "postalCode": "1180",
  "city": "Uccle",
  "province": "Brussels",
  "latitude": 50.7999,
  "longitude": 4.3332
}
```

### Task Templates

Pre-configured tasks are available for common use cases:

| Task | Description |
|------|-------------|
| `imbe-brussels-sale` | Properties for sale in Brussels |
| `imbe-brussels-rent` | Rentals in Brussels |
| `imbe-antwerp-sale` | Properties in Antwerp |
| `imbe-gent-rent` | Gent rental market |
| `imbe-energy-analysis` | EPC energy analysis data |
| `imbe-agency-leads` | Agency lead generation |
| `imbe-price-monitor` | Price monitoring |
| `imbe-full-scan` | Full Belgium scan |

### Integrations

- **Google Sheets** — Export dataset to a spreadsheet for team collaboration.
- **Zapier / Make** — Trigger automations when new listings appear.
- **CRM Systems (HubSpot, Salesforce)** — Push agency contacts as leads.
- **Data Warehouses (BigQuery, Snowflake)** — Load structured property data for analytics.
- **Custom Dashboards (Retool, Streamlit)** — Build real-time market dashboards from dataset output.

### AI Agents

This Actor is compatible with AI agent workflows:

- **Research Agents** — Feed Belgian property data into LLM pipelines for market summaries, price predictions, and trend analysis.
- **Lead Qualification Agents** — Automatically score and route agency contacts based on listing volume and property types.
- **Monitoring Agents** — Schedule recurring runs and compare datasets to detect price drops or new inventory.

### Related Actors

| Actor | Platform | Description |
|-------|----------|-------------|
| [Immowelt Scraper](https://apify.com) | Germany, Austria, Switzerland | Scrape property listings from Immowelt.de |
| [ImmobilienScout24 Scraper](https://apify.com) | Germany | Extract listings from Germany's largest property portal |
| [Zillow Scraper](https://apify.com) | USA | US real estate data extraction |

### Frequently Asked Questions

**How many listings can I scrape per run?**
By default, the Actor extracts up to 60 listings. Increase `maxItems` for larger batches. For a full Belgium scan, set `maxPagesPerSearch` higher and use `maxItems: 1000+`.

**Do I need a proxy?**
A proxy is recommended to avoid rate limiting. Residential proxies work best for Belgian targets.

**Can I filter by price range or EPC score?**
Yes. Use `searchUrls` to pass pre-filtered Immoweb search URLs with your desired price and EPC criteria.

**What data is available for rent vs. sale listings?**
Both transaction types return the same core fields. Rental listings include monthly price; sale listings include asking price.

**Is this compliant with Immoweb's terms of service?**
This Actor scrapes publicly available listing data. Users are responsible for ensuring their usage complies with applicable terms of service and data protection regulations.

### SEO Keywords

Immoweb scraper, Belgian property data, Belgium real estate, Immoweb.be, Brussels apartments, Antwerp property, Belgian housing market, EPC rating Belgium, property listings Belgium, real estate investment Belgium, rental market Belgium, property price data, Belgian real estate API, flood zone Belgium, agency contact data, Immoweb API, scrape Immoweb, Belgian property scraper, Brussels real estate, Ghent apartments, Leuven property, Belgian mortgage data, property investment Belgium, real estate automation Belgium, Belgian housing data

### Legal Disclaimer

This Actor is provided as-is for legitimate data extraction purposes. Users must comply with Immoweb's Terms of Service, the Belgian Data Protection Act, and GDPR. Do not use extracted data for unsolicited communications without proper consent. The developer assumes no liability for misuse.

# Actor input Schema

## `searchUrls` (type: `array`):

Optional. Full Immoweb search-results or classified URLs to start from. If provided, these override the structured options below. Example: https://www.immoweb.be/en/search-results/house/for-sale/brussels/province?countries=BE

## `transactionType` (type: `string`):

Scrape listings for sale, for rent, or both.

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

Immoweb property-type slugs used in search URLs. Allowed: house, apartment, apartment-block, building, land, mixed-use-building, office, commercial, industry, garage, other.

## `location` (type: `string`):

Optional location path segment: 'brussels/province', 'gent/9000', 'ixelles/1050' … Leave empty for all of Belgium.

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

Maximum number of listings to scrape in this run.

## `maxPagesPerSearch` (type: `integer`):

Each search page returns up to 30 listings; this caps how many result pages are followed per search/type combination.

## `fetchDetailPages` (type: `boolean`):

When true (recommended), each listing's detail page is opened to extract EPC score, build year, flood-zone info, full descriptions and agency contact details. When false, only search-level data is emitted (faster & cheaper).

## `maxRequestsPerCrawl` (type: `integer`):

Hard limit on total HTTP requests for the whole run.

## `maxConcurrency` (type: `integer`):

Parallel requests. Higher = faster; residential proxy spreads load across IPs.

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

Immoweb is protected by Cloudflare and blocks datacenter IPs — keep the Apify RESIDENTIAL proxy enabled.

## Actor input object example

```json
{
  "searchUrls": [],
  "transactionType": "FOR_SALE",
  "propertyTypes": [
    "house",
    "apartment"
  ],
  "location": "",
  "maxItems": 60,
  "maxPagesPerSearch": 3,
  "fetchDetailPages": true,
  "maxRequestsPerCrawl": 500,
  "maxConcurrency": 10,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ]
  }
}
```

# 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 = {
    "searchUrls": [],
    "propertyTypes": [
        "house",
        "apartment"
    ],
    "location": ""
};

// Run the Actor and wait for it to finish
const run = await client.actor("ahmed_jasarevic/immoweb-be-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 = {
    "searchUrls": [],
    "propertyTypes": [
        "house",
        "apartment",
    ],
    "location": "",
}

# Run the Actor and wait for it to finish
run = client.actor("ahmed_jasarevic/immoweb-be-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 '{
  "searchUrls": [],
  "propertyTypes": [
    "house",
    "apartment"
  ],
  "location": ""
}' |
apify call ahmed_jasarevic/immoweb-be-scraper --silent --output-dataset

```

## MCP server setup

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