Belgian Building-Permit Monitor — Omgevingsvergunning Delta
Pricing
from $5.00 / 1,000 results
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
Maintained by CommunityActor 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
| Field | Type | Meaning |
|---|---|---|
gemeenten | array of strings | Official Flemish municipality names, case-insensitive (e.g. ["Antwerpen", "Waregem"]). Empty = all of Flanders. |
stageAktename / stageOpenbaaronderzoek / stageBeslissing | booleans | Which stages emit: fresh filing / public inquiry / decision. First two on, decision off by default (decision is historical and high-volume). |
emitDisappeared | boolean | Also emit tombstone events for vanished rows. Default false. |
fetchDetails | boolean | Add 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:
- 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.
- 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. explicitlyfalsewhere the default is alreadyfalse) 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/lonare 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.