Belgian Building-Permit Monitor — Omgevingsvergunning Delta avatar

Belgian Building-Permit Monitor — Omgevingsvergunning Delta

Pricing

from $5.00 / 1,000 results

Go to Apify Store
Belgian Building-Permit Monitor — Omgevingsvergunning Delta

Belgian Building-Permit Monitor — Omgevingsvergunning Delta

Delta monitor for the Flemish building-permit register (Omgevingsloket Inzage): new permits, public-openings, decisions — surfaced run-over-run as fresh events, filterable by gemeente and stage. Not a stateless re-export. Source: Vlaanderen open data (Modellicentie voor gratis hergebruik).

Pricing

from $5.00 / 1,000 results

Rating

0.0

(0)

Developer

Vesper

Vesper

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

13 days ago

Last modified

Categories

Share

Belgian Building-Permit Monitor — Flemish Omgevingsvergunning Delta

Delta monitor for the Flemish building-permit register (Omgevingsloket Inzage) — new permits surfaced run-over-run as fresh events, not a stateless re-export. Each run performs a full-register scan (~10 requests, seconds) and emits only what is new since the previous run of the same actor.

Why a delta monitor

The register is public but passive: it is a rolling window you would have to re-read daily and diff by hand — thousands of rows, rows also silently vanish. This actor does the diff for you: every event it emits is new since the last run (or new under your filters), so the output is a clean daily signal.

Use cases

  • Demolition and renovation contractors — a fresh permit is the earliest reliable signal of an upcoming project; demolition is typically the first trade on site. Build a pipeline of sites before they exist.
  • Architects & developers — watch filings appear in your municipalities.
  • Notaries & real-estate — track permit activity around streets you already cover.
  • Researchers & press — a structured daily feed of permit flow per municipality, with geographic points for mapping.

What an event looks like

  • event: APPEARED — a project just appeared in the register (or under your filters) at this run: project number, name, gemeente, stage, address, Lambert-72 WKT point + WGS84 lat/lon.
  • event: DISAPPEARED (optional, off by default) — a previously-seen project vanished from the register (it is a rolling window; rows expire).
  • recordType: run_status — one line per run with scan/delta counters (the actor's own heartbeat).

Stages: AKTENAME (fresh filing — earliest signal), OPENBAARONDERZOEK (public inquiry open), BESLISSING (decision recorded). Default emits the two earliest.

Input

FieldTypeMeaning
gemeentenarray of stringsOfficial Flemish municipality names, case-insensitive (e.g. ["Antwerpen", "Waregem"]). Empty = all of Flanders.
stageAktename / stageOpenbaaronderzoek / stageBeslissingbooleansWhich stages emit: fresh filing / public inquiry / decision. First two on, decision off by default (decision is historical and high-volume).
emitDisappearedbooleanAlso emit tombstone events for vanished rows. Default false.
fetchDetailsbooleanAdd the project's top "voorwerpen" (e.g. kaartLabel like "company — subject") per emitted event; a few extra requests per event. Default false.

Scheduling

Run it daily (Flanders sees roughly 30–80 fresh filings state-wide per day). Delta state lives in the actor's own named key-value store — nothing to configure.

Two things to expect:

  1. First run seeds silently. A run whose input shape has never been seen emits no events — it records the register's current state, and events start from your second run. This is deliberate: a first run emitting ~9,000 rows is a re-export, not a delta.
  2. The delta cursor is scoped to your input. Runs with different input (municipalities/stages/flags) each keep their own cursor; runs with identical input share one — if you run the exact default input, your cursor is shared with other default-input runs, so the first run of a day sees the most. To get a dedicated cursor with near-default semantics, pass anything that changes the output, e.g. {"fetchDetails": true}; a run with a non-default flag value (e.g. explicitly false where the default is already false) resolves to the same filter set and still shares.

Notes on the data

  • Source: Flanders — Omgevingsloket Inzage, open data. Re-use under the Flemish "Modellicentie voor gratis hergebruik" (free re-use with attribution).
  • Point coordinates are Belgian Lambert 72 (EPSG:31370) exactly as the register emits them; WGS84 lat/lon are derived (Belge 1972→WGS84 transformation, ~metre-class accuracy).
  • No per-project deep-links: the register offers no verified stable permalink per project, so events carry the register base URL and the projectnummer — search it in the Omgevingsloket Inzage.
  • Privacy: events deliberately carry no applicant or company names/contact details. The register's own document chain (one click deeper, freely public) contains them; we leave that decision and its compliance burden to the user of the data, and we exclude names from our output by design.
  • Register contents change between a filing and publication — the register is the authority; this monitor's value is timing and filtering, not legal status.

Development / source

  • Full source in the actor repository; the register client, PoW handling and delta engine are small, readable Node modules.
  • Fixture-driven tests (npm test) run entirely against saved register snapshots — no live hits in tests.

About the developer

Vesper — independent developer of small, verified open-data monitors on Belgian public registers. Every parser is fixture-tested; full source ships with the actor.