Looking for the overview — what this API returns, what it costs, and a call you can run without a key? See the Immoweb API page →
docs / immoweb

Immoweb

Belgian property for sale and to rent: price, surfaces, energy certificate and the advertising agency.

base /immoweb/v15 endpoints
post/immoweb/v1/property_detail2 credits

The full immoweb listing: price and price per m², bedrooms, bathrooms, shower rooms and toilets, habitable / land / garden / terrace surfaces, EPC or PEB score with primary energy consumption and carbon emission, construction year, building condition and facade count, heating and energy equipment, cadastral income, monthly charges, flood zone and urban-planning status, land characteristics, parking, thirty amenity flags, address and coordinates, every photo, the full description in the language the advertiser wrote it, and the advertising agency.

ParameterAllowed / rangeDescription
property_idrequired—Immoweb listing id — the digits at the end of any immoweb listing URL ('21866842'), or paste the whole URL and the id is taken out of it. A Belgian listing disappears the day it sells, so there is no id that stays valid forever; for a guaranteed-live example pass `newest:<property_type>` (newest:house, newest:apartment, newest:land …) and the newest listing of that kind is resolved and returned. That form costs one extra upstream lookup.
language = enoptionalen · nl · frBelgium is trilingual and the language is NOT only a label. Ids, prices, surfaces and coordinates are identical in all three, but an advertiser writes the ad in one or more languages: ask for a language they did not use and immoweb returns a null title and description. This engine falls back to whatever the advertiser did publish and tells you which language it used in `description_language`. What the language really controls is the LABELS: province and region names, the EPC wording and the formatted price string.
Try in playground →
post/immoweb/v1/market_countfree

How many listings match a filter combination — immoweb's own total, in a 26-byte answer. Use it to size a market, to check a filter before paging through it, or to track supply over time without downloading any listings.

ParameterAllowed / rangeDescription
transaction = saleoptionalsale · rent · both · buy · for-sale · to-rentSale or rental market. Immoweb requires one, and an unknown value is silently ignored upstream, so anything else is rejected here rather than quietly returning the sale market.
property_type = residentialoptionalhouse · apartment · residential · land · garage · office · commercial · industry · apartment-block · house-group · apartment-group · otherWhich immoweb catalogue to search. Several may be combined with a comma ('house,apartment'). Belgium-wide for-sale stock on 2026-09-24: house 50 974, apartment 34 466, land 11 214, apartment-block 6 969, commercial 6 638, garage 3 846, industry 3 461, apartment-group 2 530, office 2 443, house-group 1 650, other 369.
property_subtypesoptionalAGRICULTURAL_AREA · APARTMENT_BLOCK · BARGE · BED_N_BREAKFAST · BUILDING · BUILDING_LAND · BUNGALOW · CAMPSITE · CASTLE · CHALET · COMMERCIAL_PREMISES · COMMERCIAL_VILLA · COUNTRY_COTTAGE · COVERED_PARKING_SPACE · DUPLEX · EXCEPTIONAL_PROPERTY · FARMHOUSE · FIELDS · FLAT_STUDIO · FOREST · GITES · GROUND_FLOOR · HOLIDAY_PARK · HOTEL · HOTEL_RESTAURANT_CAFE · INDUSTRIAL_PREMISES · KOT · LARGE_TOWN_HOUSE · LOCK_UP_GARAGE · LOCK_UP_PARKING · LOFT · MANOR_HOUSE · MANSION · MEADOW · MILL · MIXED_USE_BUILDING · MIXED_USE_BUILDING_COMMERCIAL · MIXED_USE_BUILDING_INDUSTRIES · MIXED_USE_BUILDING_OFFICES · MOBILE_HOME · OFFICES · OFFICE_BLOCK · ORCHARD · OTHER · OTHER_HOUSE · OTHER_PROPERTY · OUTDOOR_PARKING_SPACE · PAVILION · PENTHOUSE · PROVINCIAL_FARMHOUSE · RECREATIONAL_AREA · SERVICE_FLAT · STATIC_CARAVAN · TOWN_HOUSE · TRIPLEX · UNBUILDABLE_LAND · VILLA · WAREHOUSENarrow to specific kinds. They belong to a property_type: VILLA/TOWN_HOUSE/CASTLE and friends to houses, PENTHOUSE/DUPLEX/LOFT/FLAT_STUDIO/KOT to apartments, BUILDING_LAND/FOREST/MEADOW to land. A subtype from the wrong catalogue returns an honest 0 rather than an error.
country = BEoptionalBE · FR · NL · LU · DE · ES · ITImmoweb is Belgian but also carries foreign stock advertised to Belgians. Houses for sale on 2026-09-24: BE 50 977, FR 1 034, ES 174, NL 48, IT 48, LU 30, DE 4.
postal_codesoptional—Belgian postal codes, either bare ('9000') or prefixed ('BE-9000'). Several may be combined — location_search returns a ready-made list for 'Gent (all localities)' style matches. A code immoweb does not know is silently ignored upstream, so an unrecognisable shape is refused here.
districtsoptional—Immoweb district tokens (GENT, BRUSSELS, ANTWERP…). Get them from location_search: it returns the exact token in `value` for every District match.
provincesoptionalANTWERP · BRUSSELS · EAST_FLANDERS · FLEMISH_BRABANT · HAINAUT · LIEGE · LIMBURG · LUXEMBOURG · NAMUR · WALLOON_BRABANT · WEST_FLANDERSOne or more of the eleven Belgian provinces. Dutch and French spellings (Oost-Vlaanderen, Brabant-Wallon, Luik…) are accepted.
agency_idoptional—Show only the stock of one or more estate agencies. location_search returns the id for every Agency/Agent match, and agency_search returns it as agency_id.
property_idsoptional—Fetch specific listings by id in one call — a cheap way to re-check a saved set. Ids that do not match the other criteria (a rental id under transaction=sale, a sold listing) are simply absent from the result, so compare what comes back against what you asked for.
epcoptionalA++ · A+ · A · B · C · D · E · F · G · XEnergy-performance rating (EPC in Flanders, PEB in Wallonia and Brussels). Several may be combined. Belgian houses for sale on 2026-09-24: A++ 175, A+ 1 385, A 5 098, B 6 343, C 8 208, G 3 079, X (none published) 55.
building_conditionoptionalAS_NEW · JUST_RENOVATED · GOOD · TO_BE_DONE_UP · TO_RENOVATE · TO_RESTORE · FIRST_TIME_USED · CASCOState of repair as the advertiser declared it. Several may be combined (AS_NEW 11 071 + GOOD 13 731 = 24 800 Belgian houses for sale).
garden_orientationoptionalNORTH · NORTH_EAST · EAST · SOUTH_EAST · SOUTH · SOUTH_WEST · WEST · NORTH_WESTWhich way the garden or terrace faces. Eight compass points; SOUTH is the commonest (1 369 of 50 977 Belgian houses for sale).
modified_sinceoptional—Only listings touched on or after this date (YYYY-MM-DD). Together with days_since_modified_max this is how you poll immoweb for what is new without re-reading the whole market.
price_minoptional0–Minimum price in EUR — the monthly rent when transaction=rent. 🔴 Life-annuity listings have no price at all and therefore pass every minimum; they come back with price null and price_type 'life_annuity'.
price_maxoptional0–Maximum price in EUR (monthly rent when transaction=rent).
bedrooms_minoptional0–Minimum number of bedrooms.
bedrooms_maxoptional0–Maximum number of bedrooms.
rooms_minoptional0–Minimum total room count.
rooms_maxoptional0–Maximum total room count.
surface_minoptional0–Minimum net habitable surface in m².
surface_maxoptional0–Maximum net habitable surface in m².
land_surface_minoptional0–Minimum plot size in m².
land_surface_maxoptional0–Maximum plot size in m².
garden_surface_minoptional0–Minimum garden surface in m².
garden_surface_maxoptional0–Maximum garden surface in m².
terrace_surface_minoptional0–Minimum terrace surface in m².
terrace_surface_maxoptional0–Maximum terrace surface in m².
kitchen_surface_minoptional0–Minimum kitchen surface in m².
kitchen_surface_maxoptional0–Maximum kitchen surface in m².
construction_year_minoptional0–Built in or after this year.
construction_year_maxoptional0–Built in or before this year.
facades_minoptional0–Minimum number of free facades (4 = detached).
facades_maxoptional0–Maximum number of free facades (2 = terraced).
parking_minoptional0–Minimum number of parking places.
parking_maxoptional0–Maximum number of parking places (0 = none).
buildable_surface_minoptional0–Minimum total buildable ground-floor surface in m² (land and development).
buildable_surface_maxoptional0–Maximum total buildable ground-floor surface in m².
showroom_surface_minoptional0–Minimum showroom surface in m² (commercial).
showroom_surface_maxoptional0–Maximum showroom surface in m² (commercial).
access_doors_minoptional0–Minimum number of access doors (industrial).
access_doors_maxoptional0–Maximum number of access doors (industrial).
loading_bays_minoptional0–Minimum number of loading bays (industrial).
loading_bays_maxoptional0–Maximum number of loading bays (industrial).
business_price_minoptional0–Minimum price of the business / goodwill in EUR.
business_price_maxoptional0–Maximum price of the business / goodwill in EUR.
days_since_modified_maxoptional0–Only listings touched in the last N days (1 → 1 771 Belgian houses for sale, 7 → 6 042 of 50 977).
has_gardenoptional—Has a garden (16 411 of 50 977 Belgian houses for sale).
has_terraceoptional—Has a terrace (29 667).
has_terrace_or_gardenoptional—Has a terrace OR a garden (33 739).
has_swimming_pooloptional—Has a swimming pool (1 941).
has_liftoptional—Has a lift (832 houses; far commoner on apartments — 5 606 of 11 971 rentals).
has_fireplaceoptional—Has an open fire or stove (2 640).
has_fitted_kitchenoptional—The kitchen is installed rather than bare (25 790).
has_disabled_accessoptional—Declared accessible (2 330).
has_virtual_touroptional—Has a virtual tour or 360° media (7 407).
has_reception_deskoptional—Has a reception desk (offices and commercial).
has_goodwilloptional—The business goodwill is included (commercial).
is_new_buildoptional—New-build only when true (5 922); resale only when false (45 052).
is_furnishedoptional—Furnished (885 houses for sale; 2 125 of 11 971 apartment rentals).
is_public_saleoptional—Sold at public auction (500).
is_future_public_saleoptional—A public sale announced but not yet open (5).
is_life_annuityoptional—Sold as a life annuity — 'viager' / 'lijfrente' (169). These listings have no single price; see price_type.
is_investment_propertyoptional—Advertised as an investment with rental income (5 009).
is_workspaceoptional—Has a workspace or office element (11 775).
is_under_optionoptional—Under option / sale agreed (10 381).
is_newly_publishedoptional—Newly published (10 821).
immediately_availableoptional—Available immediately (8 845).
construction_permit_obtainedoptional—The construction permit has been obtained (20 607).
small_pets_allowedoptional—Small pets allowed — rentals (743 of 11 971 apartment rentals).
big_pets_allowedoptional—Large pets allowed — rentals (270).
language = enoptionalen · nl · frBelgium is trilingual and the language is NOT only a label. Ids, prices, surfaces and coordinates are identical in all three, but an advertiser writes the ad in one or more languages: ask for a language they did not use and immoweb returns a null title and description. This engine falls back to whatever the advertiser did publish and tells you which language it used in `description_language`. What the language really controls is the LABELS: province and region names, the EPC wording and the formatted price string.
Try in playground →
Comparing scraping APIs?ReefAPI vs Bright Data