# Changelog of Immoweb Agency Scraper: Belgian Real Estate Agencies (`studioxl/immoweb-agency-scraper`) Actor

- **URL**: https://apify.com/studioxl/immoweb-agency-scraper/changelog.md
- **Full Actor documentation**: https://apify.com/studioxl/immoweb-agency-scraper.md

## Changelog

### 0.3 (2026-10-20)

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.

### 0.1 (2026-07-29)

First version, not published.
