Immoweb Scraper - Belgium Property Listings & Prices avatar

Immoweb Scraper - Belgium Property Listings & Prices

Pricing

from $0.97 / 1,000 property searches

Go to Apify Store
Immoweb Scraper - Belgium Property Listings & Prices

Immoweb Scraper - Belgium Property Listings & Prices

Scrape Immoweb.be listings across Belgium: price, EPC label, surface, bedrooms, GPS, photos and agency contacts. Sale and rental, every property type.

Pricing

from $0.97 / 1,000 property searches

Rating

0.0

(0)

Developer

SIÁN OÜ

SIÁN OÜ

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

5 days ago

Last modified

Share

Immoweb Scraper — Belgium Property Listings, Prices & EPC 🏠

SIÁN Agency Store Funda.nl Scraper SeLoger Scraper Apartments.com Property Scraper

🇧🇪 Every Belgian listing, with the EPC label and the agency phone number attached

Houses, apartments, land and commercial property from immoweb.be — for sale and for rent, as clean rows

Immoweb carries roughly 48,000 houses for sale and 12,000 apartments for rent at any moment, and its search page shows you thirty of them at a time. This Immoweb scraper takes a location — typed the way you say it, Brussels or Ghent or 1000 — and returns every matching listing as structured data: asking price, living area, plot size, bedrooms, street, GPS coordinates, photos and the publishing agency. Switch on full details and every row also carries the EPC label with its kWh/m²/year, the cadastral income, construction year, flood-zone status and the agency's phone, email and IPI number.

Built for market analysis, renovation sourcing, agency lead generation and new-listing monitoring. Test it with 25 listings free: no credit card, no API key, no login.

🔎 What is the Immoweb Belgium Property Scraper — and when should you use it?

The Immoweb Belgium Property Scraper turns public Immoweb.be property listings from anywhere in Belgium into clean, structured rows you can filter, export and feed straight into a spreadsheet, database or AI agent. No account, no portal API key, no browser automation to maintain.

Use it when you need: Belgian sale and rental listings as rows: asking price or monthly rent, living area, plot size, bedrooms, locality, street, GPS coordinates, photos, the publishing agency and the direct listing URL. Switch on full details and each row also carries the agent's description, the EPC label with its kWh/m²/year, the cadastral income, construction year, condition, flood-zone status and the agency's phone, email and IPI registration number.

Use something else when: the property is not in Belgium. Use Funda.nl Scraper for the Dutch market next door, with its own price-per-m² and agent data. Use SeLoger Scraper for France, including the Ardennes and Lille border markets Belgian buyers also shop. Use Apartments.com Property Scraper for US managed rentals with floor plans and amenity data. This actor covers the public listing sections of immoweb.be. Sold and withdrawn history is out of scope because the site publishes only what is currently on the market, and private-seller contact runs through Immoweb's own form, so the contact block is the publishing agency's rather than a homeowner's.

🤖 Use with AI agents

Already connected to the Apify MCP server? Just ask for this Actor by name: sian.agency/immoweb-be-property-scraper

Your agent can pay for its own runs. This Actor is eligible for agentic payments, so an agent can discover it, run it and settle the bill over x402 (USDC on Base) or Skyfire — without an Apify account or API token of its own. Billing is the same either way: per successful row, never for errors.

Otherwise copy this prompt into Claude, ChatGPT, Cursor or any MCP-enabled assistant:

I want property listings and prices from Immoweb.be using the Apify Actor `sian.agency/immoweb-be-property-scraper`.
Use it when I need: Belgian sale and rental listings as rows: asking price or monthly rent, living area, plot size, bedrooms, locality, street, GPS coordinates, photos, the publishing agency and the direct listing URL. Switch on full details and each row also carries the agent's description, the EPC label with its kWh/m²/year, the cadastral income, construction year, condition, flood-zone status and the agency's phone, email and IPI registration number.
Don't use it when: the property is not in Belgium — use funda-property-scraper or seloger-property-scraper or apartments-com-property-scraper instead.
How to call it: give `locations` a list of Belgian place names or 4-digit postal codes (`Brussels`, `Ghent`, `1000`) — they are resolved against Immoweb's own location index, so you do not need its internal codes — plus a `propertyType` and `transactionType`. Narrow with `minPrice`, `maxPrice`, `minBedroomCount`, `minSurface`, `minLandSurface`, `epcScores`, `buildingCondition`, `hasGarden`, `hasTerrace`, `hasSwimmingPool` or `isNewlyBuilt`. `includeDetails` adds the description, EPC certificate, cadastral income and agency contact for an extra charge per listing. To expand listings you already have, set `operation` to `detail` and pass `listingUrls`; to reuse a search you built on immoweb.be, paste it into `searchUrls`.
Start with this input:
{
"locations": [
"Brussels"
],
"propertyType": "house",
"transactionType": "for-sale",
"maxResults": 100
}
Ask me which Belgian cities or postal codes to cover, whether they want sale or rental listings, and whether the EPC label and agency contact details are worth the extra per-listing charge, then run the Actor and summarise the results as a table.

Things you can ask your agent for:

  • Pull every house for sale in Ghent and Antwerp under €400,000 and rank them by price per square metre.
  • Find EPC E, F and G apartments in Brussels marked to renovate, with the cadastral income and construction year.
  • Give me this week's new rental listings in postal codes 1000, 1030 and 1180 with the agency phone number.

Machine-readable API, MCP config and OpenAPI definition for this Actor are published at apify.com/sian.agency/immoweb-be-property-scraper.md.

📋 Overview

Type a city, pick house or apartment, press Run. This Immoweb scraper turns any Belgian property search into a spreadsheet, in about ten seconds.

Why professionals choose this Immoweb scraper:

  • All of Belgium in one run: Flanders, Wallonia and Brussels, from a list of cities or postal codes
  • 📍 Locations by name: type Ghent, Liège or 1000 — no internal district codes to look up
  • 30 listings per request: a 100-row run finishes in about ten seconds and four requests
  • 🔋 EPC label on every enriched row: score, kWh/m²/year, certificate reference and the Flemish renovation-obligation flag
  • 📞 Agency contact included: name, phone, email, website and IPI/BIV registration number
  • 💰 From $1.10 per 1,000 listings: pay per row delivered, never for a failed one
  • 📸 Photos and GPS on every row: the full gallery in full size, plus exact coordinates
  • 🆕 Newest-first monitoring: schedule it daily and pay only for what appeared since yesterday

✨ Features

  • 🏠 12 property sections: houses, apartments, both together, villas, apartment blocks, building land, garages, offices, business premises, industrial buildings and new-build projects
  • 🤝 Sale and rental: rental rows carry the monthly rent and the charges on top where the agency published them
  • 📍 Name, postal code or province: each location is resolved against Immoweb's own index at run time
  • 💵 Price bands: min and max, applied at the source so you are not billed for rows you filtered out
  • 📐 Size filters: minimum living area, minimum plot size and minimum bedroom count
  • 🔋 EPC filter: keep only the labels you want, A++ through G, or just the E/F/G renovation stock
  • 🔨 Condition filter: as new, just renovated, good, to be done up, to renovate, to restore
  • 🌿 Amenity filters: garden, terrace, swimming pool, new build
  • 📄 Full details on demand: description, EPC certificate, cadastral income, construction year, flood zone and agency contact
  • 🔗 Paste-a-URL mode: drop in any immoweb.be search URL and every filter in it is honoured
  • 🗣️ Three languages: English, Dutch or French labels and price formatting
  • 📊 Export anywhere: JSON, CSV, Excel, or straight into your own code via the API

🎬 Quick Start

Give it a location and a property type. No account, no API key, no proxy configuration. Press Run and the rows arrive.

curl -X POST https://api.apify.com/v2/acts/sian.agency~immoweb-be-property-scraper/runs?token=[YOUR_TOKEN] \
-d '{"locations": ["Brussels"], "propertyType": "house", "transactionType": "for-sale"}'

🚀 Getting Started (3 Simple Steps)

Step 1: Name your locations

Type Belgian place names or postal codes, one per line: Brussels, Ghent, Antwerp, 1000, 9000. Leave the list empty to take the whole country.

Step 2: Pick what you are looking for

Choose the property type (houses, apartments, land, offices…), sale or rent, then set your price band, minimum bedrooms or EPC label.

Step 3: Press Run

The first rows land in seconds. Download as CSV or JSON, or pull them straight from the API.

That's it! In about ten seconds, you'll have:

  • Every matching listing with price, size, bedrooms, locality, GPS and photos
  • Direct listing URLs that still resolve after the agency re-files the property
  • A run report telling you what you got and exactly what it cost

📥 Input Configuration

FieldTypeRequiredDescription
operationstringNosearch (listings by location) or detail (full data for listing URLs)
locationsarrayNoBelgian place names or 4-digit postal codes. Empty means all of Belgium
propertyTypestringNohouse, apartment, house-and-apartment, villa, apartment-block, land, garage, office, business, industry, new-real-estate-project-houses, new-real-estate-project-apartments
transactionTypestringNofor-sale or for-rent
maxResultsintegerNoStop after this many listings across all locations (default 100)
sortstringNonewest, relevance, cheapest, most_expensive or postal_code
languagestringNoen, nl or fr. Sets the label and price-text language
includeDetailsbooleanNoAdd the description, EPC certificate, cadastral income and agency contact. Extra charge per listing
minPriceintegerNoCheapest listing to include, in euros. 0 means no lower bound
maxPriceintegerNoMost expensive listing to include, in euros. 0 means no upper bound
minBedroomCountintegerNoMinimum bedrooms. 0 means no minimum
minSurfaceintegerNoMinimum net habitable surface in m². 0 means no minimum
minLandSurfaceintegerNoMinimum plot size in m². 0 means no minimum
epcScoresarrayNoKeep only these EPC labels: A++, A+, A, B, C, D, E, F, G
buildingConditionstringNoany, AS_NEW, JUST_RENOVATED, GOOD, TO_BE_DONE_UP, TO_RENOVATE, TO_RESTORE
hasGardenbooleanNoSkip listings with no garden
hasTerracebooleanNoSkip listings with no terrace
hasSwimmingPoolbooleanNoSkip listings with no swimming pool
isNewlyBuiltbooleanNoOnly newly built properties
searchUrlsarrayNoimmoweb.be search URLs. Every filter in the URL is honoured
listingUrlsarrayNoListing URLs or IDs to expand, for Property Detail mode

Example:

{
"locations": ["Brussels"],
"propertyType": "house",
"transactionType": "for-sale",
"maxResults": 100
}

Multi-city market sweep:

{
"locations": ["Ghent", "Antwerp", "Bruges", "Leuven"],
"propertyType": "house-and-apartment",
"transactionType": "for-sale",
"minPrice": 200000,
"maxPrice": 500000,
"minBedroomCount": 3,
"maxResults": 2000
}

Renovation stock with full details:

{
"locations": ["Liège", "Charleroi"],
"propertyType": "house",
"transactionType": "for-sale",
"epcScores": ["E", "F", "G"],
"buildingCondition": "TO_RENOVATE",
"includeDetails": true,
"maxResults": 500
}

New rental listings by postal code, on a daily schedule:

{
"locations": ["1000", "1030", "1180"],
"propertyType": "apartment",
"transactionType": "for-rent",
"sort": "newest",
"maxResults": 200
}

Paste an Immoweb search URL:

{
"searchUrls": ["https://www.immoweb.be/en/search/house/for-sale?provinces=ANTWERP&minPrice=300000&hasGarden=true"]
}

Expand specific listings:

{
"operation": "detail",
"listingUrls": [
"https://www.immoweb.be/en/classified/house/for-sale/oosterzele/9860/21798321",
"21797010"
]
}

📤 Output

Every listing is one flat row, ready for Excel, a database or an AI agent.

FieldTypeDescription
listingIdnumberImmoweb listing ID
propertyTitlestringListing title as the agency wrote it
urlstringDirect listing URL
pricenumberAsking price, or monthly rent for a rental
priceTextstringPrice as Immoweb displays it, including rental charges
oldPricenumberPrevious price, when the listing has been reduced
transactionTypestringFOR_SALE or FOR_RENT
propertyTypestringHOUSE, APARTMENT, LAND, OFFICE
propertySubtypestringImmoweb's finer grade, e.g. VILLA, GROUND_FLOOR, EXCEPTIONAL_PROPERTY
bedroomCountnumberBedrooms
netHabitableSurfacenumberLiving area in m²
landSurfacenumberPlot size in m²
localitystringTown or municipality
postalCodestringBelgian postal code
streetstringStreet name, where the agency published it
streetNumberstringHouse number, where the agency published it
districtstringImmoweb district, e.g. Gent
provincestringProvince, e.g. East Flanders
regionstringFlanders, Wallonia or Brussels
latitudenumberLatitude
longitudenumberLongitude
agencyNamestringPublishing agency
imageUrlstringFirst photo
imageUrlsarrayEvery photo, full size
imageCountnumberNumber of photos
listingFlagstringBadge Immoweb shows: new, under_option, price_drop
updatedAtstringLast time the agency updated it (ISO 8601)
descriptionTextstringFull description, with Add full details on
epcScorestringEPC label A++ to G, with Add full details on
epcConsumptionPerSqmnumberPrimary energy consumption in kWh/m²/year
epcReferencestringEPC certificate reference
hasRenovationObligationbooleanWhether the property carries a Flemish renovation obligation
cadastralIncomenumberKadastraal inkomen / revenu cadastral, in euros
constructionYearnumberYear built
buildingConditionstringAS_NEW, GOOD, TO_RENOVATE
heatingTypestringGAS, FUELOIL, ELECTRIC
floodZoneTypestringFlood-zone classification
agencyPhonestringAgency phone number
agencyEmailstringAgency email
agencyWebsitestringAgency website
agencyIpiNumberstringIPI/BIV registration number
viewCountnumberHow many times Immoweb has shown the listing

Example:

{
"listingId": 21798321,
"propertyTitle": "Vier slaapkamers en ruimte voor uw plannen",
"url": "https://www.immoweb.be/en/classified/house/for-sale/oosterzele/9860/21798321",
"price": 299000,
"priceText": "€299,000",
"transactionType": "FOR_SALE",
"propertyType": "HOUSE",
"bedroomCount": 4,
"netHabitableSurface": 242,
"landSurface": 670,
"locality": "Oosterzele",
"postalCode": "9860",
"street": "Stationsstraat",
"streetNumber": "117",
"province": "East Flanders",
"region": "Flanders",
"latitude": 50.9358347,
"longitude": 3.774472,
"agencyName": "OC vastgoed",
"imageCount": 17,
"epcScore": "F",
"epcConsumptionPerSqm": 549,
"hasRenovationObligation": true,
"cadastralIncome": 725,
"constructionYear": 1931,
"buildingCondition": "TO_RENOVATE",
"agencyPhone": "+3292330200",
"agencyIpiNumber": "502286",
"status": "success"
}

💼 Use Cases & Examples

1. Belgian Property Market Analysis

Analysts and appraisers measure a market instead of eyeballing it.

Input: a province or a cluster of postal codes, houses and apartments, no price filter Output: asking price, living area, plot size, bedrooms, EPC label and coordinates for every listing Use: price per square metre by locality, stock split by energy label, and what a three-bedroom house really lists for in Ghent versus Liège

2. Renovation and Energy-Sieve Sourcing

Renovators find the properties Belgian energy law is about to reprice.

Input: epcScores: ["E","F","G"], buildingCondition: TO_RENOVATE, includeDetails: true Output: EPC label with kWh/m²/year, renovation-obligation flag, cadastral income, construction year and condition Use: a shortlist where the numbers can be run before anyone visits, because the fields that decide the deal are already on the row

3. Estate Agency Lead Generation

Portals, proptech and agency-services vendors find who holds the stock.

Input: a district, includeDetails: true Output: agency name, phone, email, website and IPI/BIV registration number on every listing Use: group by agency to rank them by live inventory in a district, then approach the ones that matter

4. New Listing Monitoring

Buyers' agents and investors see a property the morning it appears.

Input: your postal codes, sort: newest, on a daily schedule Output: listings ordered by publication, with a previous-price value on anything reduced Use: move on new stock before the weekend viewings, and pay only for rows that are new since yesterday

5. Rental Yield and Investment Screening

Investors compare what a property costs against what it rents for.

Input: two runs over the same postal codes, one for-sale and one for-rent Output: asking prices and monthly rents with matching bedroom counts and living areas Use: a gross-yield picture per locality that no single Immoweb page shows

6. Relocation and Corporate Housing Research

HR and relocation teams size the rental market around an office.

Input: postal codes within commuting distance, apartments for rent, minimum bedrooms Output: monthly rent, charges, living area, availability date and agency contact Use: a defensible housing allowance per site, backed by current listings rather than a survey

🔗 Integration Examples

JavaScript/Node.js

import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: 'YOUR_TOKEN' });
const run = await client.actor('sian.agency/immoweb-be-property-scraper').call({
locations: ['Ghent', 'Antwerp'],
propertyType: 'house',
transactionType: 'for-sale',
maxResults: 500
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items[0].propertyTitle, items[0].price, items[0].postalCode);

Python

from apify_client import ApifyClient
client = ApifyClient('YOUR_TOKEN')
run = client.actor('sian.agency/immoweb-be-property-scraper').call(
run_input={
'locations': ['Liège', 'Charleroi'],
'propertyType': 'house',
'transactionType': 'for-sale',
'epcScores': ['E', 'F', 'G'],
'includeDetails': True
}
)
for item in client.dataset(run['defaultDatasetId']).iterate_items():
print(item['listingId'], item['price'], item.get('epcScore'), item.get('agencyPhone'))

cURL

curl -X POST 'https://api.apify.com/v2/acts/sian.agency~immoweb-be-property-scraper/runs?token=YOUR_TOKEN' \
-H 'Content-Type: application/json' \
-d '{"locations": ["Brussels"], "propertyType": "apartment", "transactionType": "for-rent", "maxResults": 100}'

Automation Workflows (N8N / Zapier / Make)

  1. Trigger: Schedule it daily with sort: newest
  2. HTTP Request: Call the actor API
  3. Process: Handle the JSON rows and drop listing IDs you have already seen
  4. Action: Push new listings to your CRM, a Google Sheet or a Slack alert

📊 Performance & Pricing

FREE Tier (Try It Now)

  • 25 listings per run, with every field and every filter
  • No credit card required
  • Enough to check the data before you commit
  • Unlimited listings per run, across as many locations as you list
  • 30 listings per request, so a 1,000-row sweep takes about a minute
  • Pay per result: charged only for rows delivered, never for a failure
MetricValue
Speed30 listings per request, ~10 s for 100 rows
CoverageAll of Belgium, 12 property sections, sale and rent
Ceiling9,990 listings per search (Immoweb's own limit)
Free tier25 listings per run
Paid tierUnlimited

💰 From $1.10 per 1,000 listings, with full details at $2.50 per 1,000 enriched rows. That is level with the cheapest Immoweb scrapers on the Store, and the field leader charges the same for listings alone: it sells listing detail as a second actor, so listings plus EPC and agency contact means two runs and two bills there and one here.

🔗 View current pricing

❓ Frequently Asked Questions

Q: Do I need an API key, a login or a proxy? A: No. Give it a location and press Run.

Q: How do I name a location? A: Type it the way you would say it: Brussels, Ghent, Antwerp, Liège, Bruges, Namur. A 4-digit postal code such as 1000 or 9000 works too, and so does a province name. Each entry is resolved against Immoweb's own location index at the start of the run, so a locality Immoweb adds tomorrow works tomorrow.

Q: How many listings can one search return? A: 9,990. Immoweb serves 333 pages of 30 and answers page 334 with an error. That is its own ceiling, not ours. To go wider, split the search by postal code, by price band or by property type.

Q: What do the full details add? A: The agent's written description, the EPC label with its kWh/m²/year and certificate reference, the renovation-obligation flag, the cadastral income, construction year, condition, facade count, heating and kitchen type, garden and terrace surfaces, flood-zone status, and the agency's phone, email, website and IPI number. It also replaces the four thumbnails on the card with the full photo gallery.

Q: What does the full-details option cost? A: It fetches each listing's own record, so it bills one Property Detail event per enriched listing on top of the listing row. Leave it off and you pay for listing rows only.

Q: Can I paste an Immoweb search URL instead of filling the form? A: Yes. Build the search on immoweb.be, copy the address bar into Search URLs, and every filter in that URL is used, including facets this form does not expose.

Q: Does it return rental listings? A: Yes. Set For sale or for rent to rent, and the price field carries the monthly rent while the price text shows the charges on top where the agency published them.

Q: Are the addresses exact? A: Where the agency published a street and number they come through, along with latitude and longitude. Plenty of Belgian listings deliberately publish only the locality and postal code, and in those the street fields are empty rather than approximated.

Q: Can I get the owner's phone number? A: No. Immoweb routes private-seller contact through its own form, so the contact block on a listing belongs to the publishing agency. A column labelled "owner phone" would be a fiction, so there isn't one.

Q: What output formats are available? A: JSON, CSV and Excel, straight from the Apify dataset, or over the API in your own code.

Q: How do I only get new listings? A: Sort by newest and schedule the run daily, keeping the listing IDs you already have. You are billed for the new rows only, instead of re-buying the whole market every morning.

Q: Is this legal? A: It only reads listings that are already public on Immoweb. See the legal note below before you collect anything that could count as personal data.

🐛 Troubleshooting

"…is not a place Immoweb knows"

  • Use a Belgian city or municipality name, a 4-digit postal code, or a province
  • Check the spelling against immoweb.be's own search box; both Ghent and Gent work, Zzzz does not

"…is not an EPC label"

  • Only reachable from the API — the form is a dropdown. Send the labels exactly: A++, A+, A, B, C, D, E, F, G
  • The run stops instead of continuing without the filter, because Immoweb accepts an unknown label and then quietly returns the whole country, which you would have paid for

Fewer listings than expected

  • Immoweb caps a single search at 9,990 results; split by postal code or price band to go wider
  • A narrow filter set — a small locality plus an EPC label plus a price band — can genuinely match very little
  • Free accounts are capped at 25 rows per run

A listing URL returns "sold, rented or withdrawn"

  • Immoweb removes listings once the property is off the market
  • Re-run the search to get live ones

Empty EPC, cadastral income or agency phone

  • Those fields only come back with Add full details switched on, or in Property Detail mode
  • Some agencies leave the EPC blank on a new listing until the certificate is issued

Empty street or house number

  • Many Belgian agencies publish only the locality and postal code; the row shows what the listing shows

Our actors are ethical and do not extract any private user data, such as email addresses, gender, or location. They only extract what the user has chosen to share publicly. We therefore believe that our actors, when used for ethical purposes by Apify users, are safe.

However, you should be aware that your results could contain personal data. Personal data is protected by the GDPR in the European Union and by other regulations around the world. You should not scrape personal data unless you have a legitimate reason to do so. If you're unsure whether your reason is legitimate, consult your lawyers.

You can also read Apify's blog post on the legality of web scraping.

🤝 Support

Telegram Support

Join our active support community

  • 🐛 Found a bug? File an issue in the Apify Console Issues tab
  • ⭐ Loving the tool? Leave a 5-star review — it helps us build more
  • 🛠️ More automation tools in the SIÁN Agency Store
  • 📧 apify@sian-agency.online

Built by SIÁN Agency | More Tools

Immoweb is a trademark of Immoweb SA. This actor is not affiliated with, endorsed by, or sponsored by Immoweb.