Immoweb Belgium Real Estate & Agent Contacts Scraper
Pricing
from $25.50 / 1,000 results
Immoweb Belgium Real Estate & Agent Contacts Scraper
Scrape Belgian property listings from Immoweb: price in EUR, for-sale or for-rent, type, bedrooms, bathrooms, surface, EPC energy score, address, postal code, GPS plus the listing agency name and phone. Export to JSON, CSV or Excel.
Pricing
from $25.50 / 1,000 results
Rating
0.0
(0)
Developer
Scrapers Lat
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
14 days ago
Last modified
Categories
Share
Immoweb Belgium Real Estate & Agent Contacts Scraper
Here is one real result, with every field the actor returns:
{"searchLocation": "brussels","id": 21727635,"listingUrl": "https://www.immoweb.be/en/classified/21727635","transactionType": "for-sale","propertyType": "APARTMENT","propertySubtype": "APARTMENT","title": "Apartment","price": 249000,"currency": "EUR","priceLabel": "€249,000","bedrooms": 2,"bathrooms": 1,"netHabitableSurface": 73,"landSurface": null,"roomCount": null,"epcScore": "D","primaryEnergyConsumptionPerSqm": 157,"heatingType": "GAS","constructionYear": 1978,"condition": "GOOD","hasGarden": null,"hasTerrace": true,"address": "Rue Katteput 38","locality": "BERCHEM-SAINTE-AGATHE","postalCode": "1082","province": "Brussels","region": "Brussels","country": "Belgium","latitude": 50.8661292,"longitude": 4.3066255,"agencyName": "Cap'Houses","agencyType": "AGENCY","phone": "+3210872087","mobilePhone": null,"email": "caphouses-jodoigne@omniwebsites.be","agencyWebsite": "http://www.caphouses.be","agencyIpiNo": "500823","source": "immoweb.be","observedAt": "2026-07-25T13:27:29.738Z"}
The most complete Immoweb scraper available. It returns every listing field the property page exposes, from price and EPC energy score to GPS coordinates, plus the listing agency's name, phone, email and IPI number, and gives you location, transaction and bedroom filters to target exactly the properties you need.
📥 Input · 📤 Output · 💰 Pricing · ▶️ Examples
Table of contents
- What it does
- Quickstart
- Input reference
- Output reference
- Example output record
- Run via API and CLI
- Fetch results
- Billing and limits
- FAQ and troubleshooting
What it does
The actor searches Immoweb for homes and apartments for sale or for rent across the Belgian locations you pass, opens each matching listing, and writes one normalized record per property to the run's dataset. Each record carries the price in euros, property type and subtype, bedrooms, bathrooms, habitable and land surface, EPC energy score and primary energy consumption, heating type, construction year, condition, garden/terrace flags, full address with postal code and GPS coordinates, and the listing agency's name, type, phone, mobile, email, website and IPI number. Missing source values are returned as null.
Data covers Belgium listings only. Optional AI add-ons write an English buyer/renter summary, extract structured features, and translate the French/Dutch description into English. A separate contact-enrichment add-on can look up a public business email and contact name for listings that do not expose one.
Immoweb is fronted by an anti-bot challenge; the actor clears it through a hosted browser solver and stays HTTP-only. Runs are therefore slower than a plain API scraper, and a location can occasionally return no listings when the upstream challenge cannot be cleared within the run window. Re-running usually succeeds.
Quickstart
Open the actor, paste this into the input, and press Run. It returns up to 10 apartments and houses for sale in Brussels and Antwerp.
{"locations": ["brussels", "antwerp"],"transactionType": "for-sale","maxListings": 10}
Each location can be a province name (brussels, antwerp, liege, east flanders) or one or more 4-digit postal codes separated by commas (1000, 1050). Every input field is optional; with an empty input the actor searches Brussels for-sale.
Input reference
| Field | Type | Required | Default | Description |
|---|---|---|---|---|
maxListings | integer | no | 10 | Maximum number of listings to collect across all locations in this run (1 to 500). |
transactionType | enum | no | for-sale | for-sale or for-rent. |
locations | string[] | no | ["brussels"] | One or more Belgian locations. Each item is a province name (for example brussels, east flanders) or comma-separated 4-digit postal codes (for example 1000, 1050). One run searches every location. |
minBedrooms | integer | no | (none) | Keep only listings with at least this many bedrooms. |
withSummary | boolean | no | false | AI add-on. Writes a concise English buyer/renter summary of each listing. Paid Apify plans only. |
withFeatures | boolean | no | false | AI add-on. Extracts structured beds/baths/size/amenities/condition tags. Paid Apify plans only. |
withTranslate | boolean | no | false | AI add-on. Translates the French/Dutch description into English. Paid Apify plans only. |
enrichContacts | boolean | no | false | Paid add-on. For each result without an email, attempt to find a public business contact email and person name. Billed per attempt, plus an extra charge only when an email is found. |
enrichContactsMax | integer | no | 50 | Cap how many results the contact add-on tries to enrich. Free Apify accounts are capped at 3. |
Output reference
One dataset item per listing. Types: string, integer, number, boolean, or null when the source value is absent.
| Field | Type | Description |
|---|---|---|
searchLocation | string | The input location that produced this listing. |
id | integer | Immoweb listing id. |
listingUrl | string | Direct link to the listing page. |
transactionType | string | for-sale or for-rent. |
propertyType | string | Property type (for example HOUSE, APARTMENT). |
propertySubtype | string | More specific property subtype. |
title | string | Listing title. |
description | string | Listing description text, when present (trimmed to 4000 characters). null if not exposed. |
price | number | Price in EUR. |
currency | string | Currency, EUR when a price is present. |
priceLabel | string | Price as displayed (for example €249,000). |
bedrooms | integer | Number of bedrooms. |
bathrooms | integer | Number of bathrooms. |
netHabitableSurface | number | Net habitable surface in m2. |
landSurface | number | Land surface in m2. |
roomCount | integer | Total room count, when exposed. |
epcScore | string | EPC energy label (for example A, D, G). |
primaryEnergyConsumptionPerSqm | number | Primary energy consumption in kWh/m2/year. |
heatingType | string | Heating type (for example GAS). |
constructionYear | integer | Year of construction. |
condition | string | Building condition (for example GOOD). |
hasGarden | boolean | Whether the property has a garden. |
hasTerrace | boolean | Whether the property has a terrace. |
address | string | Street address. |
locality | string | Locality / municipality. |
postalCode | string | Postal code. |
province | string | Province. |
region | string | Region. |
country | string | Country. Always Belgium. |
latitude | number | Latitude. |
longitude | number | Longitude. |
agencyName | string | Listing agency name. |
agencyType | string | Agency type (for example AGENCY). |
phone | string | Agency phone. |
mobilePhone | string | Agency mobile. |
email | string | Agency email, when exposed. |
agencyWebsite | string | Agency website. |
agencyIpiNo | string | Agency IPI (professional) number. |
aiSummary | string | AI English listing summary. null unless withSummary is on. |
aiBeds / aiBaths / aiSizeSqft | number | AI-extracted features. null unless withFeatures is on. |
aiAmenities | string[] | AI-extracted amenity tags. null unless withFeatures is on. |
aiCondition | string | AI-extracted condition. null unless withFeatures is on. |
aiDescriptionEn | string | AI English translation of the description. null unless withTranslate is on. |
source | string | Data source label (immoweb.be). |
observedAt | string | ISO 8601 timestamp of when the record was collected. |
Example output record
Real record from a live run (a for-sale house in Woluwe-Saint-Lambert with garden, terrace and EPC score G):
{"searchLocation": "brussels","id": 21708520,"listingUrl": "https://www.immoweb.be/en/classified/21708520","transactionType": "for-sale","propertyType": "HOUSE","propertySubtype": "HOUSE","title": "Exclusivité ABITA : maison avec jardin et beau potentiel","price": 695000,"currency": "EUR","priceLabel": "€695,000","bedrooms": 4,"bathrooms": 1,"netHabitableSurface": 170,"landSurface": 222,"roomCount": null,"epcScore": "G","primaryEnergyConsumptionPerSqm": 390,"heatingType": null,"constructionYear": 1959,"condition": "GOOD","hasGarden": true,"hasTerrace": true,"address": "Avenue des Dix Arpents 44","locality": "Woluwe-Saint-Lambert","postalCode": "1200","province": "Brussels","region": "Brussels","country": "Belgium","latitude": 50.8569579,"longitude": 4.43934,"agencyName": "ABITA IMMO","agencyType": "AGENCY","phone": "+3227268975","mobilePhone": null,"email": "immoabita_woluwe_st_lambert@importfrommedia.be","agencyWebsite": "http://www.immoabita.be","agencyIpiNo": "500168","source": "immoweb.be","observedAt": "2026-07-16T04:29:56.684Z"}
Run via API and CLI
Start a run and wait for it to finish, then read the dataset. Replace <TOKEN> with your Apify API token.
Run synchronously and get dataset items in one call:
curl -X POST "https://api.apify.com/v2/acts/scrapers_lat~immoweb-belgium-realestate-scraper/run-sync-get-dataset-items?token=<TOKEN>" \-H "Content-Type: application/json" \-d '{"locations":["brussels"],"transactionType":"for-sale","maxListings":25}'
Start a run asynchronously:
curl -X POST "https://api.apify.com/v2/acts/scrapers_lat~immoweb-belgium-realestate-scraper/runs?token=<TOKEN>" \-H "Content-Type: application/json" \-d '{"locations":["1000, 1050"],"transactionType":"for-rent","minBedrooms":2,"maxListings":100}'
Apify CLI:
apify call scrapers_lat/immoweb-belgium-realestate-scraper \--input '{"locations":["antwerp"],"maxListings":10}'
Fetch results
Every run writes to a dataset. Fetch items as JSON, CSV, or Excel by changing format:
# JSONcurl "https://api.apify.com/v2/datasets/<DATASET_ID>/items?token=<TOKEN>&clean=true&format=json"# CSVcurl "https://api.apify.com/v2/datasets/<DATASET_ID>/items?token=<TOKEN>&clean=true&format=csv"# Paginate large datasetscurl "https://api.apify.com/v2/datasets/<DATASET_ID>/items?token=<TOKEN>&offset=1000&limit=1000"
<DATASET_ID> is returned as defaultDatasetId in the run object. Use offset and limit to page through large result sets. clean=true drops empty and internal fields.
Billing and limits
- Pay per result. You are charged per listing record returned (
resultevent). See the pricing tab for the current per-result price. - AI and contact add-ons bill separately. When on, the
ai_listing_summary,ai_features,ai_translate, and contact-enrichment events are charged only when they produce usable output. All are off by default. - No charge on failure. Failed or unavailable listings are written untagged and are not charged. Empty runs cost nothing.
- Spend cap respected. Set
maxTotalChargeUsdon the run; once reached, the actor stops emitting and charging further billable results. - Free Apify plans are capped at 10 listings per run. Upgrade for higher
maxListings. - AI add-ons require a paid Apify plan. On a free plan they are disabled for the run.
FAQ and troubleshooting
A run returned "No listings found". Why? Either the filters matched nothing, or the upstream anti-bot challenge could not be cleared within the run window for that location. Re-run, narrow to a specific postal code, or try again shortly. Runs that return no billable listings are not charged.
Can I get properties for rent as well as for sale?
Yes. Set transactionType to for-rent.
Does it include the agent's contact details? Yes. When the listing exposes them you get the agency name, type, phone, mobile, email, website and IPI number.
How do I search several places in one run?
Pass multiple entries in locations. Each can be a province name or comma-separated postal codes, and the actor searches every one.
Why are some fields null?
Not every listing publishes every field. Missing source values are returned as null, never invented.
Is this an official Immoweb tool? No. This actor is independent and has no affiliation with Immoweb. It reads only public listing data. Use the results in accordance with the source's terms.
Related scrapers
- Funda Netherlands Real Estate Scraper: Dutch property listings.
- Daft Ireland Real Estate Scraper: Irish property listings.
- Domain Australia Real Estate Scraper: Australian property listings.
- Belgium KBO Companies Scraper: Belgian company registry records.
More scrapers at scrapers.lat
Built and maintained by scrapers.lat, where we publish scrapers for US and Latin American public platforms: company registries, government data, finance, e-commerce and more. Browse the catalog or request a custom scraper at scrapers.lat.
Independent tool, not affiliated with Immoweb. Accesses only publicly available listing data. Use the results in accordance with the source's terms.
