Immoweb.be Belgium Property Scraper avatar

Immoweb.be Belgium Property Scraper

Pricing

from $3.00 / 1,000 results

Go to Apify Store
Immoweb.be Belgium Property Scraper

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

Haketa

Maintained by Community

Actor stats

0

Bookmarked

27

Total users

2

Monthly active users

a day ago

Last modified

Features

Limited permissions

Share

Immoweb Scraper πŸ‡§πŸ‡ͺ β€” Belgium Property Listings, Prices, EPC & Agency Data

Apify Actor Target

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

FeatureDetails
Target platformImmoweb.be β€” Belgium's largest real estate portal (200,000+ listings)
Transaction typesProperties For Sale (for-sale) and For Rent (for-rent)
Property categoriesHouses & Apartments (house-and-apartment), Houses (house), Apartments (apartment), Land (land), Offices (office), Commercial (commercial), Garages (garage)
Geographic coverageAll 3 Belgian regions (Brussels, Flanders, Wallonia), all 10 provinces, 26 built-in city/province presets, custom location slugs, or Start URLs
Language supportEnglish (en), French (fr), and Dutch (nl)
Detail enrichmentFast 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 formatsJSON, CSV, Excel (XLSX), HTML, XML, RSS, and Apify REST API

πŸ“‹ Table of contents


πŸ”Ž 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-sale and for-rent jobs 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: true to correlate EPC scores (A++ to G) and epcValue (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 into startUrls.
  • βœ… 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 (epcValue in kWh/mΒ²/year), heatingType, buildYear, condition, facade count, floodZone flag, full description, agencyPhone, agencyEmail, agencyWebsite, viewCount, bookmarkCount, and daysOnMarket.
  • βœ… Automatic Belgian postcode β†’ Region & Province mapping β€” maps every 4-digit Belgian postal code (1000–9999) to its canonical English region (Brussels, Flanders, Wallonia) and province (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: 0 auto/unlimited) and de-duplicates every record by listingId.

🎯 Use cases

AudienceHow they use Immoweb data
🏦 Property Investors & Private EquityBenchmark €/mΒ² pricing, spot undervalued postcodes, and track inventory velocity across Brussels, Flanders, and Wallonia.
πŸ‡ͺπŸ‡Ί Expat Relocation & Corporate HousingFilter apartments and houses for rent (for-rent) in Brussels, Leuven, Antwerp, and Waterloo with exact bedroom counts, prices, and GPS coordinates.
🌱 Energy & Sustainability AnalystsQuantify the green premium / brown discount between EPC A/B properties and EPC E/F/G renovation targets across Belgian provinces.
πŸ’Ό PropTech & Mortgage BrokersPower consumer home-value estimators, price-drop trackers, and mortgage pre-qualification calculators with live Belgian property feeds.
πŸ“‡ B2B SaaS & Agency Lead GenerationExtract 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.

ParameterTypeDefaultDescription
propertyTypestring"house-and-apartment"Property category: "house-and-apartment", "house", "apartment", "land", "office", "commercial", "garage".
transactionTypestring"for-sale"Transaction mode: "for-sale" or "for-rent".
locationstring"" (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.
languagestring"en"Output language for titles, descriptions, and URLs: "en" (English), "fr" (FranΓ§ais), or "nl" (Nederlands).
minPriceinteger0Minimum price in EUR (0 = no minimum).
maxPriceinteger0Maximum price in EUR (0 = no maximum).
minBedroomsinteger0Minimum number of bedrooms (0 = no minimum).
scrapeDetailsbooleanfalseOpen 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.
maxListingsinteger0 (prefill 90)Maximum total listings to collect (0 = unlimited).
maxPagesinteger0Maximum search result pages to crawl (~30 listings per page). Set 0 for automatic / unlimited pagination governed by maxListings.
startUrlsarray[]Advanced: paste one or more Immoweb search or classified listing URLs to scrape directly (overrides menu filters).
locationCustomstring""Advanced: custom Immoweb location slug (e.g., "knokke-heist/municipality", "waterloo/municipality") used when location is left on All of Belgium.
proxyConfigurationobjectBE ResidentialProxy settings. Keep Apify Belgian (BE) Residential proxy enabled for reliable access.
requestDelayinteger2000Politeness 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
FieldTypeCoverageDescription
listingIdstring🟒 High (100%)Unique numeric Immoweb classified ID (primary key used for de-duplication).
listingTypestring🟒 High (100%)Transaction type: "for-sale" or "for-rent".
propertyTypestring🟒 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.).
titlestring | null🟒 High (~92%)Property headline / title in the selected language.
listingUrlstring🟒 High (100%)Canonical URL to the property page on immoweb.be.
searchUrlstring🟒 High (100%)The search page URL that surfaced this property (or "direct" for direct classified URLs).
scrapedAtstring🟒 High (100%)ISO 8601 UTC timestamp of extraction.
πŸ’Ά Pricing & property dimensions
FieldTypeCoverageDescription
pricenumber | null🟒 High (~99%)Asking sale price or monthly rental price in EUR.
currencystring🟒 High (100%)Always "EUR".
bedroomsinteger | null🟒 High (~90%)Number of bedrooms (chambres / slaapkamers).
bathroomsinteger | null🟑 ConditionalNumber of bathrooms (populated when exposed on the card or when scrapeDetails: true).
livingAreanumber | null🟒 High (~88%)Net habitable surface (surface habitable / bewoonbare oppervlakte) in square meters (m²).
landSurfacenumber | null🟑 ConditionalTotal plot / land surface in m² (populated for houses, villas, and building plots).
πŸ“ Belgian location, postcode & GPS
FieldTypeCoverageDescription
postcodestring🟒 High (100%)4-digit Belgian postal code (1000–9999).
citystring🟒 High (100%)Belgian municipality / locality name (e.g., "Brussels", "Berchem", "Waterloo", "Gent").
provincestring🟒 High (100%)Auto-mapped Belgian province (Brussels, Antwerp, East Flanders, West Flanders, Flemish Brabant, Limburg, Liège, Namur, Hainaut, Walloon Brabant, Luxembourg).
regionstring🟒 High (100%)Auto-mapped Belgian region ("Brussels", "Flanders", or "Wallonia").
latitudenumber | null🟒 High (~85%)WGS84 decimal latitude (when the seller permits exact pin display).
longitudenumber | null🟒 High (~85%)WGS84 decimal longitude (when the seller permits exact pin display).
⚑ Energy (EPC / PEB), building specs & flood risk (scrapeDetails: true)
FieldTypeCoverageDescription
epcScorestring | null🟑 Detail modeOfficial EPC / PEB energy certificate letter (A++, A+, A, B, C, D, E, F, G).
epcValuenumber | null🟑 Detail modePrimary energy consumption in kWh/m²/year.
heatingTypestring | null🟑 Detail modeHeating source (e.g., GAS, FUEL_OIL, ELECTRIC, HEAT_PUMP).
buildYearinteger | null🟑 Detail modeYear of construction (constructionYear).
conditionstring | null🟑 Detail modeBuilding state (e.g., AS_NEW, GOOD, TO_BE_DONE_UP, TO_RENOVATE, JUST_RENOVATED).
facadeinteger | null🟑 Detail modeNumber of building façades (2 = terraced, 3 = semi-detached, 4 = detached).
floodZoneboolean | null🟑 Detail modetrue if located in a designated flood-risk zone, false if NON_FLOOD_ZONE.
descriptionstring | null🟑 Detail modeFull property description text in the chosen language (en / fr / nl).
🀝 Agency contacts, media & engagement
FieldTypeCoverageDescription
agencyNamestring | null🟒 High (~92%)Listing real estate agency or developer name (extracted right from the search card!).
agencyPhonestring | null🟑 Detail modeAgency contact phone number (populated when scrapeDetails: true).
agencyEmailstring | null🟑 Detail modeAgency contact email address (populated when scrapeDetails: true).
agencyWebsitestring | null🟑 Detail modeAgency website URL (populated when scrapeDetails: true).
viewCountinteger | null🟑 Detail modeTotal listing views on Immoweb (scrapeDetails: true).
bookmarkCountinteger | null🟑 Detail modeNumber of users who saved the listing (scrapeDetails: true).
daysOnMarketinteger | null🟑 Detail modeDays elapsed since the listing's creation date (scrapeDetails: true).
imagesarray | 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:

  1. Unlocked maxPages: 0 default: When maxPages is 0 (the default), pagination is governed entirely by your maxListings target. Setting maxListings: 1000 automatically walks ?page=1, ?page=2, ?page=3… (~30 properties per page) across 34+ pages until 1,000 unique properties are saved.
  2. 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.
  3. 100% listingId de-duplication: Every property is tracked in an in-memory seenIds set by its canonical numeric listingId, guaranteeing 0 duplicate records across pages and multiple startUrls.

βš™οΈ How to use

  1. Open the actor in the Apify Console.
  2. Choose your property & transaction filters β€” select propertyType (e.g., Houses & Apartments, Apartments only, Houses only, Commercial), transactionType (For Sale or For Rent), and location (or paste custom URLs into startUrls).
  3. Choose fast mode vs. detail mode β€” keep scrapeDetails: false for fast, high-volume pricing/location/photo extraction, or enable scrapeDetails: true when you need EPC scores, building specs, and agency phone/email contacts.
  4. Set maxListings β€” e.g., 90 for a quick test, 1000 for a deep regional crawl, or 0 for unlimited.
  5. Click Start β€” keep the default Belgian (BE) Residential proxy enabled.
  6. 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 ApifyClient
client = 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 RangeRegionProvince
1000 – 1299BrusselsBrussels-Capital Region
1300 – 1499WalloniaWalloon Brabant (Brabant wallon)
1500 – 1999, 3000 – 3499FlandersFlemish Brabant (Vlaams-Brabant)
2000 – 2999FlandersAntwerp (Antwerpen)
3500 – 3999FlandersLimburg
4000 – 4999WalloniaLiΓ¨ge (Luik)
5000 – 5999WalloniaNamur (Namen)
6000 – 6599, 7000 – 7999WalloniaHainaut (Henegouwen)
6600 – 6999WalloniaLuxembourg
8000 – 8999FlandersWest Flanders (West-Vlaanderen)
9000 – 9999FlandersEast Flanders (Oost-Vlaanderen)

πŸ’‘ Pro tips for Belgian real estate data

  • ⚑ Use scrapeDetails: false for 90% of analytics use cases: Because our parser decodes Immoweb's embedded search-card JSON, you already get title, price, bedrooms, bathrooms, livingArea, landSurface, postcode, city, province, region, latitude, longitude, images, and agencyName at 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 on immoweb.be, copy the browser URL, and paste it into startUrls.
  • πŸ“Š Track price drops with daily schedules: Schedule a daily run with your target filters and compare price keyed by listingId in your database or spreadsheet to spot motivated sellers the day they reduce their asking price.

❓ FAQ

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.


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 maxPages default from 3 to 0 (automatic/unlimited, governed by maxListings) and removed the 5-page cap on nationwide runs so maxListings: 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 handleClickOnSearchCard payloads so title, price, bedrooms, bathrooms, livingArea, landSurface, latitude/longitude, images, and agencyName populate 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.
⌂ 捒网址