Immoweb API

Belgium's property market as JSON, in English, French or Dutch

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

no credit card1,000 free credits · instant API key · pay by card or crypto
Missing a Immoweb endpoint, or need a source we don't have yet?Contact us real people · same-day reply.
I
/immoweb/v1

5 active endpoints, on 0, 1 and 2 credit tiers.

  • POST/immoweb/v1/location_search
  • POST/immoweb/v1/search
  • POST/immoweb/v1/property_detail
  • POST/immoweb/v1/market_count
  • POST/immoweb/v1/agency_search

What Immoweb endpoints does ReefAPI ship?

5 live read endpoints. Read-only data API: no writes, no account actions, no dashboard access on the target site.

5 endpoints

location_search

0 cr

Resolve a Belgian place name, postal code, district, province or estate-agency name to the ex…

required
query
optional
kind, language

search

2 cr

Search Belgian property listings.

required
—
optional
transaction, property_type, property_subtypes, country, postal_codes, districts, provinces, agency_id, property_ids, epc, building_condition, garden_orientation, modified_since, price_min, price_max, bedrooms_min, bedrooms_max, rooms_min, rooms_max, surface_min, surface_max, land_surface_min, land_surface_max, garden_surface_min, garden_surface_max, terrace_surface_min, terrace_surface_max, kitchen_surface_min, kitchen_surface_max, construction_year_min, construction_year_max, facades_min, facades_max, parking_min, parking_max, buildable_surface_min, buildable_surface_max, showroom_surface_min, showroom_surface_max, access_doors_min, access_doors_max, loading_bays_min, loading_bays_max, business_price_min, business_price_max, days_since_modified_max, has_garden, has_terrace, has_terrace_or_garden, has_swimming_pool, has_lift, has_fireplace, has_fitted_kitchen, has_disabled_access, has_virtual_tour, has_reception_desk, has_goodwill, is_new_build, is_furnished, is_public_sale, is_future_public_sale, is_life_annuity, is_investment_property, is_workspace, is_under_option, is_newly_published, immediately_available, construction_permit_obtained, small_pets_allowed, big_pets_allowed, sort, page, max_pages, include_promoted, strict_filters, language

property_detail

2 cr

The full immoweb listing.

required
property_id
optional
language

market_count

0 cr

How many listings match a filter combination.

required
—
optional
transaction, property_type, property_subtypes, country, postal_codes, districts, provinces, agency_id, property_ids, epc, building_condition, garden_orientation, modified_since, price_min, price_max, bedrooms_min, bedrooms_max, rooms_min, rooms_max, surface_min, surface_max, land_surface_min, land_surface_max, garden_surface_min, garden_surface_max, terrace_surface_min, terrace_surface_max, kitchen_surface_min, kitchen_surface_max, construction_year_min, construction_year_max, facades_min, facades_max, parking_min, parking_max, buildable_surface_min, buildable_surface_max, showroom_surface_min, showroom_surface_max, access_doors_min, access_doors_max, loading_bays_min, loading_bays_max, business_price_min, business_price_max, days_since_modified_max, has_garden, has_terrace, has_terrace_or_garden, has_swimming_pool, has_lift, has_fireplace, has_fitted_kitchen, has_disabled_access, has_virtual_tour, has_reception_desk, has_goodwill, is_new_build, is_furnished, is_public_sale, is_future_public_sale, is_life_annuity, is_investment_property, is_workspace, is_under_option, is_newly_published, immediately_available, construction_permit_obtained, small_pets_allowed, big_pets_allowed, language

agency_search

1 cr

The immoweb estate-agency directory, ranked by how much stock each agency is advertising.

required
—
optional
postal_codes, page, language

Every parameter, every allowed value →

Immoweb API

4 of 5 endpoints, ready to run

View docs ↗

Belgian listings for sale or to rent: price and price per square metre, bedrooms, rooms, habitable and land surface, energy score, address down to the postcode, coordinates, photos, when the advertiser last touched it and the agency. 30 a page.

2 credits0 required · 10 optional
POST/immoweb/v1/search
idle
// Press "Try it" and this pane shows exactly what the
// live site returned this second — including an empty
// result, if that is the truth. No key, no account.

How the Immoweb API works

Immoweb is a normal ReefAPI surface — the same four rules that hold for every other engine on the key.

01
Authenticate
x-api-key header

No OAuth app, no request signing, no per-site account. One key covers all 294 engines.

02
Call
POST /immoweb/v1/…

Every route is a POST with a JSON body. Parameters are validated against the published schema before anything is charged.

03
Pay
0 or 1 or 2 credits per call

Credits, not seats. Failed and blocked calls are never charged, and cache hits cost nothing.

04
Read
{ ok, data, meta, error }

One envelope everywhere. meta carries latency_ms, record_count and the endpoint that answered.

Size the slice before you page it

Counting is free here and paging is not, so the cheap move is to ask how big a filter combination is first and only then decide how to cut it.

01location_search
POST/immoweb/v1/location_search
{"query": "Gent"}

Zero credits. Turns a place name into the postal codes, districts and provinces search takes, and finds agencies with the same name.

02market_count
POST/immoweb/v1/market_count
{"property_type": "house", "transaction": "sale", "postal_codes": ["9000"]}

Zero credits. The number of matching listings and nothing else. A slice bigger than roughly 9,990 cannot be paged in full, so this is where you decide to split it by postcode or price band.

03search
POST/immoweb/v1/search
{"property_type": "house", "transaction": "sale", "postal_codes": ["9000"], "sort": "newest"}

2 credits for 30 listings. Read filters_applied and filters_ignored on every response: a filter value the source does not recognise would otherwise hand back the whole unfiltered market looking filtered.

04property_detail
POST/immoweb/v1/property_detail
{"property_id": "<a row's property_id>"}

2 credits. The energy certificate with consumption and emission, cadastral income, flood-zone and planning status, and the agency's own feature list.

A market size you paid nothing for, and a paged slice small enough that paging it actually reaches the end.

request
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"}'
response envelope
{
  "ok": true,
  "data": { … },
  "meta": {
    "api": "immoweb",
    "endpoint": "search",
    "mode": "live",
    "latency_ms": …,
    "record_count": …
  },
  "error": null
}

Belgium, three languages, and 27 filters that were each proven to narrow

Measured 2026-09-24 over 125 live calls across the five actions. Three of these lines go against us. This engine was built and measured but was not in the live catalog on the day this page was written.

Belgium, in EUR, with a little neighbouring stock

Homes for sale and to rent across the whole country or narrowed to postal codes, districts, provinces or a single estate agency, with a small amount of French, Dutch, Luxembourgish, German, Spanish and Italian stock that Belgian agents advertise there. Prices are EUR throughout.

English, French or Dutch, and the listing says which one it was written in

Prices, surfaces, ids and coordinates are identical in all three languages, while province names, price formatting and the certificate wording are translated. Advertisers do not always write in all three, so each listing also reports the language its description is actually in.

Against us: an unrecognised filter value returns the whole market, so it is refused

Immoweb answers HTTP 200 with the unfiltered market for any filter value it does not recognise, which looks exactly like a filtered result. Every enum is validated and the request is checked against the source's own echo of the criteria, so a call whose filter would have been dropped fails rather than serving unfiltered rows as filtered. filters_applied and filters_ignored are on every response.

27 filters shipped, 9 dropped for doing nothing

Each of the 27 was proven to narrow against a control run in the same minute. Nine more that the source accepts and ignores are not offered at all, because a filter that reads plausibly and changes nothing is worse than no filter.

Against us: the energy rating is on the list only in Wallonia

The EPC or PEB rating appears on the listing detail everywhere in the country, but the results list carries it only for Walloon listings. That is the source's regional behaviour rather than a parse gap, so the field is null on a Flemish or Brussels search row and filled by property_detail.

Against us: paging stops at 333 pages

30 listings a page and no deeper than page 333, which is roughly 9,990 per query, and that is the source's own limit. Every response carries the true market total and what pagination can actually reach, so a query bigger than the ceiling is visible rather than silently truncated. Slice by postcode, province or price band to reach the rest.

A new-build development has no single price, and does not get one

A development comes back with its price range, its bedroom range, its surface range and how much of it is sold, rather than a single invented number. An ordinary listing carries one price and the price per square metre beside it.

Business facts always, contact details only on request

The advertising agency's name, website and registration numbers come back on every listing. Its phone number and e-mail address are contact data and need an explicit opt-in with include_pii. A private seller's personal contact details are never returned.

Price

location_search and market_count are free, which is deliberate: sizing a market should never cost more than paging one. search and property_detail are 2 credits each and agency_search is 1.

What people build with Immoweb

The jobs this data is most often used for.

5

endpoints

0/1/2

credits per call

01

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.

02

Feed a property portal or a buyer-alert service with fresh Belgian stock, filtered on what the advertiser last changed.

03

Build comparables for a valuation model from surface, energy score, construction year and coordinates.

04

Monitor one estate agency's stock, or find every agency active in a postcode.

What Immoweb data costs

The cheapest call here is 0 credits, so $15/mo (Pro) buys 10,000 of them — $1.50 per 1,000 credits. Credits roll over and never expire, and failed or blocked calls are not charged.

Full pricing →
$0.67–$1.50 / 1,000 credits
  • 1,000 free credits on signup, no card
  • One key, all 294 APIs, one credit pool
  • Failed and blocked calls are never charged
  • Credits roll over and never expire

Call it in two lines

Sign up, get 1,000 credits and one key that works on every engine. Then this is the whole protocol.

curl
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"}'
python
import requests

r = requests.post(
    "https://api.reefapi.com/immoweb/v1/search",
    headers={"x-api-key": REEF_KEY},
    json={
  "property_type": "house",
  "transaction": "sale"
},
)
print(r.json()["data"])
FAQ

Have a question? We got answers.

The questions people actually ask before wiring up Immoweb.

Get a free key →
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.

16 Real Estate APIs on the same key

One key, one credit pool, one response envelope. If you are pulling Immoweb, you are one call away from the rest of the category — no second contract, no second integration.

Already paying for something else?Immoweb vs Bright Data

Need something this API does not do?

Name the endpoint, the field, or a source we do not carry yet. We ship new APIs every week and you would be first to get the key. Real people read every message and reply the same day.

0/4000

No account needed · we reply from [email protected]

Try it on your own data before you pay anything

The call above is the real endpoint, not a recording. A free key gives you 1,000 credits, the other 293 APIs, and the same envelope everywhere.

Endpoints, parameters and credit costs on this page are read from the live catalog and cannot drift from what the API accepts. Field notes were captured on 2026-09-24.