NL CAO Wijzigingen Database
Pricing
from $3.00 / 1,000 cao-records
NL CAO Wijzigingen Database
Dutch collective labour agreement (CAO) changes, extracted from official Staatscourant algemeenverbindendverklaring publications. Structured per sector, with wage increase and validity extraction.
NL CAO Wijzigingen Database 🇳🇱
Track Dutch collective labour agreement (CAO) changes as a structured, machine-readable feed — extracted directly from official Staatscourant algemeenverbindendverklaring (avv) publications.
Every year, the Ministry of Social Affairs and Employment (SZW) publishes hundreds of decisions that make CAO provisions binding for an entire sector — new agreements, amendments, extensions, and revocations. Today, that information is only available through slow, API-less web portals (caobank.szw.nl, AWVN Cao-kijker, CAOWijzer) built for human browsing. This actor turns that public stream into clean, structured data: per-sector CAO name, publication type, validity period, and wage-increase percentages where mentioned in the text.
Who is this for?
- Payroll & HR software vendors who need to track CAO updates across sectors instead of following one at a time
- Salarisadministratiekantoren monitoring multiple client sectors for wage table changes
- Employer & employee organisations tracking sector-wide developments beyond their own CAO
- Legal & compliance teams who need an audit trail of avv decisions affecting a sector
- Market researchers analysing Dutch wage trends across industries
- AI agents — clean, flat JSON output, ideal as a tool for agentic workflows (MCP-ready)
When should an AI agent use this?
- "Has the CAO for Bouw & Infra changed recently, and what's the new wage increase?"
- "Which CAOs got a wijziging (amendment) or verlenging (extension) published in the Staatscourant this month?"
- "What's the current looptijd (validity period) of the Sociaal Werk, Welzijn & Maatschappelijke Dienstverlening CAO?"
- "Are there any pending avv requests (verzoek) for the Metaal sector that haven't been decided yet?"
- "List all new algemeenverbindendverklaring decisions (nieuwe_avv) published since January 2026."
- "Did any CAO wage-increase percentage change for a sector I'm already tracking, compared to last week's run?"
What data do you get?
Each result is one Staatscourant avv-publication:
{"id": "stcrt-2025-6395","title": "Besluit van de Minister van Sociale Zaken en Werkgelegenheid van 19 maart 2025 tot wijziging van het besluit tot algemeenverbindendverklaring van bepalingen van de collectieve arbeidsovereenkomst Sociaal Werk, Welzijn & Maatschappelijke Dienstverlening","recordType": "wijziging","caoNaam": "Sociaal Werk, Welzijn & Maatschappelijke Dienstverlening","ministerie": "Ministerie van Sociale Zaken en Werkgelegenheid","publicatiedatum": "2025-03-25","looptijd": "2025","loonsverhogingen": [{ "percentage": 1.13, "datum": "1 januari 2025" }],"onderwerpen": ["loon", "pensioen"],"partijen": ["FNV", "CNV Vakmensen"],"citaat": "… de pensioenpremie wordt met ingang van 1 januari 2025 verhoogd naar 25% …","urlHtml": "https://repository.overheid.nl/frbr/officielepublicaties/stcrt/2025/stcrt-2025-6395/1/html/stcrt-2025-6395.html","urlXml": "https://repository.overheid.nl/frbr/officielepublicaties/stcrt/2025/stcrt-2025-6395/1/xml/stcrt-2025-6395.xml","bron": "officielebekendmakingen","sectorEerderGezien": false,"isWijzigingSignaal": true,"vorigLoonpercentage": 0.75,"loonTrendDelta": 0.38}
recordTypeis derived from the publication's fixed legal phrasing —nieuwe_avv(fresh decision),wijziging(amendment),verlenging(extension),intrekking(revocation), orverzoek(pending request, decision not yet made)caoNaamis the sector/CAO name — extracted from the title, or (for pendingverzoekpublications, which carry no sector name in the title) from the full-text bodylooptijdandloonsverhogingenare best-effort extractions from the official full text — not every publication mentions a wage percentage (some only touch e.g. pension contributions), so these can be emptyonderwerpenis a curated keyword classification of the full text on subject (loon,pensioen,werktijden,verlof,scholing) — so a change that's not about wages (e.g. only pension contributions) is still recognisable instead of looking like an empty, uninformative resultpartijenis a best-effort recognition of known employer/employee organisation names in the full text (e.g.FNV,CNV Vakmensen,VNO-NCW) — an empty array means none of the known names were recognised, not that there are no partiescitaatis a short quote from the full text around the first matchedonderwerpenkeyword, so you can see the actual supporting text without openingurlHtmlyourself.nullif no subject was recognisedisWijzigingSignaalistruefor an explicit amendment/extension, or for a fresh avv covering a sector you've already seen in a previous run (only meaningful withincrementalMode)vorigLoonpercentage/loonTrendDelta(only meaningful withincrementalMode): compares this publication's first wage-increase percentage against the last known percentage for the same sector from a previous run. Both arenullif either value is unknown — never a guessed0
Input options
| Field | Description | Example |
|---|---|---|
sectorKeyword | Free-text filter on the full-text index. Known sector aliases (e.g. "thuiszorg"/"VVT") are automatically expanded to all known variants of the same sector, so a different spelling than the official title doesn't miss results | "Bouw", "Metaal", "Horeca" |
publishedAfter | Only publications from this date | "2026-01-01" |
recordTypes | Which publication types to include | ["nieuwe_avv", "wijziging"] |
maxResults | Cap the number of results | 100 |
incrementalMode | Only new items since previous run + flag previously-seen sectors | true |
alleenSignalen | Only deliver (and charge for) records where isWijzigingSignaal is true or loonTrendDelta is known — lowers the number of cao-record charges for clients who only care about detected changes/trends, not every base publication | true |
Typical use cases
Daily monitoring feed for a payroll provider, wijziging-alerts only:
{"recordTypes": ["wijziging", "verlenging"],"incrementalMode": true}
Track one sector's CAO history:
{"sectorKeyword": "Bouw & Infra","maxResults": 50}
All new avv decisions since a given date:
{"recordTypes": ["nieuwe_avv"],"publishedAfter": "2026-01-01"}
Run summary (key-value store, free)
At the end of each run, a RUN_SUMMARY object is written to the actor's key-value store — no extra charge.
It includes the total records delivered, alert/trend counts, how many records were skipped by
alleenSignalen, and gemiddeldeLoonTrendDelta: the average wage-trend delta across all sectors with a known
trend this run (null if none had one — never a guessed 0). Useful for a quick "how many sectors moved, and
by how much on average" overview without aggregating the dataset yourself.
Scheduling & integrations
- Schedules — run weekly and get only new/changed CAO publications
- Integrations — push results to Google Sheets, Slack, Zapier, Make, or any webhook
- API — fetch the dataset as JSON, CSV or Excel from your own code
- MCP — expose this actor as a tool for AI agents (Claude, Cursor, and other MCP clients)
Data source & legality
This actor uses the official public SRU API of the Dutch government (KOOP / repository.overheid.nl), the same source behind zoek.officielebekendmakingen.nl and the Staatscourant.
- ✅ No scraping of protected websites — official open data API only, no login, no ToS conflicts
- ✅ Sector-wide agreements between employer and employee organisations — no personal data, no natural persons identified
- ⚠️
looptijdandloonsverhogingenare extracted from free text with regular expressions. They are informational — always consult the official publication (urlHtml) for legally binding terms
Pricing
Pay per result: you are only charged for CAO records actually delivered, plus a small extra charge for each detected wijziging-alert (an amendment, extension, or a fresh avv for a sector you've seen before). With incrementalMode enabled, a record where a loon-trend comparison could be made (both vorigLoonpercentage and this record's wage percentage are known) is additionally billed at the loon-trend-signaal rate.
FAQ
How fresh is the data? Publications appear in the feed the same day SZW publishes them in the Staatscourant.
Why is caoNaam sometimes empty? A small number of publications use non-standard title phrasing that doesn't match the sector-name pattern, and the full-text fallback also found nothing. This is rare — check urlHtml for the source in that case.
Why is loonsverhogingen often empty? Not every avv decision changes wages — some only extend a CAO's term, or update non-wage clauses (pension contributions, working hours). An empty array is a normal, expected result.
How do I get only real changes, not pending requests? Set recordTypes to exclude "verzoek" (a verzoek is a request awaiting a ministerial decision, not yet a finalized CAO change).
How does the loon-trend comparison work across runs? With incrementalMode on, the actor remembers the last-seen wage percentage per sector in its key-value store. The next time that sector appears, vorigLoonpercentage and loonTrendDelta are filled in — the very first time a sector is seen, both are null (nothing to compare against yet).
Related Actors
Also by this developer — Dutch/EU public-data actors that pair well with this one:
- NL Vergunningen & Bekendmakingen Leadfeed — same official publication family, turned into commercial leads instead of HR/legal tracking.
- NL & EU Government Tenders Scraper — same "official government publication → structured feed" approach, applied to public procurement tenders.
- PDOK Adres Geocoding & Buurtdata — Dutch address geocoding and neighbourhood demographics, useful if you need to map sector activity geographically.
- NL BESS Vergunningenmonitor — same official publication family, applied to battery-storage (BESS) permit filings instead of CAO changes.
Zoekwoorden: cao database, cao wijzigingen, collectieve arbeidsovereenkomst monitor, algemeenverbindendverklaring scraper, cao loonsverhoging tracker, labour agreement Netherlands, cao sector monitoring.
Keywords
cao, collective labour agreement, arbeidsvoorwaarden, avv, algemeenverbindendverklaring, hr, payroll, netherlands, wage tracker, labour law
Changelog
0.4.0
- Added a curated sector-alias table:
sectorKeywordnow automatically expands to known variants of the same sector (e.g."thuiszorg"also matches"VVT"-titled publications), and extractedcaoNaamvalues are normalized to the canonical spelling. No pricing change. - Added
partijen: best-effort recognition of known employer/employee organisation names (FNV, CNV Vakmensen, VNO-NCW, etc.) in the full text. No pricing change. - Added
alleenSignaleninput: only deliver (and charge for) records with a detected change signal or known wage trend, filtering out routine base publications for clients who only care about changes. Lowers charges for those clients. - Added
citaat: a short quote from the full text around the first matchedonderwerpenkeyword, for audit trails without openingurlHtml. No pricing change. - Added a free
RUN_SUMMARYwritten to the key-value store at the end of each run, including the average wage-trend delta across sectors with a known trend this run. No pricing change.
0.3.1 - Bugfix
- Fixed
incrementalMode(includingloon-trend-signaal) never seeing prior-run state: the actor was reading/writing to Apify's per-Run default key-value store, which is not shared between separate runs. Now uses a named, persistent key-value store. A new baseline will be captured on the next run.
0.3.0
- Added
vorigLoonpercentage/loonTrendDelta(incremental mode) — compares a sector's wage-increase percentage against the last-known percentage for that sector from a previous run. Newloon-trend-signaalevent ($0.01), only charged when both values are known.
0.2.0
- Added
onderwerpen, a curated keyword classification of the full text on subject (loon, pensioen, werktijden, verlof, scholing) — so a non-wage change is recognisable instead of looking like an empty result. No pricing change.
2026-07-12 - Documentation update
- Added a "Related Actors" section cross-linking other actors by this developer.
0.1.0 - Initial release
- Structured CAO avv-publication feed from the official Staatscourant SRU API, with recordType classification (nieuwe_avv, wijziging, verlenging, intrekking, verzoek), sector-name extraction, and best-effort looptijd/wage-increase parsing.