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.
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.
Immoweb API
4 of 5 endpoints, ready to run
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.
// 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.
No OAuth app, no request signing, no per-site account. One key covers all 294 engines.
Every route is a POST with a JSON body. Parameters are validated against the published schema before anything is charged.
Credits, not seats. Failed and blocked calls are never charged, and cache hits cost nothing.
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.
{"query": "Gent"}Zero credits. Turns a place name into the postal codes, districts and provinces search takes, and finds agencies with the same name.
{"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.
{"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.
{"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.
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"}'{
"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.
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.
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.
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.
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.
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.
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 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.
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.
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.
endpoints
credits per call
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.
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 →- 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 -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"}'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"])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.
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.
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.