ParseForge Scrapers

Immoweb Scraper

parseforge/immoweb-scraper

Real estateLead generationAutomation

Scrape Immoweb.be property listings from any search URL: price, address, surface, bedrooms, EPC score, construction year, garden, terrace, agency contact and photos. Export to CSV, JSON, Excel or XML.

Run this scraper See the API call
Total runs
48
Bookmarked
0
Last modified
2 days ago

This scraper was last updated on .

What does the Immoweb Scraper return?

ParseForge Banner

๐Ÿ  Immoweb Scraper

๐Ÿš€ Export Immoweb property listings with the full record in seconds. Paste any Immoweb search URL, for sale or for rent, houses, apartments, new-build projects, garages, offices or land, and get 97 fields per listing back: price and price per square metre, exact address with coordinates, surfaces, bedrooms and bathrooms, EPC score and energy consumption, construction year, garden, terrace, parking, flood zone, cadastral income, the agency's phone, email and IPI number, and every photo. No login, no browser, no API key.

Immoweb is Belgium's largest property portal, with close to 10,000 houses and apartments for sale on any given day plus rentals, new-build projects, garages, offices and land. Its search page shows a card with a price, a locality and a photo. This Actor reads the same JSON that Immoweb's own search page loads, opens each listing for the full record the way a visitor would, and returns everything as one flat row per property, ready for a spreadsheet, a valuation model or a CRM.

Every row carries 97 fields with full details on, or 39 in the faster card-only mode. A search page brings 30 listings in one request and each listing page adds the full record in one more, so a five-listing run in the cloud finished in 8 seconds. Prices come back as clean numbers in EUR next to the label Immoweb shows, pricePerSqm is computed from price and living area, and the energy score, construction year and building condition arrive as plain values you can filter on.

๐ŸŽฏ Target Audience ๐Ÿ’ก Primary Use Cases
Property investors and buyers Screen a whole city by price per square metre, EPC score and construction year in one export.
Valuation analysts and appraisers Build comparable datasets with exact surfaces, cadastral income and coordinates.
Estate agencies and lead-gen teams Track competitors' new listings and price drops, and reach the agencies and private sellers behind them.
PropTech and data teams Feed a Belgian property database from any search, on a schedule, with a fixed schema.

๐Ÿ“‹ What the Immoweb Scraper does

๐Ÿ’ก Why it matters: the listing page on Immoweb holds far more than the search card: the energy score and consumption, the construction year and building condition, the number of bathrooms and toilets, garden and terrace surfaces with their orientation, parking spaces, heating type, flood zone, cadastral income, VAT status, the agency's contact details and the complete photo set. This Actor puts all of that on one row per listing and pulls those rows for a whole search in one run.

  • ๐Ÿ”— Any Immoweb search URL. Apply your filters on immoweb.be, copy the URL and paste it. Property type, for sale or for rent, city or postal codes, price range, bedrooms, surface and sort order are all honoured because Immoweb applies them itself. English, French and Dutch URLs all work.
  • ๐Ÿข Listing URLs too. Paste one or more listing pages and get the same 97-field row for each. Mix searches and listings in one run.
  • ๐Ÿ’ถ Prices as data. price as a number in EUR, priceDisplay as Immoweb shows it (โ‚ฌ239,000, โ‚ฌ1,050 (+ โ‚ฌ40)), pricePerSqm computed per listing, the previous price after a drop, and the price range for new-build projects.
  • ๐Ÿ“ Full address. Street, number, box, floor, locality, postal code, district, province, region and coordinates whenever the seller publishes them.
  • โšก Energy and building. EPC score, primary energy consumption per mยฒ, EPC reference, renovation obligation, heating type, double glazing, heat pump, solar panels, construction year, condition, facades and floors.
  • ๐ŸŒฟ Outdoor and comfort. Garden and terrace with surface and orientation, balcony, swimming pool, attic, basement, lift, indoor and outdoor parking, kitchen type and surface, living-room surface, furnished, pets allowed on rentals.
  • ๐Ÿ› Legal and cost lines. Cadastral income, VAT status, monthly charges, flood-zone type and availability date.
  • ๐Ÿ“ž The seller on every row. Agency or private seller, name, phone, mobile, email, website, IPI licence number and logo.
  • ๐Ÿ“ธ All the photos. Every listing photo at 2560 px, plus the virtual-tour and video links when the listing has them.
  • ๐Ÿ“… Real dates and engagement. Publication and last-modified timestamps in ISO 8601, plus the listing's view and bookmark counts.
  • ๐Ÿ— New-build projects. Project name, percentage sold, bedroom and surface ranges, and the price range across units.
  • โšก Card-only mode. Switch full details off to export just the search cards, 30 listings per request, when price, location, surface and bedrooms are enough.
  • ๐Ÿ“ฆ One fixed schema. Columns never move, so your spreadsheet or database mapping never breaks.

๐ŸŽฌ Full Demo (๐Ÿšง Coming soon)

A short walkthrough video is in production and will land here.

๐Ÿ“Š Output

One row per listing, 97 fields, always in this order. With full details off the row stops after lastModifiedAt and carries 39 fields.

Field Type Description
๐Ÿ–ผ imageUrl string Main listing photo.
๐Ÿ“Œ title string Readable label, e.g. Apartment for sale in Liรจge (4000).
๐Ÿ”— url string The listing page.
๐Ÿ†” id number Immoweb listing ID.
๐Ÿ” transactionType string FOR_SALE or FOR_RENT.
๐Ÿ  propertyType string HOUSE, APARTMENT, APARTMENT_GROUP, GARAGE, OFFICE, LAND and the other Immoweb types.
๐Ÿก propertySubtype string VILLA, DUPLEX, PENTHOUSE, GROUND_FLOOR, FLAT_STUDIO, TOWN_HOUSE and more.
๐Ÿท listingFlag string Immoweb's card flag, e.g. new.
๐Ÿ’ถ price number Asking price or monthly rent in EUR.
๐Ÿ’ฑ currency string Always EUR.
๐Ÿ’ฌ priceDisplay string The price exactly as Immoweb shows it, charges included for rentals.
๐Ÿงพ priceType string residential_sale, residential_monthly_rent, group_sale and similar.
๐Ÿ“‰ oldPrice number Previous price after a price change.
๐Ÿ”ฝ priceMin number Lowest unit price in a new-build project. N/A for single listings.
๐Ÿ”ผ priceMax number Highest unit price in a new-build project. N/A for single listings.
๐Ÿ“ pricePerSqm number Price divided by living area, rounded to the euro.
๐Ÿ— projectName string New-build project name. N/A for single listings.
๐Ÿ“Š projectSoldPercent number Share of project units already sold.
๐Ÿ› projectBedroomRange string Bedroom range across the project's units.
๐Ÿ“ projectSurfaceRange string Surface range across the project's units.
๐Ÿ“ locality string Municipality as written on the listing.
๐Ÿ“ฎ postalCode string Belgian postal code.
๐Ÿ—บ district string Arrondissement.
๐Ÿ—บ province string Province.
๐ŸŒ region string Flanders, Wallonia or Brussels.
๐Ÿ‡ง๐Ÿ‡ช country string Country.
๐Ÿ›ฃ street string Street name.
๐Ÿ”ข streetNumber string House number.
๐Ÿ“ฆ box string Box or unit number.
๐Ÿข floor number Floor of the unit.
๐Ÿงญ latitude number Latitude.
๐Ÿงญ longitude number Longitude.
๐Ÿ› bedroomCount number Bedrooms.
๐Ÿšช roomCount number Rooms, where Immoweb publishes it.
๐Ÿ“ netHabitableSurface number Living area in mยฒ.
๐ŸŒณ landSurface number Plot area in mยฒ.
๐Ÿข agencyName string Agency or seller name.
๐Ÿ–ผ agencyLogoUrl string Agency logo.
๐ŸŽฅ hasVirtualTour string Yes when a virtual tour is attached.
๐ŸŽฌ hasVideo string Yes when a video is attached.
๐Ÿ”„ lastModifiedAt string Last update of the listing, ISO 8601.
๐Ÿ”– externalReference string The agency's own reference.
๐Ÿ“„ transactionSubtype string BUY_REGULAR, RENT_REGULAR and the other Immoweb subtypes.
๐Ÿ’ธ monthlyCharges number Monthly charges in EUR.
๐Ÿ› cadastralIncome number Cadastral income in EUR. Sales only.
๐Ÿงพ isSubjectToVat string Yes when the sale is subject to VAT.
๐Ÿ› bathroomCount number Bathrooms.
๐Ÿšฟ showerRoomCount number Shower rooms.
๐Ÿšฝ toiletCount number Toilets.
๐Ÿ›‹ livingRoomSurface number Living-room area in mยฒ.
๐Ÿณ kitchenType string Installed, Hyper equipped, Semi equipped and similar.
๐Ÿณ kitchenSurface number Kitchen area in mยฒ.
๐Ÿ— constructionYear number Year built.
๐Ÿ”ง buildingCondition string Good, As new, To renovate, Just renovated and similar.
๐Ÿงฑ facadeCount number Number of facades.
๐Ÿข floorCount number Floors in the building.
๐Ÿ›— hasLift string Yes or No.
๐Ÿš hasAttic string Yes or No.
๐Ÿ•ณ hasBasement string Yes or No.
๐ŸŒฟ hasGarden string Yes or No.
๐ŸŒฟ gardenSurface number Garden area in mยฒ.
๐Ÿงญ gardenOrientation string Garden orientation.
โ˜€๏ธ hasTerrace string Yes or No.
โ˜€๏ธ terraceSurface number Terrace area in mยฒ.
๐Ÿงญ terraceOrientation string Terrace orientation.
๐ŸชŸ hasBalcony string Yes or No.
๐ŸŠ hasSwimmingPool string Yes or No.
๐Ÿš— parkingIndoor number Indoor parking spaces.
๐Ÿš— parkingOutdoor number Outdoor parking spaces.
๐Ÿ›‹ isFurnished string Yes or No.
๐Ÿพ petsAllowed string Yes or No on rentals, N/A on sales.
๐Ÿ”ฅ heatingType string Gas, Electric, Pellet, Fueloil, Heat pump and similar.
๐ŸชŸ hasDoubleGlazing string Yes or No.
โ™จ๏ธ hasHeatPump string Yes or No.
โ˜€๏ธ hasSolarPanels string Yes or No.
โšก epcScore string EPC label, A+ to G.
โšก primaryEnergyConsumptionPerSqm number Primary energy consumption in kWh/mยฒ/year.
๐Ÿ”– epcReference string EPC certificate reference.
๐Ÿ›  renovationObligation string Yes when a Flemish renovation obligation applies.
๐ŸŒŠ floodZoneType string Non flood zone, Possible flood zone and similar.
๐Ÿ“… availabilityDate string When the property becomes available.
๐Ÿข agencyType string Agency, Private seller, Notary or Developer.
๐Ÿ“ž agencyPhone string Agency landline.
๐Ÿ“ฑ agencyMobile string Agency mobile.
โœ‰๏ธ agencyEmail string Agency email.
๐ŸŒ agencyWebsite string Agency website.
๐Ÿชช agencyIpiNumber string The agency's IPI licence number.
๐Ÿ“ description string Full listing description.
๐Ÿ“… publishedAt string When the listing was published, ISO 8601.
๐Ÿ‘ viewCount number Views Immoweb reports for the listing.
๐Ÿ”– bookmarkCount number Times the listing was saved by visitors.
๐ŸŽฅ virtualTourUrl string Virtual-tour link.
๐ŸŽฌ videoUrl string Video link.
๐Ÿ–ผ imageCount number Number of photos.
๐Ÿ–ผ imageUrls array Every photo URL at 2560 px.
๐Ÿ•’ scrapedAt string When this row was collected.
โŒ error string or null Error message for rows that could not be collected, otherwise null.
Sample records
{
  "imageUrl": "https://media-resize.immowebstatic.be/classifieds/5eaf4184-94df-4cae-b54c-f64164e198ae/736x736/47c76e4e6ea6813963b872db8834eee3.jpg",
  "title": "Apartment for sale in Liรจge (4000)",
  "url": "https://www.immoweb.be/en/classified/apartment/for-sale/liege/4000/21821712",
  "id": 21821712,
  "transactionType": "FOR_SALE",
  "propertyType": "APARTMENT",
  "propertySubtype": "APARTMENT",
  "listingFlag": "new",
  "price": 179000,
  "currency": "EUR",
  "priceDisplay": "โ‚ฌ179,000",
  "priceType": "residential_sale",
  "pricePerSqm": 3140,
  "locality": "Liรจge",
  "postalCode": "4000",
  "district": "Liรจge",
  "province": "Liรจge",
  "region": "Wallonie",
  "country": "Belgium",
  "street": "Rue Hors-Chรขteau",
  "streetNumber": "54",
  "floor": 0,
  "latitude": 50.64700310000001,
  "longitude": 5.5787361,
  "bedroomCount": 1,
  "netHabitableSurface": 57,
  "agencyName": "JNP Immobilier",
  "lastModifiedAt": "2026-09-07T14:50:17.247Z",
  "externalReference": "7737211",
  "transactionSubtype": "BUY_REGULAR",
  "isSubjectToVat": "No",
  "bathroomCount": 1,
  "showerRoomCount": 1,
  "toiletCount": 1,
  "livingRoomSurface": 18,
  "kitchenType": "Installed",
  "kitchenSurface": 6,
  "constructionYear": 1932,
  "buildingCondition": "Good",
  "floorCount": 3,
  "hasLift": "No",
  "hasBasement": "Yes",
  "hasTerrace": "Yes",
  "terraceOrientation": "South",
  "hasSwimmingPool": "No",
  "isFurnished": "No",
  "hasDoubleGlazing": "Yes",
  "epcScore": "C",
  "primaryEnergyConsumptionPerSqm": 200,
  "epcReference": "20250507030936",
  "floodZoneType": "Non flood zone",
  "agencyType": "Agency",
  "agencyMobile": "+3243773310",
  "agencyIpiNumber": "512594",
  "publishedAt": "2026-09-07T14:49:26.895Z",
  "imageCount": 20,
  "imageUrls": [
    "https://media-resize.immowebstatic.be/classifieds/5eaf4184-94df-4cae-b54c-f64164e198ae/2560x1440/47c76e4e6ea6813963b872db8834eee3.jpg",
    "https://media-resize.immowebstatic.be/classifieds/5eaf4184-94df-4cae-b54c-f64164e198ae/2560x1440/f6d5ea0e1fe4cc9e9aad87aa051e2a57.jpg"
  ],
  "scrapedAt": "2026-09-07T14:51:16.136Z",
  "error": null
}
{
  "imageUrl": "https://media-resize.immowebstatic.be/classifieds/8eada6d7-01e5-4c8f-a49a-91d9619b3d57/736x736/cc6d4696f9de79dd61428dc0b3d77193.jpg",
  "title": "House for sale in Oisquercq (1480)",
  "url": "https://www.immoweb.be/en/classified/house/for-sale/oisquercq/1480/21821711",
  "id": 21821711,
  "transactionType": "FOR_SALE",
  "propertyType": "HOUSE",
  "propertySubtype": "HOUSE",
  "listingFlag": "new",
  "price": 350000,
  "currency": "EUR",
  "priceDisplay": "โ‚ฌ350,000",
  "pricePerSqm": 1842,
  "locality": "OISQUERCQ",
  "postalCode": "1480",
  "district": "Nivelles",
  "province": "Walloon Brabant",
  "region": "Wallonie",
  "country": "Belgium",
  "bedroomCount": 5,
  "netHabitableSurface": 190,
  "landSurface": 278,
  "agencyName": "Trevi Conseil Immo",
  "hasVirtualTour": "Yes",
  "externalReference": "7908 - 7501",
  "cadastralIncome": 391,
  "isSubjectToVat": "No",
  "bathroomCount": 1,
  "toiletCount": 2,
  "livingRoomSurface": 18,
  "kitchenType": "Installed",
  "constructionYear": 1940,
  "buildingCondition": "Good",
  "facadeCount": 3,
  "floorCount": 3,
  "hasLift": "No",
  "hasAttic": "Yes",
  "hasBasement": "Yes",
  "hasGarden": "Yes",
  "gardenSurface": 200,
  "hasTerrace": "Yes",
  "terraceSurface": 15,
  "parkingOutdoor": 1,
  "heatingType": "Pellet",
  "hasDoubleGlazing": "Yes",
  "hasHeatPump": "No",
  "epcScore": "D",
  "primaryEnergyConsumptionPerSqm": 297,
  "epcReference": "20260815010373",
  "floodZoneType": "Non flood zone",
  "agencyType": "Agency",
  "agencyPhone": "+3223555055",
  "agencyEmail": "trevi-conseilimmo@omniwebsites.be",
  "agencyWebsite": "http://www.treviconseil.be",
  "agencyIpiNumber": "506457",
  "description": "Oisquercq, dans une jolie rue rรฉsidentielle apprรฉciรฉe pour son excellente situation au calme et ร  seulement 7 minutes de...",
  "publishedAt": "2026-09-07T14:49:21.860Z",
  "virtualTourUrl": "https://nodalview.com/s/0jH0qm7yTFuOOinLeZj1xn",
  "imageCount": 30,
  "scrapedAt": "2026-09-07T14:51:16.160Z",
  "error": null
}
{
  "imageUrl": "https://media-resize.immowebstatic.be/classifieds/e7db3f85-456a-406e-9b24-c04c5d7e2aa6/736x736/f7415904c1bc24d33714d97f975f88df.jpg",
  "title": "House for sale in Orp-Jauche (1350)",
  "url": "https://www.immoweb.be/en/classified/house/for-sale/orp-jauche/1350/21359179",
  "id": 21359179,
  "transactionType": "FOR_SALE",
  "propertyType": "HOUSE",
  "price": 445000,
  "currency": "EUR",
  "priceDisplay": "โ‚ฌ445,000",
  "pricePerSqm": 2225,
  "locality": "Orp-Jauche",
  "postalCode": "1350",
  "district": "Nivelles",
  "province": "Walloon Brabant",
  "region": "Wallonie",
  "street": "Avenue Rodolphe Gossia",
  "streetNumber": "2",
  "latitude": 50.67968940000001,
  "longitude": 4.9600507,
  "bedroomCount": 4,
  "netHabitableSurface": 200,
  "landSurface": 436,
  "agencyName": "SRL Immobiliรจre du Val",
  "externalReference": "Maison 2",
  "isSubjectToVat": "Yes",
  "bathroomCount": 1,
  "showerRoomCount": 1,
  "toiletCount": 2,
  "livingRoomSurface": 30,
  "kitchenType": "Hyper equipped",
  "kitchenSurface": 10,
  "constructionYear": 2026,
  "facadeCount": 3,
  "floorCount": 2,
  "hasGarden": "Yes",
  "gardenSurface": 186,
  "gardenOrientation": "South west",
  "hasTerrace": "Yes",
  "terraceSurface": 22,
  "terraceOrientation": "South west",
  "parkingIndoor": 1,
  "parkingOutdoor": 1,
  "heatingType": "Electric",
  "hasDoubleGlazing": "Yes",
  "hasHeatPump": "Yes",
  "hasSolarPanels": "No",
  "epcScore": "A+",
  "floodZoneType": "Non flood zone",
  "agencyType": "Agency",
  "agencyMobile": "+32485940993",
  "agencyIpiNumber": "502531",
  "publishedAt": "2026-09-07T14:49:46.936Z",
  "viewCount": 571,
  "bookmarkCount": 5,
  "imageCount": 5,
  "scrapedAt": "2026-09-07T14:51:16.203Z",
  "error": null
}

โœจ Why choose this Actor

  • Every Immoweb filter, applied by Immoweb. The search URL you paste carries the property type, transaction, location, price, bedrooms, surface and sort order, and Immoweb's own search applies them, so an export costs exactly the rows that match.
  • The full listing, not the card. 97 fields per row, including 58 that only exist on the listing page: EPC and consumption, construction year and condition, bathrooms, garden and terrace with orientation, parking, heating, flood zone, cadastral income, the seller's contact details and the whole photo set.
  • Prices you can sort on. A numeric price in EUR, the label Immoweb shows, the previous price after a drop, the project price range, and pricePerSqm computed on every row with a known living area.
  • The seller is a lead, not a name. Agency or private seller, phone, mobile, email, website and IPI licence number.
  • Real timestamps. Publication and last-modified times as ISO 8601, so a scheduled run can tell a new listing from a refreshed one.
  • Three languages, one schema. English, French and Dutch search and listing URLs are all accepted and return the same columns.
  • Honest about its limits. The comparison below states the 333-page ceiling Immoweb puts on a single search before you spend anything.
  • No nulls. Identical columns on every row, with Not Disclosed and N/A sentinels instead of blanks so CSV and Excel imports stay predictable.
  • No credentials and no start fee. No Immoweb login, no cookie, no token, and you pay per row only.
  • Fast and light. Plain HTTP requests through residential proxies, no browser. Five listings with full details in 8 seconds in the cloud.

๐Ÿ“ˆ How it compares to alternatives

This Actor Typical Immoweb scrapers
Fields per listing 97, with energy, building, outdoor, legal, seller contact and photos 15 to 40
Input Any search URL in EN, FR or NL, plus listing URLs, mixed in one run Search URL only, or listing URLs only
Price data Number, label, previous price, project range and EUR per mยฒ One price value
Seller Agency or private, phone, mobile, email, website, IPI number Name only, or none
New-build projects Project name, share sold, bedroom, surface and price ranges Treated as a single listing
Card-only mode Yes, 39 fields at one request per 30 listings Rarely
Login or cookie required No No
Start fee per run None Sometimes
Listings per search URL Up to 9,990. See the ceiling below Same ceiling, often unstated

The ceiling, stated plainly. Immoweb serves at most 333 pages of 30 listings for any one search, and its own counter stops at 9,969. The Actor logs the total Immoweb reports for each search so you know your coverage, and it stops cleanly at the last page. To go wider, split the search by postal code, province, property type or price band and pass several URLs in one run.

๐Ÿš€ How to use

  1. Create a free Apify account. New accounts get $5 in free credit. Sign up here.
  2. Open the Actor and go to the Input tab.
  3. Build your search on immoweb.be. Pick for sale or for rent, the property type, the city or postal codes, the price range and the sort order, then copy the URL from your browser.
  4. Paste the URL into the search URLs field. Add more URLs or individual listing pages if you want them in the same run.
  5. Set Max Items to the number of listings you want back across all URLs.
  6. Decide on detail. Leave full details on for the 97-field row, or switch it off for a fast card-only export.
  7. Click Start and watch the log. It reports the total Immoweb found for each search and names every listing as it lands.
  8. Download your data from the Storage tab as CSV, JSON, Excel or XML, or pull it from the API.

Example input:

{
  "startUrls": [
    { "url": "https://www.immoweb.be/en/search/apartment/for-sale/brussels/1000?countries=BE&minPrice=200000&maxPrice=400000&minBedroomCount=2&orderBy=newest" },
    { "url": "https://www.immoweb.be/en/classified/apartment/for-sale/berchem/2600/21819341" }
  ],
  "maxItems": 500,
  "includeDetails": true
}

๐Ÿ’ผ Business use cases

๐Ÿ“Š Screening a city for investment.

An investor pastes a search for apartments for sale in Antwerp under 300,000 EUR with 500 items. The sheet sorts by pricePerSqm, filters epcScore to C or better and constructionYear after 2000, and keeps the rows with a terrace and indoor parking. The agencyPhone column turns the shortlist into a call list.

๐Ÿ› Comparable sales for a valuation.

An appraiser exports every house for sale in a postal code with full details. netHabitableSurface, landSurface, cadastralIncome, buildingCondition and the coordinates feed a comparables table, and publishedAt shows how long each one has been on the market.

๐Ÿ“ˆ Competitor and price-drop tracking.

An agency schedules the Actor daily over its own markets. Diffing price against the previous run, together with oldPrice and lastModifiedAt, surfaces price drops and new instructions the morning they appear, with the listing agency on the same row.

๐Ÿ— New-build market mapping.

A developer exports all new-build apartment projects in Flanders. projectName, projectSoldPercent, priceMin, priceMax and projectSurfaceRange give a picture of what competing projects charge and how fast they sell.

๐Ÿ”Œ Automating Immoweb Scraper

Schedule the Actor and route the results wherever your team already works.

  • Make and Zapier. Trigger on a finished run and push new listings into a CRM, a Notion database or an Airtable base.
  • Slack. Post listings under a price-per-square-metre threshold into a deals channel.
  • Airbyte. Load the dataset into a warehouse and track asking prices by postal code over time.
  • GitHub. Commit a weekly snapshot to a repository to keep an auditable history of a market.
  • Google Drive. Drop each run's CSV into a shared folder for the rest of the team.
  • Apify Schedules. Run the same search daily or weekly without touching the console.

๐ŸŒŸ Beyond business use cases

๐Ÿ”ฌ Research. Economists and urban planners can study asking prices, energy performance and building age across Belgian municipalities with real listing-level data.

๐Ÿ™‹ Personal. House hunters can export every listing that matches their search, compare price per square metre, EPC and garden size side by side, and spot new listings the day they appear.

๐Ÿค Non-profit. Housing organisations can map rental prices and energy scores by neighbourhood to support affordability and renovation programmes.

๐Ÿงช Experimentation. Prices, surfaces, coordinates, energy scores and construction years make a tidy dataset for hedonic pricing models, geospatial analysis and clustering experiments.

๐Ÿค– Ask an AI assistant about this scraper

The Actor exposes its input schema through Apify's MCP server, so an AI assistant connected to your Apify account can configure and run it for you. Ask it "get me every house for sale in Ghent under 400,000 EUR with an EPC of B or better" and it will build the search URL, set the item count and filter the rows itself.

โ“ Frequently Asked Questions

๐Ÿ”‘ Do I need an Immoweb account, cookie or API key?

No. The Actor reads the data Immoweb publishes to any visitor of its search and listing pages. There is no login and no token to manage.

๐Ÿ”— Which URLs does it accept?

Any Immoweb search results URL, in English, French or Dutch, with any filters applied, and any Immoweb listing page. You can mix both in one run. Copy URLs from your browser rather than typing them: an unrecognised path segment makes Immoweb fall back to its default search.

๐Ÿ” How does the search work?

The Actor calls the same search endpoint that Immoweb's own results page loads, 30 listings per page, with your filters passed through untouched, and then opens each listing page for the full record.

๐Ÿ“ How many listings can one search return?

Immoweb serves at most 333 pages of 30 listings per search, about 9,990, and its counter stops at 9,969. The log states the total for each search. Split a large search by postal code, province, type or price band and pass several URLs to cover more.

๐Ÿ’ถ How is the price reported?

price is the number in EUR, priceDisplay is the label Immoweb shows including any rental charges, oldPrice holds the previous price after a change, and pricePerSqm is price divided by netHabitableSurface. New-build projects report priceMin and priceMax instead of a single price.

๐Ÿ— How are new-build projects handled?

A project row carries the project name, the share of units sold, the bedroom and surface ranges and the price range. Unit-level fields such as bathrooms or terrace are Not Disclosed on a project row because Immoweb publishes them per unit, not per project.

๐Ÿ“ž Does it return the agency's contact details?

Yes. agencyName, agencyType, agencyPhone, agencyMobile, agencyEmail, agencyWebsite and agencyIpiNumber come from the listing page whenever the seller publishes them. Private sellers show Private seller and usually no phone.

โšก How fast is it?

Five listings with full details finished in 8 seconds in the cloud. Search pages bring 30 listings per request, and listing pages are fetched five at a time.

๐Ÿˆณ Why do I see Not Disclosed or N/A instead of empty cells?

Because a blank cell is ambiguous. Not Disclosed means the seller did not publish that value for that listing, and N/A means the field does not apply, such as petsAllowed on a sale or projectName on a single apartment.

๐Ÿ›ก Do I need a proxy?

Yes, and it is on by default. Immoweb blocks datacenter IP ranges, so the Actor uses Apify residential proxies. Leave the proxy setting as it is.

๐ŸŒ Which language will the data be in?

Field values such as propertyType and epcScore are language-independent. title follows the language of the URL you paste, and description is whatever the seller wrote, with Immoweb's own note when no translation exists.

๐Ÿ”„ Can I run it on a schedule?

Yes. Save your input as a task, schedule it in Apify, and diff price, lastModifiedAt and the set of id values between runs to track new listings and price drops.

๐Ÿ”Œ Integrate with any app

Every run's dataset is available through the Apify API, so you can pull results into any language or platform that speaks HTTP. Apify also ships official clients for JavaScript and Python, plus native integrations for Make, Zapier, Airbyte, Slack, GitHub and Google Drive.

๐Ÿ”— Recommended Actors

๐Ÿ’ก Pro Tip: browse the complete ParseForge collection.

๐Ÿ†˜ Need Help? Open our contact form

โš ๏ธ Disclaimer: This is an independent tool, not affiliated with or endorsed by Immoweb. It collects only publicly available data.

What input does the Immoweb Scraper accept?

FieldTypeWhat it doesDefault
startUrls array One or more Immoweb search result URLs, copied from your browser with every filter already applied (property type, for sale or for rent, city or postal codes, price range, bedrooms, sort order). English, French and Dutch URLs all work. Each URL yields up to 9,990 listings (333 pages of 30), so split large searches by postal code or price band. [{"url":"https://www.immoweb.be/en/searc
maxItems integer Free users: Limited to 10 items (preview). Paid users: Optional, max 1,000,000 10
includeDetails boolean On (default): one extra request per listing to collect 40+ additional fields (EPC, construction year, bathrooms, garden, terrace, agency contact, all photos). Off: faster and lighter, search-card fields only. true
proxyConfiguration object Keep Apify residential proxies enabled. Datacenter proxies and the automatic proxy group are blocked by Immoweb. {"useApifyProxy":true,"apifyProxyGroups"

How much does the Immoweb Scraper cost?

from $3.30 per 1,000 results

Charged forWhat it isPrice each
result Single result in the default dataset. $0.0033 to $0.00365

Tiered: the lower figure is the price on a higher Apify plan. Billing and the free credit live on Apify.

How do I call the Immoweb Scraper API?

One POST returns the dataset directly. Same shape for every scraper in the library, so swapping the slug is the only change.

POST ยท run and get results
curl -X POST "https://api.apify.com/v2/acts/parseforge~immoweb-scraper/run-sync-get-dataset-items?token=$APIFY_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "startUrls": [
      {
        "url": "https://www.immoweb.be/en/search/house-and-apartment/for-sale?countries=BE&orderBy=newest"
      }
    ],
    "maxItems": 10,
    "includeDetails": true,
    "proxyConfiguration": {
      "useApifyProxy": true,
      "apifyProxyGroups": [
        "RESIDENTIAL"
      ]
    }
  }'

What example inputs can I use?

Use these inputs to see how a run is configured.

input.json
{
  "startUrls": [
    {
      "url": "https://www.immoweb.be/en/search/house-and-apartment/for-sale?countries=BE&orderBy=newest"
    }
  ],
  "maxItems": 10,
  "includeDetails": true,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ]
  }
}

What do users say about the Immoweb Scraper?

No reviews yet. Be the first.

How do I report an issue with the Immoweb Scraper?

We build and maintain this scraper, so a problem with it comes to us. Report it on the Apify listing and the thread stays attached to the scraper where the next person can find it: open an issue.

Broken and urgent, or you would rather not post in public? Write to parseforge@protonmail.com and it reaches the people who wrote it.

What related scrapers can I use?

Run Immoweb Scraper on Apify All scrapers