Calling this without an account: every endpoint on this page answers a plain GET, with no signup and no key of your own — https://api.reefapi.com/immoweb/v1/search?key=ak_live_jtEp58J7k4i6ov0VtjSQMPd0K0424IQY&src=t&property_type=house&transaction=sale — rate limited and free. How this lane works.

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 →
Real Estate

Immoweb API & Scraper

The Immoweb API returns Belgium's main property portal as clean JSON in five actions.

5 actionsLive JSON1,000 free credits$0.67–$1.50 / 1,000 creditsMCP-ready
Get a free keyOpen in playground

🤖 Using an AI assistant? Copy this link into ChatGPT / Claude / Cursor — it reads every endpoint and parameter instantly and tells you if this API fits your use case.

search covers homes for sale and to rent across the whole country or narrowed to postal codes, districts, provinces or a single estate agency, with the filters immoweb itself exposes: price, bedrooms, rooms, habitable and land surface, garden, terrace and kitchen surface, property type and subtype, EPC or PEB rating, building condition, construction year, facades, parking and sort order, 30 listings a page. Every row carries the price and the price per square metre, bedrooms, rooms, surfaces, the energy score, the address down to the postal code, coordinates, every photo, when the advertiser last touched it and the agency behind it, and a new-build development comes back with its price and bedroom range rather than a single price it does not have. property_detail adds the energy certificate with primary consumption and carbon emission, cadastral income, flood-zone and planning status, heating, the full description and the agency's own feature list. market_count answers how many listings match a filter combination without returning any of them, and costs nothing. location_search resolves a Belgian place name and costs nothing too. agency_search is the estate-agency directory. 27 filters were each proven to narrow a result against a control run in the same minute, and nine more that immoweb accepts but ignores are not offered at all. Prices are EUR and the listing text comes back in English, French or Dutch. No immoweb account, no browser, one ReefAPI key and the standard { ok, data, meta, error } envelope.

Live example

Real request and response JSON

Captured from the indexed primary action, search, on .

Captured request
{
  "method": "POST",
  "url": "https://api.reefapi.com/immoweb/v1/search",
  "headers": {
    "x-api-key": "$REEF_KEY",
    "content-type": "application/json"
  },
  "body": {
    "property_type": "house",
    "transaction": "sale"
  }
}
Captured response
{
  "ok": true,
  "meta": {
    "api": "immoweb",
    "endpoint": "search",
    "mode": "live",
    "latency_ms": 1136.7,
    "record_count": 30,
    "bytes": 1041726,
    "cache_hit": false,
    "completeness_pct": 100,
    "stop_reason": "max_pages",
    "total_results": 51050,
    "reachable_results": 9969,
    "promoted_count": 0,
    "grid_rows": 30,
    "filters_applied": {
      "transaction": "sale",
      "property_type": "HOUSE",
      "sort": "relevance"
    },
    "filters_ignored": null,
    "sort": "relevance",
    "language": "en",
    "field_note": "total_results is immoweb's own market total; reachable_results is what its pagination can actually serve (about 9 990). price_per_sqm is computed here as price/surface_m2 — immoweb does not publish it on the results list — and is null when either is missing. Two kinds of listing have no single value and therefore come back with price null: a life annuity (price_type 'life_annuity' — see price_details.life_annuity for the lump sum and the monthly amount) and a new-build development (price_type 'group_sale' — see the `project` block for the price and surface range). Their bedrooms and surface_m2",
    "charged_credits": 2,
    "version": "1.0.0"
  },
  "data": {
    "items": [
      {
        "property_id": 21866842,
        "url": "https://www.immoweb.be/en/classified/21866842",
        "promoted": false,
        "transaction": "sale",
        "transaction_type": "FOR_SALE",
        "property_type": "HOUSE",
        "property_subtype": "HOUSE",
        "title": "Val de la Cambre - Exceptional house with renovation project",
        "price": 1975000,
        "price_display": "€1,975,000",
        "price_type": "sale",
        "price_period": null,
        "price_details": {
          "amount": 1975000,
          "currency": "EUR",
          "period": null,
          "price_type": "sale",
          "price_type_raw": "residential_sale",
          "is_starting_price": null,
          "public_sale": null,
          "display": "€1,975,000",
          "short_display": "€2M",
          "old_amount": null,
          "hidden": false,
          "min_range": null,
          "max_range": null,
          "is_subject_to_vat": null,
          "has_starting_price": null,
          "price_per_sqm_published": null
        },
        "price_per_sqm": 5064.1,
        "bedrooms": 4,
        "rooms": 12,
        "surface_m2": 390,
        "land_surface_m2": 363,
        "epc_score": null,
        "epc_image_url": null,
        "address": {
          "country": "Belgium",
          "region": "Brussels",
          "region_code": "BRUSSELS",
          "province": "Brussels",
          "district": "Brussels",
          "locality": "Ixelles",
          "postal_code": "1050",
          "street": "SQUARE DU VAL DE LA CAMBRE",
          "number": "22",
          "box": null,
          "floor": null
        },
        "latitude": 50.8184998,
        "longitude": 4.3783428,
        "images": [
          {
            "url": "[trimmed-depth]",
            "large_url": "[trimmed-depth]",
            "medium_url": "[trimmed-depth]",
            "thumbnail_url": "[trimmed-depth]",
            "is_vertical": "[trimmed-depth]"
          },
          {
            "url": "[trimmed-depth]",
            "large_url": "[trimmed-depth]",
            "medium_url": "[trimmed-depth]",
            "thumbnail_url": "[trimmed-depth]",
            "is_vertical": "[trimmed-depth]"
          },
          {
            "url": "[trimmed-depth]",
            "large_url": "[trimmed-depth]",
            "medium_url": "[trimmed-depth]",
            "thumbnail_url": "[trimmed-depth]",
            "is_vertical": "[trimmed-depth]"
          }
        ],
        "has_video": false,
        "has_virtual_tour": false,
        "has_360_tour": false,
        "flags": {
          "main": "new",
          "secondary": [],
          "percentSold": null
        },
        "last_modified_at": "2026-09-24T17:00:11.329Z",
        "published_at": null,
        "project": null,
        "agency": {
          "name": "BARNES BRUSSELS",
          "logo_url": "https://media-resize.immowebstatic.be/customers/0012p00002TxtsqAAB/500x500/logo/4a5fadf0a0e06c4c8137d89c95b8ea79.jpg"
        },
        "sales_pitch": null
      },
      {
        "property_id": 21867800,
        "url": "https://www.immoweb.be/en/classified/21867800",
        "promoted": false,
        "transaction": "sale",
        "transaction_type": "FOR_SALE",
        "property_type": "HOUSE",
        "property_subtype": "HOUSE",
        "title": "🏡 Double maison/poss d'aménagements, 4CHS, jardin",
        "price": 165000,
        "price_display": "€165,000",
        "price_type": "sale",
        "price_period": null,
        "price_details": {
          "amount": 165000,
          "currency": "EUR",
          "period": null,
          "price_type": "sale",
          "price_type_raw": "residential_sale",
          "is_starting_price": null,
          "public_sale": null,
          "display": "€165,000",
          "short_display": "€165K",
          "old_amount": null,
          "hidden": false,
          "min_range": null,
          "max_range": null,
          "is_subject_to_vat": null,
          "has_starting_price": false,
          "price_per_sqm_published": null
        },
        "price_per_sqm": 820.9,
        "bedrooms": 3,
        "rooms": null,
        "surface_m2": 201,
        "land_surface_m2": 246,
        "epc_score": "G",
        "epc_image_url": "https://media.immowebstatic.be/epc/pics/peb/peb_g.png",
        "address": {
          "country": "Belgium",
          "region": "Wallonie",
          "region_code": "WALLONIE",
          "province": "Liège",
          "district": "Liège",
          "locality": "Grâce-Hollogne",
          "postal_code": "4460",
          "street": "Rue Grande",
          "number": "148",
          "box": null,
          "floor": null
        },
        "latitude": 50.6381503,
        "longitude": 5.4746994,
        "images": [
          {
            "url": "[trimmed-depth]",
            "large_url": "[trimmed-depth]",
            "medium_url": "[trimmed-depth]",
            "thumbnail_url": "[trimmed-depth]",
            "is_vertical": "[trimmed-depth]"
          },
          {
            "url": "[trimmed-depth]",
            "large_url": "[trimmed-depth]",
            "medium_url": "[trimmed-depth]",
            "thumbnail_url": "[trimmed-depth]",
            "is_vertical": "[trimmed-depth]"
          },
          {
            "url": "[trimmed-depth]",
            "large_url": "[trimmed-depth]",
            "medium_url": "[trimmed-depth]",
            "thumbnail_url": "[trimmed-depth]",
            "is_vertical": "[trimmed-depth]"
          }
        ],
        "has_video": false,
        "has_virtual_tour": true,
        "has_360_tour": false,
        "flags": {
          "main": "new",
          "secondary": [],
          "percentSold": null
        },
        "last_modified_at": "2026-09-25T08:26:01.216Z",
        "published_at": null,
        "project": null,
        "agency": {
          "name": "Nigel Immo",
          "logo_url": "https://media-resize.immowebstatic.be/customers/0012p00002y1Ox2AAE/500x500/logo/31e8d4cb184748a902024e51f8236d59.jpg"
        },
        "sales_pitch": null
      },
      {
        "property_id": 21869006,
        "url": "https://www.immoweb.be/en/classified/21869006",
        "promoted": false,
        "transaction": "sale",
        "transaction_type": "FOR_SALE",
        "property_type": "HOUSE",
        "property_subtype": "HOUSE",
        "title": "MAISON 3CH - CE CONFORME - PEB C - JARDIN -GRÂCE-HOLLOGNE",
        "price": 234900,
        "price_display": "€234,900",
        "price_type": "sale",
        "price_period": null,
        "price_details": {
          "amount": 234900,
          "currency": "EUR",
          "period": null,
          "price_type": "sale",
          "price_type_raw": "residential_sale",
          "is_starting_price": true,
          "public_sale": null,
          "display": "€234,900",
          "short_display": "€234.9K",
          "old_amount": null,
          "hidden": false,
          "min_range": null,
          "max_range": null,
          "is_subject_to_vat": null,
          "has_starting_price": true,
          "price_per_sqm_published": null
        },
        "price_per_sqm": 1620,
        "bedrooms": 3,
        "rooms": null,
        "surface_m2": 145,
        "land_surface_m2": 270,
        "epc_score": "C",
        "epc_image_url": "https://media.immowebstatic.be/epc/pics/peb/peb_c.png",
        "address": {
          "country": "Belgium",
          "region": "Wallonie",
          "region_code": "WALLONIE",
          "province": "Liège",
          "district": "Liège",
          "locality": "Grâce-Hollogne",
          "postal_code": "4460",
          "street": "Rue Vert-Vinâve",
          "number": "123",
          "box": null,
          "floor": null
        },
        "latitude": 50.6376211,
        "longitude": 5.497464,
        "images": [
          {
            "url": "[trimmed-depth]",
            "large_url": "[trimmed-depth]",
            "medium_url": "[trimmed-depth]",
            "thumbnail_url": "[trimmed-depth]",
            "is_vertical": "[trimmed-depth]"
          },
          {
            "url": "[trimmed-depth]",
            "large_url": "[trimmed-depth]",
            "medium_url": "[trimmed-depth]",
            "thumbnail_url": "[trimmed-depth]",
            "is_vertical": "[trimmed-depth]"
          },
          {
            "url": "[trimmed-depth]",
            "large_url": "[trimmed-depth]",
            "medium_url": "[trimmed-depth]",
            "thumbnail_url": "[trimmed-depth]",
            "is_vertical": "[trimmed-depth]"
          }
        ],
        "has_video": false,
        "has_virtual_tour": false,
        "has_360_tour": false,
        "flags": {
          "main": "new",
          "secondary": [],
          "percentSold": null
        },
        "last_modified_at": "2026-09-25T14:02:40.678Z",
        "published_at": null,
        "project": null,
        "agency": {
          "name": "SKYIMMO",
          "logo_url": "https://media-resize.immowebstatic.be/customers/0012p00003Gsor9AAB/500x500/logo/75f5398ed606359b70b31cdcebd975bf.jpg"
        },
        "sales_pitch": null
      }
    ],
    "count": 30,
    "total_results": 51050,
    "reachable_results": 9969,
    "promoted_count": 0,
    "page": 1,
    "pages_fetched": 1,
    "page_size": 30,
    "sort": "relevance",
    "language": "en",
    "filters_applied": {
      "transaction": "sale",
      "property_type": "HOUSE",
      "sort": "relevance"
    },
    "filters_ignored": [],
    "stop_reason": "max_pages"
  }
}
Actions

What the Immoweb API does

ActionDescriptionConcrete use caseKey params
location_searchResolve a Belgian place name, postal code, district, province or estate-agency name to the exact values `search` takes. Returns ranked matches, each carrying the parameter name and the value to pass, so a caller never has to guess an immoweb token.Real-estate investors call location_search to resolve a Belgian place name, postal code, district, province or estate-agency name to the ex….query, kind, language
searchSearch Belgian property listings — for sale or to rent — anywhere in Belgium or narrowed to postal codes, districts, provinces or one estate agency, with immoweb's own filters: price, bedrooms, rooms, habitable and land surface, garden, terrace and kitchen surface, property type and subtype, EPC/PEB rating, building condition, construction year, facades, parking, amenities and sort. 30 listings per page.Brokerage tools call search to search Belgian property listings.transaction, property_type, property_subtypes, country, postal_codes, ...
property_detailThe 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.Property dashboards call property_detail to get the full immoweb listing.property_id, language
market_countHow 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.Lead-generation teams call market_count to get how many listings match a filter combination.transaction, property_type, property_subtypes, country, postal_codes, ...
agency_searchThe immoweb estate-agency directory, ranked by how much stock each agency is advertising: name, group, description, website, VAT and IPI registration number, address and coordinates, opening hours, and live for-sale / to-rent counts. Pass the agency_id to `search` to list everything that agency has on the market.Real-estate investors call agency_search to get the immoweb estate-agency directory, ranked by how much stock each agency is advertising.postal_codes, page, language
Code samples

Call search from your stack

curl -X POST https://api.reefapi.com/immoweb/v1/search \
  -H "x-api-key: $REEF_KEY" \
  -H "content-type: application/json" \
  -d '{"property_type":"house","transaction":"sale"}'
MCP one-liner
Ask your MCP-connected assistant: call reefapi.immoweb.search with {"property_type":"house","transaction":"sale"}.
Use cases

Who uses this API and why

  • Track supply and asking prices by commune, province or EPC band, using the free market counter to size a slice before paying to page it.
  • Feed a property portal or a buyer-alert service with fresh Belgian stock, filtered on what the advertiser last changed.
  • Build comparables for a valuation model from surface, energy score, construction year and coordinates.
  • Monitor one estate agency's stock, or find every agency active in a postcode.
  • Compare the Belgian market against neighbouring portals on the same fields, with prices in EUR throughout.
FAQ

Questions developers ask before integrating

Does the Immoweb API cover both sale and rental?

Yes, and both at once if you want. One transaction parameter switches between sale, rent and both. A rental comes back with the monthly rent and the monthly charges kept as separate numbers rather than added together.

Can I filter Belgian listings by EPC or PEB rating?

Yes, on every grade from A double plus down to G, plus a value for listings with none, and several grades at once. Note that the rating appears on the listing detail everywhere in the country while the results list only shows it for Walloon listings. That is the source's own behaviour, not a gap in the parser.

Belgium has three languages. Which one do I get?

Whichever you ask for: English, French or Dutch. Prices, surfaces, ids and coordinates are identical in all three, while province names, price formatting and the certificate wording are translated. Advertisers do not always write in all three, so each listing also says which language its description is actually in.

How do I know an Immoweb filter really applied?

Every response echoes the filters that were applied and the ones that were dropped. This matters here more than usual: immoweb answers HTTP 200 and returns the whole unfiltered market for a filter value it does not recognise, which would look like a filtered result and be nothing of the kind. A request whose filter the source would have quietly dropped is refused rather than answered with unfiltered rows wearing a filtered label.

How many Immoweb listings can I page through?

Thirty per page, up to page 333, which is roughly 9,990 listings per query and the source's own limit. Every response also carries the true market total, so you can see how much a query covers and slice it by postcode, province or price band when it is bigger than that. market_count answers the size question on its own, for free, without returning a single listing.

Do I get the agency's contact details?

The agency's name, website and registration numbers always. Its phone number and e-mail address are contact data and are returned only when you opt in with include_pii. A private seller's personal contact details are never returned.

What is the Immoweb API?

Immoweb API is a ReefAPI endpoint group for belgian property for sale and to rent: price, surfaces, energy certificate and the advertising agency. It returns live JSON through POST requests under /immoweb/v1.

Is the Immoweb API free to try?

Yes. ReefAPI starts with 1,000 free credits, no card required. Immoweb calls use the same shared credit balance as every other ReefAPI engine.

Do I need an Immoweb login or account?

No login to Immoweb is needed for the API response. You call ReefAPI with your x-api-key header, and the playground can run live examples before you create a production key.

How fresh is the Immoweb data?

The page example is captured from a live location_search call, and production requests fetch live data through ReefAPI rather than a static sample.

How many credits does the Immoweb API use?

Immoweb actions currently cost 1-2 credits per successful call. Failed or blocked calls are free. All APIs draw from one credit pool.

Can I call Immoweb from an AI assistant or MCP client?

Yes. Connect ReefAPI once through MCP and your assistant can call immoweb actions with the same key, credit pool and JSON envelope used by normal REST requests.

Is the Immoweb API an Immoweb scraper?

It is the managed alternative to a DIY Immoweb scraper. Instead of building and maintaining your own scraper — proxies, headless browsers, captcha and constant breakage — you call one ReefAPI endpoint and get the same belgian property for sale and to rent: price, surfaces, energy certificate and the advertising agency back as clean JSON.

Why does my Immoweb scraper keep getting blocked?

Most Immoweb scrapers break on anti-bot defenses, rate limits and IP bans that need rotating residential proxies and browser fingerprinting to clear. ReefAPI handles all of that for you — no proxies, no captchas, no maintenance — and returns live JSON. Blocked calls are free.

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 →
Built for volume
5M+ requests a day

Measured at 60 requests a second across the fleet, with no central bottleneck. Volume pricing is on request, and per-key limits are raised for high-volume accounts.

Missing a source?
We build it

Tell us a site we do not cover yet and it becomes an engine. A customer asked for bestprice.gr on a Sunday and it was in the catalog the next day.

Support
2 minute median reply

Median time from a question in the live chat to the first answer, measured across every answered conversation. Setup help included, no support tier to buy.

One key, one balance
Every API included

No per-site plans and no separate subscriptions. One key and one credit pool across the whole catalog, so adding a source costs nothing up front.

Planning something large? Tell us the volume and the sources and we will come back with what it costs and what we would have to build.

Comparing scraping APIs?ReefAPI vs Bright Data