Immoweb Scraper | Belgium Property Listings & EUR per m2
Pricing
from $2.00 / 1,000 results
Immoweb Scraper | Belgium Property Listings & EUR per m2
Belgian property listings from Immoweb with price per square metre computed, multi-unit developments and life-annuity sales flagged so they never distort a comparable, and median EUR/m2 by postcode. Search by postcode, price, bedrooms, surface and property subtype.
Pricing
from $2.00 / 1,000 results
Rating
0.0
(0)
Developer
אלון זריהן
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
21 hours ago
Last modified
Categories
Share
Immoweb Scraper — Belgian Property Listings with €/m²
Property listings from Immoweb, Belgium's dominant property portal, with the price per square metre computed and the listings that would corrupt a comparison flagged and excluded.
What you get
| Coverage | All of Belgium, or filtered to specific postcodes |
| Markets | For sale and for rent |
| Types | Houses, apartments, land, garages, offices, business premises |
| Per listing | Price, €/m², surface, bedrooms, subtype, address, coordinates, agency, photos |
| Statistics | Median and quartile €/m² by postcode and subtype |
Three things this does that a raw listing dump does not
1. It computes €/m². Immoweb leaves the pricePerSqm field empty on every listing. This Actor derives it from price and net habitable surface, and only where a real surface exists — so the figure is never fabricated from a missing value.
2. It flags what is not comparable. Roughly 13% of listings are multi-unit developments (APARTMENT_GROUP, HOUSE_GROUP) that quote a price range and have no single surface. Others are life annuities (viager), public sales, or starting-price listings. Mixed into an average, each of these distorts it. They are labelled, excluded by default, and available with one setting when you do want them.
3. It merges the same town under its different names. Belgium is trilingual and agencies type whatever they like, so one commune arrives as Bruxelles, BRUSSEL, Brussels and BRUXELLES in a single result set. Grouping on the name would give you four partial medians for one market. Statistics group by postcode instead, and every spelling seen is listed in localityVariants so the merge is visible rather than hidden.
Measured across 112 postcodes in live results, 7 carried more than one spelling — and in every case they were the same municipality.
Output
listings — one row per property.
{"listingId": 21800810,"url": "https://www.immoweb.be/en/classified/21800810","price": 395000,"priceDisplay": "€395,000","pricePerSqm": 3211,"propertyType": "APARTMENT","propertySubtype": "APARTMENT","title": "Superb 1-bedroom apartment","bedroomCount": 1,"habitableSurface": 123,"address": "Rue Royale 182","postalCode": "1000","locality": "Bruxelles","province": "Brussels","region": "Brussels","latitude": 50.8515465,"longitude": 4.3646488,"agencyName": "Property Lab","isNew": true,"isDevelopment": false,"isLifeAnnuity": false,"isStandardSale": true,"pictureCount": 4,"lastModified": "2026-08-31T09:05:00.873Z"}
stats — median €/m² per postcode and subtype.
{"postalCode": "1000","locality": "Bruxelles","localityVariants": ["Bruxelles", "BRUSSEL", "BRUXELLES"],"propertySubtype": "PENTHOUSE","listingCount": 6,"medianPricePerSqm": 6633,"p25PricePerSqm": 5800,"p75PricePerSqm": 7400,"medianPrice": 895000,"medianSurface": 135}
Examples
Brussels apartments in a price band:
{ "postalCodes": ["1000", "1050", "1180"], "maxPages": 10, "minPrice": 250000, "maxPrice": 750000 }
Value screen — anything under €3,000/m²:
{ "maxPages": 30, "maxPricePerSqm": 3000, "minSurface": 70 }
Median €/m² across the major cities:
{"postalCodes": ["1000", "2000", "9000", "8000", "4000"],"maxPages": 25,"outputFormat": "stats","minListingsPerGroup": 5}
Villas and penthouses only:
{ "subtypes": ["VILLA", "PENTHOUSE"], "maxPages": 20 }
Rental market:
{ "transaction": "rent", "postalCodes": ["1000"], "maxPages": 10 }
Field reference
| Field | Meaning |
|---|---|
price / priceDisplay | Asking price in EUR. Null for developments, which quote a range |
priceMin / priceMax | The range, for multi-unit developments |
pricePerSqm | Computed: price ÷ net habitable surface. Null when no surface is recorded |
propertyType / propertySubtype | HOUSE, APARTMENT, and the subtype (VILLA, PENTHOUSE, DUPLEX, …) |
habitableSurface / landSurface | Net habitable and land area in m² |
bedroomCount / roomCount | As recorded by the agency |
postalCode / locality / district / province / region | Location |
latitude / longitude | WGS84 coordinates, ready to map |
agencyName | Listing agency (business name only — no personal contact data is collected) |
isDevelopment | Multi-unit project quoting a price range |
isLifeAnnuity / isPublicSale / hasStartingPrice | Non-standard sale forms |
isStandardSale | False if any of the above — excluded from comparables by default |
isNew, hasVideo, has360Tour, pictureCount, thumbnailUrl | Listing presentation |
lastModified | When the agency last updated the listing |
Notes and limits
- Price filters are applied after fetching, not by the site. Immoweb's robots.txt disallows URLs containing
minprice,maxprice,orderBy,searchByRoomsandsearchId, so this Actor does not use them. The consequence is practical: a narrow filter over few pages can legitimately return nothing. RaisemaxPagesrather than assuming it is broken. - There is no price-history signal. The
oldPricefield exists in Immoweb's data model but was empty on all 300 listings sampled, so no price-drop filter is offered. A filter that always returns zero is worse than no filter. - These are asking prices, not recorded sale prices. For what Belgian property actually sold for, the notarial registers are the source, not a portal.
- Bot protection. Immoweb runs DataDome. This Actor crawls politely with a pause between pages and makes no attempt to evade detection — no proxy rotation, no fingerprint spoofing, no challenge solving. If a challenge is served it stops, returns what it has, and says so in the log. Raising
delayMshelps.
Conduct
Only /en/search/ pages are read — paths that Immoweb's robots.txt permits — and the disallowed query parameters are never used. The data collected contains no personal information: no phone numbers, emails or individual names, only agency business names.
Integrations
Output lands in a standard Apify dataset: export as JSON, CSV, Excel or XML, or connect to Make, Zapier, n8n, Google Sheets or your own code via the Apify API. Coordinates are included, so results map directly.