Immoweb.be Belgium Property Scraper
Pricing
from $3.00 / 1,000 results
Immoweb.be Belgium Property Scraper
Immoweb scraper & API for Belgian real estate: search property for sale and rent and export address, price, bedrooms, area, EPC energy, property type, agent, photos and coordinates. Belgium property market data and real-estate lead generation β fast, no login.
Pricing
from $3.00 / 1,000 results
Rating
0.0
(0)
Developer
Haketa
Maintained by CommunityActor stats
0
Bookmarked
27
Total users
2
Monthly active users
a day ago
Last modified
Categories
Features
Share
Immoweb Scraper π§πͺ β Belgium Property Listings, Prices, EPC & Agency Data
Turn Immoweb.be β Belgium's #1 real estate marketplace with 200,000+ active listings β into a clean, structured property dataset. This Immoweb scraper extracts for-sale (for-sale) and for-rent (for-rent) properties across Brussels, Flanders (Vlaanderen), and Wallonia (Wallonie): listing ID, property subtype, title, price in EUR, bedrooms, living area (mΒ²), land surface, 4-digit Belgian postcode, city, auto-mapped province & region, GPS coordinates, high-resolution photo gallery URLs, agency name, and canonical listing URL β plus optional deep-detail enrichment (EPC / PEB energy score & kWh/mΒ²/year, heating type, construction year, building condition, faΓ§ade count, flood-zone flag, full description, agency phone/email/website, and days on market). No login, no coding.
Export your Belgian real estate dataset directly to JSON, CSV, Excel, XML, HTML, or via the Apify API for property investment underwriting, buy-to-let yield modeling, automated valuation models (AVMs), energy-transition analysis, and B2B real estate agency lead generation.
β‘ At a glance
| Feature | Details |
|---|---|
| Target platform | Immoweb.be β Belgium's largest real estate portal (200,000+ listings) |
| Transaction types | Properties For Sale (for-sale) and For Rent (for-rent) |
| Property categories | Houses & Apartments (house-and-apartment), Houses (house), Apartments (apartment), Land (land), Offices (office), Commercial (commercial), Garages (garage) |
| Geographic coverage | All 3 Belgian regions (Brussels, Flanders, Wallonia), all 10 provinces, 26 built-in city/province presets, custom location slugs, or Start URLs |
| Language support | English (en), French (fr), and Dutch (nl) |
| Detail enrichment | Fast search-index mode (scrapeDetails: false) + optional deep detail mode (scrapeDetails: true) for EPC, building specs & agency contacts |
| Pagination & scale | ~30 listings per page; unlocked multi-page pagination (maxPages: 0 auto/unlimited) with 100% listingId de-duplication |
| Output formats | JSON, CSV, Excel (XLSX), HTML, XML, RSS, and Apify REST API |
π Table of contents
- Why scrape Immoweb?
- What this Immoweb scraper does
- Use cases
- Input configuration
- Output & field reference
- Pagination & 1,000+ scale
- How to use
- Pro tips for Belgian real estate data
- FAQ
- Related scrapers
- Changelog
π Why scrape Immoweb?
Immoweb.be is the definitive source of truth for the Belgian housing and commercial property market. Every residential house, apartment, penthouse, studio, building plot, office, retail space, and garage listed by Belgian real estate agencies or private sellers appears on Immoweb first β spanning the Brussels-Capital Region, Flanders (Antwerp, East Flanders, West Flanders, Flemish Brabant, Limburg), and Wallonia (LiΓ¨ge, Namur, Hainaut, Walloon Brabant, Luxembourg).
However, Immoweb does not offer a public bulk export, and manual collection across trilingual URL paths and 4-digit postcodes does not scale. Furthermore, raw Immoweb listings only show a 4-digit postal code without normalized province or regional labels (Brussels vs. Flanders vs. Wallonia), making cross-regional analytics tedious.
This Immoweb data extractor automates the entire workflow: it paginates through search results, extracts rich property attributes directly from the search cards, normalizes every Belgian postcode to its exact province and region, optionally enriches each property with EPC energy ratings and agency contact details, and outputs a clean, de-duplicated dataset.
Key business outcomes
- π Build Belgian Automated Valuation Models (AVMs) & Comps β track asking prices (
price), living area (livingArea), land surface (landSurface), and β¬/mΒ² across Belgian municipalities and postcodes. - ποΈ Calculate buy-to-let rental yields β run paired
for-saleandfor-rentjobs for the same city or postcode to benchmark gross rental yields across Brussels, Antwerp, Ghent, Leuven, and LiΓ¨ge. - β‘ Analyze EPC / PEB energy-transition discounts β enable
scrapeDetails: trueto correlate EPC scores (A++toG) andepcValue(kWh/mΒ²/year) against asking prices ahead of Flanders' and Wallonia's mandatory renovation deadlines. - π― Generate Belgian real estate agency B2B leads β collect active real estate agencies (
agencyName,agencyPhone,agencyEmail,agencyWebsite) along with their live portfolio volume. - π Power expat relocation & PropTech portals β feed live English, French, or Dutch rental and sale listings near EU institutions, NATO HQ, or university hubs into custom dashboards and alert bots.
β¨ What this Immoweb scraper does
- β
No-code menu targeting or custom Start URLs β pick
propertyType,transactionType,location(Brussels, Antwerp, Ghent, Bruges, Leuven, Mechelen, Hasselt, Ostend, LiΓ¨ge, Namur, Charleroi, Mons, or any of the 10 provinces), price floor/ceiling, and minimum bedrooms β or paste any pre-filtered Immoweb search or classified URL intostartUrls. - β
Rich fast-mode extraction (
scrapeDetails: false) β extracts title, price (EUR), bedroom count, bathroom count, habitable living area (mΒ²), land surface (mΒ²), postcode, city, province, region, GPS latitude/longitude, up to 10 high-resolution CDN photos, and agency name straight from the search pages at high speed (~30 properties per request). - β
Optional deep-detail enrichment (
scrapeDetails: true) β visits each individual classified page to add EPC / PEB energy score (epcScore), energy consumption (epcValuein kWh/mΒ²/year),heatingType,buildYear,condition,facadecount,floodZoneflag, fulldescription,agencyPhone,agencyEmail,agencyWebsite,viewCount,bookmarkCount, anddaysOnMarket. - β
Automatic Belgian postcode β Region & Province mapping β maps every 4-digit Belgian postal code (
1000β9999) to its canonical Englishregion(Brussels,Flanders,Wallonia) andprovince(Antwerp,East Flanders,West Flanders,Flemish Brabant,Limburg,LiΓ¨ge,Namur,Hainaut,Walloon Brabant,Luxembourg). - β
Trilingual output (
en/fr/nl) β select English, French, or Dutch for property titles, descriptions, and URLs while keeping all field keys standardized. - β
Unlocked 1,000+ pagination & de-duplication β walks
?page=1, ?page=2, ?page=3β¦automatically (maxPages: 0auto/unlimited) and de-duplicates every record bylistingId.
π― Use cases
| Audience | How they use Immoweb data |
|---|---|
| π¦ Property Investors & Private Equity | Benchmark β¬/mΒ² pricing, spot undervalued postcodes, and track inventory velocity across Brussels, Flanders, and Wallonia. |
| πͺπΊ Expat Relocation & Corporate Housing | Filter apartments and houses for rent (for-rent) in Brussels, Leuven, Antwerp, and Waterloo with exact bedroom counts, prices, and GPS coordinates. |
| π± Energy & Sustainability Analysts | Quantify the green premium / brown discount between EPC A/B properties and EPC E/F/G renovation targets across Belgian provinces. |
| πΌ PropTech & Mortgage Brokers | Power consumer home-value estimators, price-drop trackers, and mortgage pre-qualification calculators with live Belgian property feeds. |
| π B2B SaaS & Agency Lead Generation | Extract agencyName, agencyPhone, agencyEmail, and agencyWebsite to pitch CRM, photography, staging, or marketing services to active Belgian realtors. |
π₯ Input configuration
Configure your run via the Apify Console menus or pass a JSON object via the API. Every parameter is optional β clicking Start with default settings runs a fast nationwide Belgium sample.
| Parameter | Type | Default | Description |
|---|---|---|---|
propertyType | string | "house-and-apartment" | Property category: "house-and-apartment", "house", "apartment", "land", "office", "commercial", "garage". |
transactionType | string | "for-sale" | Transaction mode: "for-sale" or "for-rent". |
location | string | "" (All Belgium) | Select from 26 built-in Belgian cities, districts, and provinces (e.g., "brussels/district", "antwerp/municipality", "ghent/municipality", "liege/province"), or leave empty for nationwide Belgium. |
language | string | "en" | Output language for titles, descriptions, and URLs: "en" (English), "fr" (FranΓ§ais), or "nl" (Nederlands). |
minPrice | integer | 0 | Minimum price in EUR (0 = no minimum). |
maxPrice | integer | 0 | Maximum price in EUR (0 = no maximum). |
minBedrooms | integer | 0 | Minimum number of bedrooms (0 = no minimum). |
scrapeDetails | boolean | false | Open each listing's detail page to also extract EPC energy score, heating type, build year, condition, faΓ§ades, flood zone, description, and agency phone/email. |
maxListings | integer | 0 (prefill 90) | Maximum total listings to collect (0 = unlimited). |
maxPages | integer | 0 | Maximum search result pages to crawl (~30 listings per page). Set 0 for automatic / unlimited pagination governed by maxListings. |
startUrls | array | [] | Advanced: paste one or more Immoweb search or classified listing URLs to scrape directly (overrides menu filters). |
locationCustom | string | "" | Advanced: custom Immoweb location slug (e.g., "knokke-heist/municipality", "waterloo/municipality") used when location is left on All of Belgium. |
proxyConfiguration | object | BE Residential | Proxy settings. Keep Apify Belgian (BE) Residential proxy enabled for reliable access. |
requestDelay | integer | 2000 | Politeness pause between page requests in milliseconds. |
Example 1 β 1,000+ Apartments for sale in Brussels & Antwerp (fast index mode)
{"propertyType": "apartment","transactionType": "for-sale","location": "brussels/district","language": "en","minPrice": 180000,"maxPrice": 750000,"minBedrooms": 2,"scrapeDetails": false,"maxListings": 1000,"maxPages": 0,"requestDelay": 1000,"proxyConfiguration": {"useApifyProxy": true,"apifyProxyGroups": ["RESIDENTIAL"],"apifyProxyCountry": "BE"}}
Example 2 β Houses for sale in Ghent with full EPC & agency contact enrichment
{"propertyType": "house","transactionType": "for-sale","location": "ghent/municipality","minBedrooms": 3,"scrapeDetails": true,"maxListings": 150,"maxPages": 0}
Example 3 β Scrape custom Immoweb search or listing URLs (startUrls)
{"startUrls": [{ "url": "https://www.immoweb.be/en/search/house-and-apartment/for-rent/leuven/municipality?countries=BE" },{ "url": "https://www.immoweb.be/en/search/house-and-apartment/for-rent/namur/municipality?countries=BE" }],"maxListings": 500,"maxPages": 0}
π€ Output & field reference
Every property is saved as a consistent, flat JSON object. Below is a real record from a verification run in fast mode (scrapeDetails: false):
{"listingId": "21958459","listingType": "for-sale","propertyType": "apartment","title": "Gerenoveerd 2 slp app + garage","price": 349000,"currency": "EUR","bedrooms": 2,"bathrooms": 1,"livingArea": 110,"landSurface": null,"postcode": "2600","city": "Berchem","province": "Antwerp","region": "Flanders","latitude": 51.1826499,"longitude": 4.4385601,"epcScore": null,"epcValue": null,"heatingType": null,"buildYear": null,"condition": null,"facade": null,"floodZone": null,"description": null,"agencyName": "Coprimmo ImmobiliΓ«n","agencyPhone": null,"agencyEmail": null,"agencyWebsite": null,"viewCount": null,"bookmarkCount": null,"daysOnMarket": null,"images": ["https://media-resize.immowebstatic.be/classifieds/0acac86c-bc9c-40b3-8052-d60c9e60e021/736x736/7c0c9b09e50b5d154425b3487c3dc5ac.jpg","https://media-resize.immowebstatic.be/classifieds/0acac86c-bc9c-40b3-8052-d60c9e60e021/736x736/774827b487af343f6d97d4efbc15e370.jpg"],"listingUrl": "https://www.immoweb.be/en/classified/apartment/for-sale/berchem/2600/21958459","searchUrl": "https://www.immoweb.be/en/search/apartment/for-sale/antwerp/municipality?countries=BE&page=1&orderBy=relevance","scrapedAt": "2026-11-02T00:04:35.135Z"}
Field reference by category
π·οΈ Listing identity & classification
| Field | Type | Coverage | Description |
|---|---|---|---|
listingId | string | π’ High (100%) | Unique numeric Immoweb classified ID (primary key used for de-duplication). |
listingType | string | π’ High (100%) | Transaction type: "for-sale" or "for-rent". |
propertyType | string | π’ High (100%) | Granular property subtype slug from the classified URL (apartment, house, villa, duplex, penthouse, flat-studio, town-house, building-plot, commercial-ground-floor, etc.). |
title | string | null | π’ High (~92%) | Property headline / title in the selected language. |
listingUrl | string | π’ High (100%) | Canonical URL to the property page on immoweb.be. |
searchUrl | string | π’ High (100%) | The search page URL that surfaced this property (or "direct" for direct classified URLs). |
scrapedAt | string | π’ High (100%) | ISO 8601 UTC timestamp of extraction. |
πΆ Pricing & property dimensions
| Field | Type | Coverage | Description |
|---|---|---|---|
price | number | null | π’ High (~99%) | Asking sale price or monthly rental price in EUR. |
currency | string | π’ High (100%) | Always "EUR". |
bedrooms | integer | null | π’ High (~90%) | Number of bedrooms (chambres / slaapkamers). |
bathrooms | integer | null | π‘ Conditional | Number of bathrooms (populated when exposed on the card or when scrapeDetails: true). |
livingArea | number | null | π’ High (~88%) | Net habitable surface (surface habitable / bewoonbare oppervlakte) in square meters (mΒ²). |
landSurface | number | null | π‘ Conditional | Total plot / land surface in mΒ² (populated for houses, villas, and building plots). |
π Belgian location, postcode & GPS
| Field | Type | Coverage | Description |
|---|---|---|---|
postcode | string | π’ High (100%) | 4-digit Belgian postal code (1000β9999). |
city | string | π’ High (100%) | Belgian municipality / locality name (e.g., "Brussels", "Berchem", "Waterloo", "Gent"). |
province | string | π’ High (100%) | Auto-mapped Belgian province (Brussels, Antwerp, East Flanders, West Flanders, Flemish Brabant, Limburg, LiΓ¨ge, Namur, Hainaut, Walloon Brabant, Luxembourg). |
region | string | π’ High (100%) | Auto-mapped Belgian region ("Brussels", "Flanders", or "Wallonia"). |
latitude | number | null | π’ High (~85%) | WGS84 decimal latitude (when the seller permits exact pin display). |
longitude | number | null | π’ High (~85%) | WGS84 decimal longitude (when the seller permits exact pin display). |
β‘ Energy (EPC / PEB), building specs & flood risk (scrapeDetails: true)
| Field | Type | Coverage | Description |
|---|---|---|---|
epcScore | string | null | π‘ Detail mode | Official EPC / PEB energy certificate letter (A++, A+, A, B, C, D, E, F, G). |
epcValue | number | null | π‘ Detail mode | Primary energy consumption in kWh/mΒ²/year. |
heatingType | string | null | π‘ Detail mode | Heating source (e.g., GAS, FUEL_OIL, ELECTRIC, HEAT_PUMP). |
buildYear | integer | null | π‘ Detail mode | Year of construction (constructionYear). |
condition | string | null | π‘ Detail mode | Building state (e.g., AS_NEW, GOOD, TO_BE_DONE_UP, TO_RENOVATE, JUST_RENOVATED). |
facade | integer | null | π‘ Detail mode | Number of building faΓ§ades (2 = terraced, 3 = semi-detached, 4 = detached). |
floodZone | boolean | null | π‘ Detail mode | true if located in a designated flood-risk zone, false if NON_FLOOD_ZONE. |
description | string | null | π‘ Detail mode | Full property description text in the chosen language (en / fr / nl). |
π€ Agency contacts, media & engagement
| Field | Type | Coverage | Description |
|---|---|---|---|
agencyName | string | null | π’ High (~92%) | Listing real estate agency or developer name (extracted right from the search card!). |
agencyPhone | string | null | π‘ Detail mode | Agency contact phone number (populated when scrapeDetails: true). |
agencyEmail | string | null | π‘ Detail mode | Agency contact email address (populated when scrapeDetails: true). |
agencyWebsite | string | null | π‘ Detail mode | Agency website URL (populated when scrapeDetails: true). |
viewCount | integer | null | π‘ Detail mode | Total listing views on Immoweb (scrapeDetails: true). |
bookmarkCount | integer | null | π‘ Detail mode | Number of users who saved the listing (scrapeDetails: true). |
daysOnMarket | integer | null | π‘ Detail mode | Days elapsed since the listing's creation date (scrapeDetails: true). |
images | array | null | π’ High (~95%) | Up to 10 high-resolution image URLs on media-resize.immowebstatic.be (included in fast mode!). |
π Pagination & 1,000+ scale
This Immoweb scraper is designed for both rapid market snapshots and deep 1,000+ property crawls:
- Unlocked
maxPages: 0default: WhenmaxPagesis0(the default), pagination is governed entirely by yourmaxListingstarget. SettingmaxListings: 1000automatically walks?page=1,?page=2,?page=3β¦ (~30 properties per page) across 34+ pages until 1,000 unique properties are saved. - Fast HTTP card-JSON extraction: On search pages, the actor extracts the complete embedded JSON payload attached to each property card β capturing 30 properties per page in ~1β2 seconds per page without needing to open individual property pages or launch a heavy browser unless fallback is required.
- 100%
listingIdde-duplication: Every property is tracked in an in-memoryseenIdsset by its canonical numericlistingId, guaranteeing 0 duplicate records across pages and multiplestartUrls.
βοΈ How to use
- Open the actor in the Apify Console.
- Choose your property & transaction filters β select
propertyType(e.g., Houses & Apartments, Apartments only, Houses only, Commercial),transactionType(For Sale or For Rent), andlocation(or paste custom URLs intostartUrls). - Choose fast mode vs. detail mode β keep
scrapeDetails: falsefor fast, high-volume pricing/location/photo extraction, or enablescrapeDetails: truewhen you need EPC scores, building specs, and agency phone/email contacts. - Set
maxListingsβ e.g.,90for a quick test,1000for a deep regional crawl, or0for unlimited. - Click Start β keep the default Belgian (
BE) Residential proxy enabled. - Export or integrate β download your dataset as JSON, CSV, Excel (XLSX), HTML, or XML, or consume it via the Apify API, Google Sheets, Make, Zapier, or webhooks.
Calling via the Apify API (Python)
from apify_client import ApifyClientclient = ApifyClient("YOUR_APIFY_TOKEN")run = client.actor("haketa/immoweb-scraper").call(run_input={"propertyType": "house-and-apartment","transactionType": "for-sale","location": "brussels/district","minPrice": 200000,"maxPrice": 800000,"scrapeDetails": False,"maxListings": 500,"maxPages": 0,})for item in client.dataset(run["defaultDatasetId"]).iterate_items():print(item["listingId"], item["city"], f"β¬{item['price']}", f"{item['livingArea']}mΒ²")
Calling via the Apify API (Node.js)
import { ApifyClient } from 'apify-client';const client = new ApifyClient({ token: process.env.APIFY_TOKEN });const run = await client.actor('haketa/immoweb-scraper').call({propertyType: 'apartment',transactionType: 'for-rent',location: 'antwerp/municipality',maxPrice: 1800,minBedrooms: 2,scrapeDetails: false,maxListings: 300,maxPages: 0,});const { items } = await client.dataset(run.defaultDatasetId).listItems();console.log(`Extracted ${items.length} Belgian rental listings from Immoweb.`);
Belgian postcode β Region & Province mapping reference
| Postcode Range | Region | Province |
|---|---|---|
1000 β 1299 | Brussels | Brussels-Capital Region |
1300 β 1499 | Wallonia | Walloon Brabant (Brabant wallon) |
1500 β 1999, 3000 β 3499 | Flanders | Flemish Brabant (Vlaams-Brabant) |
2000 β 2999 | Flanders | Antwerp (Antwerpen) |
3500 β 3999 | Flanders | Limburg |
4000 β 4999 | Wallonia | LiΓ¨ge (Luik) |
5000 β 5999 | Wallonia | Namur (Namen) |
6000 β 6599, 7000 β 7999 | Wallonia | Hainaut (Henegouwen) |
6600 β 6999 | Wallonia | Luxembourg |
8000 β 8999 | Flanders | West Flanders (West-Vlaanderen) |
9000 β 9999 | Flanders | East Flanders (Oost-Vlaanderen) |
π‘ Pro tips for Belgian real estate data
- β‘ Use
scrapeDetails: falsefor 90% of analytics use cases: Because our parser decodes Immoweb's embedded search-card JSON, you already gettitle,price,bedrooms,bathrooms,livingArea,landSurface,postcode,city,province,region,latitude,longitude,images, andagencyNameat 30Γ the speed and a fraction of the proxy traffic of detail-page crawling. - π Copy-paste any complex Immoweb search URL into
startUrls: Want to filter by garden surface, terrace, EPC class AβC, new builds excluded, or a specific radius around a postcode? Build the exact filter onimmoweb.be, copy the browser URL, and paste it intostartUrls. - π Track price drops with daily schedules: Schedule a daily run with your target filters and compare
pricekeyed bylistingIdin your database or spreadsheet to spot motivated sellers the day they reduce their asking price.
β FAQ
Why is a Belgian (BE) Residential proxy recommended?
Immoweb restricts datacenter IP ranges. Using Apify's Belgian (BE) Residential proxy pool (configured by default) ensures clean, uninterrupted access to search and detail pages.
Why are epcScore, buildYear, description, or agencyPhone null in my dataset?
Those fields only exist on individual property detail pages. To keep default runs fast and low-cost, scrapeDetails defaults to false. Set scrapeDetails: true in your input to visit each property page and populate all EPC, building, description, and agency contact fields.
How many listings can I scrape in a single run?
With maxPages: 0 (the default) and maxListings: 1000 (or 0 for unlimited), you can collect hundreds to thousands of unique Belgian properties in a single run. To exceed Immoweb's per-search pagination window (~333 pages / ~10,000 listings), split your run across multiple provinces or municipalities in startUrls.
Does the scraper work for Flanders, Wallonia, and Brussels?
Yes. It covers all three Belgian regions and automatically maps every 4-digit Belgian postcode (1000β9999) to its canonical region (Brussels, Flanders, Wallonia) and province.
Can I scrape a single specific property listing?
Yes. Paste one or more /classified/... URLs directly into startUrls β the actor will automatically fetch and enrich each individual listing page.
π Related scrapers
Building a pan-European real estate intelligence pipeline? Combine Immoweb Scraper with our other European property extractors:
- πΈπͺ Hemnet Scraper β Sweden's #1 real estate portal (active listings & historical sold prices / slutpriser).
- π©π° Boliga Scraper β Danish property listings and historical sold prices.
- π©πͺ ImmobilienScout24 Scraper β Germany's largest real estate marketplace.
- πͺπΈ Milanuncios Scraper β Spanish property and classified listings.
- π³π± Marktplaats Scraper β Dutch classifieds and property listings.
π Changelog
v1.2 (2026-11)
- Unlocked 1,000+ deep pagination: Changed
maxPagesdefault from3to0(automatic/unlimited, governed bymaxListings) and removed the 5-page cap on nationwide runs somaxListings: 1000+paginates all the way to the user's target. - Lazy browser initialization: Optimized the hybrid engine so Chromium is only launched if the fast HTTP path requires fallback, reducing startup overhead and memory usage on standard runs.
v1.1 (2026-10)
- Rich search-card JSON extraction: Added balanced-brace decoding of
handleClickOnSearchCardpayloads sotitle,price,bedrooms,bathrooms,livingArea,landSurface,latitude/longitude,images, andagencyNamepopulate in fast mode without detail requests.
v1.0 (2026-05)
- Initial release supporting Belgian for-sale and for-rent listings across Brussels, Flanders, and Wallonia with postcode-to-province mapping and optional detail enrichment.