Immoweb Scraper | Belgium Property Listings & EUR per m2 avatar

Immoweb Scraper | Belgium Property Listings & EUR per m2

Pricing

from $2.00 / 1,000 results

Go to Apify Store
Immoweb Scraper | Belgium Property Listings & EUR per m2

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 Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

21 hours ago

Last modified

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

CoverageAll of Belgium, or filtered to specific postcodes
MarketsFor sale and for rent
TypesHouses, apartments, land, garages, offices, business premises
Per listingPrice, €/m², surface, bedrooms, subtype, address, coordinates, agency, photos
StatisticsMedian 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

FieldMeaning
price / priceDisplayAsking price in EUR. Null for developments, which quote a range
priceMin / priceMaxThe range, for multi-unit developments
pricePerSqmComputed: price ÷ net habitable surface. Null when no surface is recorded
propertyType / propertySubtypeHOUSE, APARTMENT, and the subtype (VILLA, PENTHOUSE, DUPLEX, …)
habitableSurface / landSurfaceNet habitable and land area in m²
bedroomCount / roomCountAs recorded by the agency
postalCode / locality / district / province / regionLocation
latitude / longitudeWGS84 coordinates, ready to map
agencyNameListing agency (business name only — no personal contact data is collected)
isDevelopmentMulti-unit project quoting a price range
isLifeAnnuity / isPublicSale / hasStartingPriceNon-standard sale forms
isStandardSaleFalse if any of the above — excluded from comparables by default
isNew, hasVideo, has360Tour, pictureCount, thumbnailUrlListing presentation
lastModifiedWhen 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, searchByRooms and searchId, so this Actor does not use them. The consequence is practical: a narrow filter over few pages can legitimately return nothing. Raise maxPages rather than assuming it is broken.
  • There is no price-history signal. The oldPrice field 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 delayMs helps.

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.