Every Belgian real estate agency on Immoweb.be as a lead list: the agency's own email (not the lead-form relay), phone, website, VAT and IPI numbers, address, opening hours and portfolio size. Add each agency's listings and what it recently sold or let.
Clean-up before publishing: simpler input, fixes for issues found in test runs,
and output columns that are the same on every row.
Fixed
Phone numbers kept the Belgian trunk 0 after +32 (+32092770750). Phone,
mobile and fax are now in international format (+3292770750). A number that
can't be read with confidence is kept exactly as Immoweb shows it.
"Closed" all week for agencies that never published hours (seven empty days or
seven 00:00-00:00 days). All hours columns are now empty for them, and a single
00:00-00:00 day reads "Closed".
region was always empty. It's now Brussels, Flanders or Wallonia, from the
postal code, spelled the same way as on listing rows. Listing rows without a
region get it the same way.
sourceUrl read /en/agency/agency/<id> on rows with the full profile. It's
now the agency's public page, the same as url.
House number inside street.street now holds the street name and
streetNumber (and box, when given) the rest, as on listing rows. address
keeps the full text. Addresses that don't clearly end in a number are left alone.
Columns differed between rows. Directory-only rows had no portfolio, review
or hours columns at all, which shifted CSV exports. Every row now has the same
58 columns in the same order, empty when unknown.
Capped directory searches could stop short of "Maximum agencies" when many
rows on the first pages were group brands or duplicates. Further pages are now
read until the cap is met or the directory ends.
Odd input values no longer crash or silently return nothing: a negative or
non-numeric "Maximum agencies" falls back to 100 with a warning, "50" reads
as 50, "false" as false, and listingType accepts for-sale, FOR_RENT and
similar spellings.
Searching East Flanders, West Flanders, Flemish Brabant or Walloon Brabant by
name failed every time. Provinces are now searched the way Immoweb expects,
checked for all eleven provinces, in English, French and Dutch. Regions
("Flanders", "Wallonie", "Brussels-Capital Region") now work too.
A burst of refused connections at the start could fail the whole run. A
refused page now gets up to three more rounds of attempts, after pauses of
about 5, 15 and 30 seconds, before the run gives up (and charges nothing).
limit, maxResults and resultsLimit were ignored, so an API call asking
for 10 agencies got 100. They now set "Maximum agencies", and win over the form
default that Apify fills in when the field itself wasn't sent.
The run summary (OUTPUT) is written on every run, so the Output tab link works
without listings too.
Clearer status messages when there is nothing to search or Immoweb can't be
reached.
Changed
Input form simplified. The prefill is now postal code 1000 with 10 agencies,
so the first click returns a real directory result. Listing options sit in their
own section, and less common options under "More options".
Three internal tuning fields were removed from the form. Saved tasks and API calls that send them still work.
"Maximum agencies" left out of an API call now means 100 (the form default), not
no limit. Send 0 for no limit.
Field titles and descriptions rewritten in plain English.
Added
minListings ("Minimum active listings"): leave out agencies with fewer listings
online. Agencies you paste by URL or ID are always kept.
Field changes
No field was renamed or removed. street and streetNumber changed content as
described above.
0.2 (2026-10-17)
Rebuilt on the shared code of the Immoweb and Zillow Actors, after Immoweb
redesigned its agency pages. 0.1 was never published.
Fixed
Agency pages were read as empty. Immoweb renamed the data on the agency page,
so 0.1 fell back to the thinner directory row for every agency: no email and no
portfolio split.
The email was often a lead relay. On 54% of offices the first address is a
lead-routing service (importfrommedia.be, fortissimmo.net, omniwebsites.be,
skarabee.com, apilead.net, realsuite.be). email is now the agency's own address
when it has one (93% of offices), and the relay is in leadEmail.
Groups. Group brands no longer have a page on Immoweb, and some carry a numeric
id, so 0.1's "numeric id means an office" test let groups through as broken
profiles. Groups are recognised by type, skipped by default, and have no url.
Portfolio counts. The count tree gained two levels, which 0.1 misread as sold.
Listings piled up across runs. They went to a permanent named dataset; they now
go to a dataset of the run itself, linked from the Output tab.
Added
Every listing an agency has online (1,997 on the largest seen), in one pass.
0.1 missed property types it was not told about.
Recently sold and let properties (includeSoldOrRented), which Immoweb shows
on the agency page but no search returns.
Portfolio by type (activeHouses, activeApartments, activeCommercial,
activeOffices, activeIndustrial, activeGarages, activeLand, activeOther),
newListingsCount, forSaleSold, forRentLet, rating, reviewCount,
emails, someHoursByAppointment.
Inputs from anywhere: agency URLs in English, French or Dutch, bare agency ids,
the directory URL with its filters, the agency's "all properties" search link,
uploaded URL lists, and provinces or postal codes typed the way CRMs export them
("Provincie Antwerpen", "B-1050 Ixelles, Belgium"). 0.1's field names still work.
Agencies you list come first. With a cap, directory searches share the slots
left after the agencies you named.
maxItemsPerLocation, listingType.
Edge cases, each with a test
Unknown postal code or province: reported by name, nothing charged.
A town name on its own: skipped with a hint to use the postal code, since Immoweb
reads a town as a wider area.
An agency that has left Immoweb (404, or a redirect to the home page): reported,
not charged. One still in the directory keeps its directory row.
A listing, home page or plain search pasted by mistake: skipped with a specific reason.
The same agency in two languages, or as a URL and an id: fetched and charged once.
A listing shown in two sections of an agency page: charged once.
Item cap reserved under a lock; the crawl stops at your maximum charge.
Every run that delivers nothing ends with the reason and "nothing was charged".
Removed
type (besides groups it only says how an office pays Immoweb), groupId,
groupName and descriptionEn, which were empty on all 149 offices sampled.
propertyTypes, transactionTypes and maxDirectoryPages: no longer needed,
accepted and ignored so a saved 0.1 task still runs.