Slicegraph

← All posts

How to turn Dutch building permits into a B2B trigger feed

· Slicegraph

Dutch building permits (omgevingsvergunningen) are the public authorizations a company needs before it can build, rebuild, extend, or change the use of a property in the Netherlands. Every application and every grant is published, by law, in the official government gazette. Each publication is a timestamped public record that a specific organization in a specific municipality is about to spend money: on construction, fit-out, equipment, logistics, and every service a physical project pulls in behind it. That makes permit data one of the few genuinely predictive B2B triggers available for the Dutch market. Outbound converts when something just happened; a permit filing is "something just happened," with a name, a place, and a date attached.

Where the data actually lives

There is no single "bouwvergunningen API" run by the Dutch government. What exists is KOOP, the publications office behind officiëlebekendmakingen.nl, which exposes every official gazette publication (including permit applications and grants from municipalities, provinces, and water authorities) through an SRU API. SRU is a library-catalog protocol from another era: XML records, free-text titles, no company identifiers, no dedupe, and residential noise mixed in with the commercial projects you care about.

Slicegraph ingests this source daily and does the unglamorous work between "public data exists" and "my SDR can act on it": normalizing each publication into a typed signal, deduplicating repeat announcements, and resolving the applicant to a company where possible. You can see exactly what we ingest and how on our sources page.

Applied vs. granted: two different buying moments

A permit produces two distinct signals, and they deserve different plays.

permit_applied is the earliest public trace of a project. A company that files for a permit has already committed internally, with an architect engaged, plans drawn and budget being assembled, but the project is still weeks to months from breaking ground. This is when construction subcontractors, fit-out specialists, equipment lessors, installers, security and facility vendors want the first conversation. You are not interrupting; you are showing up while the shortlist is still being written.

permit_granted confirms the project is real and funded. The municipality has signed off, the clock on execution has started, and objection windows aside, the spend is now committed. Granted permits are the trigger for anyone selling into the execution phase: site logistics, scaffolding, waste handling, temporary staffing, insurance, energy connections.

Same dataset, two entry points into the deal. One predictive, one confirmatory.

Why the raw feed is unusable without cleaning

Three problems make raw gazette data hostile to sales teams.

First, identity. Publications carry addresses and free-text descriptions, not KvK numbers. Slicegraph resolves permit signals to companies fuzzily, by normalized name and city, and leaves the signal unattributed when confidence is low rather than guessing wrong.

Second, privacy. A large share of permit publications concern private individuals renovating their homes. Slicegraph never emits those. Permit signals are intentionally company-level only. Natural persons are filtered out at ingestion, which keeps your outreach on the right side of GDPR without you having to think about it.

Third, noise. The same project can surface in multiple publications across bodies and stages. Every signal in our feed carries a stable dedupe key, so one project does not become five "leads."

What a permit signal looks like

Every signal comes out of the API in the same shape, whatever the source:

{
  "id": "5a3f...",
  "family": "permit",
  "type": "permit_applied",
  "title": "Aanvraag omgevingsvergunning, Keizersgracht ...",
  "region": "amsterdam",
  "occurred_at": "2026-08-14T00:00:00.000Z",
  "url": "https://www.officielebekendmakingen.nl/...",
  "company_id": "42bd...",
  "company_name": "Voorbeeld B.V.",
  "kvk_number": null,
  "payload": { "...": "..." }
}

region is always a lowercase municipality slug, occurred_at is the publication date, and url links back to the official source so anyone downstream can verify the record. The full parameter list is in the API docs.

Piping permits into Clay

The fastest way to operationalize this is a Clay table that fills itself. Two patterns work; here is the pull-based one.

  1. Add an HTTP API enrichment column to your Clay table.
  2. Set the method to GET and the endpoint to:
https://slicegraph.com/api/v1/signals?family=permit&type=permit_applied&region=amsterdam&since=2026-08-01&limit=100
  1. Add the header Authorization: Bearer sg_live_... with your API key.
  2. Map data[0].company_name, data[0].title, data[0].occurred_at, and data[0].url into columns, and trigger your sequence when occurred_at is within the last few days.

Swap region per table (or drop it for all of the Netherlands), and swap type to permit_granted for an execution-phase table. All filters combine, and cursor pagination handles volume beyond the 200-per-page limit.

If you would rather not poll, register a webhook subscription with POST /api/v1/subscriptions, point target_url at a Clay webhook source, and set the filter to { "families": ["permit"], "regions": ["amsterdam"] }. New signals then stream into your table as they are ingested, each delivery signed with an X-Slicegraph-Signature HMAC header so you can verify it came from us.

What the feed covers today

Right now Slicegraph tracks 4,220 permit events across 341 Dutch municipalities, inside a live dataset of 9,817 signals across 523 regions. The most active municipalities are Amsterdam, Den Haag, Amersfoort and Rotterdam. You can browse the live permit feed for Amsterdam and the Rotterdam permit feed without an account, or watch everything arrive in the live feed.

Because ingestion runs daily against the official gazette, a permit filed this week is in your Clay table this week, not in next quarter's purchased list where twenty competitors already have it.

The economics

A single won deal from a permit trigger pays for years of the feed. The Feed plan is €99/month for one signal family (permits, in this case), and Growth at €149/month adds procurement and e-invoicing signals across the Netherlands and Belgium. If you want lists instead of an API, Concierge starts at €750/month and we run the pipeline for you. Details on the pricing page.

Start with the free sample feed: we will send you a slice of recent permit signals for your region and ICP so you can judge the data before wiring anything up. Ask at hello@slicegraph.com.

Explore the data

See the live building permits feed, browse every region we track, or check pricing.

Related reading