NL Hospital Waiting Times Monitor (NZa Treeknorm)
Pricing
from $4.00 / 1,000 wachttijd-records
NL Hospital Waiting Times Monitor (NZa Treeknorm)
Wettelijk verplichte NZa-wachttijden per ziekenhuis/behandelcentrum en behandeling, met automatische Treeknorm-overschrijdingsdetectie.
Pricing
from $4.00 / 1,000 wachttijd-records
Rating
0.0
(0)
Developer
Dennis
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
5 hours ago
Last modified
Categories
Share
NL Hospital Waiting Times Monitor (NZa Treeknorm) ๐ฅ
Official, legally mandated waiting-time data for every Dutch hospital and independent treatment center (ZBC), straight from the NZa Zorgbeeldportaal โ the same open data Dutch care providers are legally required to submit monthly. No login, no API key, no scraping: this is a direct government REST feed.
Why this actor?
Dutch hospitals and independent clinics are legally obliged (NZa Regeling NR/REG-2421) to report their waiting times per treatment/specialism every month. This data is public, but it's only exposed via a JSON/XML REST endpoint with no filtering UI and no built-in "is this normal?" signal โ you get a raw number of days per care provider/treatment, and you have to know the Treeknorm (the Dutch national waiting-time norm) yourself to know if it matters.
This actor does that interpretation for you:
- โ Automatic Treeknorm-overschrijding detection โ flags every record that legally exceeds the norm (28 days for outpatient visits/diagnostics, 49 days for treatment)
- ๐ฅ Full provider + location detail โ care provider name, KVK number, AGB codes, exact address per location
- ๐ Specialism and treatment-type filtering โ narrow down to a specialism (e.g. "cardiologie") or treatment type without downloading the full dataset
- ๐ National dataset, zero configuration โ leave the input empty and get the entire country (~11,000 records) in one run
- ๐ซ No personal data โ this is aggregated, per-provider/per-treatment data with an explicit "insufficient observations" flag from the NZa itself; individual patients are never identifiable
When should an AI agent use this?
- "Which hospitals near me have the shortest waiting time for cardiology?"
- "Is this hospital's waiting time for hip surgery exceeding the legal Treeknorm?"
- "Compare waiting times for ophthalmology treatments across all providers in the Netherlands."
- "Which care providers are currently violating the Treeknorm for outpatient visits?"
- "Get me the current waiting time for [specific KVK number / care provider]."
- "Track whether waiting times for a specific treatment are improving month over month."
What this Actor does
- Fetches waiting-time records from the NZa Zorgbeeldportaal REST API (
zorgbeeld.nza.nl) - Maps every raw record into a flat, analysis-ready JSON object
- Computes the applicable Treeknorm limit per treatment type and flags violations
- Filters by KVK number(s), specialism (substring search) and/or treatment type
- Caps output per run so you control dataset size and cost
Input
| Field | Type | Description |
|---|---|---|
kvkNummers | string[] | Exact KVK numbers of care providers to fetch. Leave empty for the entire national dataset. |
specialismQuery | string | Case-insensitive substring match against the medical specialism, e.g. "oogheelkunde". |
treatmentTypes | string[] | Filter on "Behandeling" (treatment), "Polikliniekbezoek" (outpatient visit) and/or "Diagnostiek" (diagnostics). Leave empty for all. |
alleenTreeknormOverschrijding | boolean | Only return combinations that exceed the legal Treeknorm. Default false. |
maxResults | integer | Cap on output records per run (default 5000, max 20000). |
trackTrend | boolean | Compares each provider/location/treatment combination with the previous run and flags a first-time Treeknorm violation. Default false. |
Output
{"kvkNummer": "30178964","zorgaanbieder": "Eyescan Shared Service Centre B.V.","zorgaanbiederAgbCode": "22220126","locatie": "Eyescan Wassenaar","locatieAgbCode": "22220126","adres": {"straat": "Rijksstraatweg","huisnummer": "324B","postcode": "2242AB","stad": "Wassenaar"},"specialisme": "Oogheelkunde (301)","behandeling": "Ooglidcorrectie (oogheelkunde)","behandelingBeschrijving": "Ooglidcorrectie (oogheelkunde) Zorgactiviteitencode(s): 31563, ...","behandelType": "Behandeling","wachttijdDagen": 180,"treeknormLimietDagen": 49,"treeknormOverschreden": true,"voldoendeWaarnemingen": true,"meetdatum": "2026-07-13T12:29:04.334Z","rangnummerKortsteWachttijd": 3,"treeknormOverschrijdingsFactor": 3.67,"treeknormOverschrijdingsDagen": 131,"treatmentKey": "TK-oogheelkunde-ooglidcorrectie","locationKey": "LK-eyescan-wassenaar","nieuweOverschrijding": null,"overschrijdingOpgelost": null,"bron": "NZa Zorgbeeldportaal"}
treeknormOverschrijdingsFactor/treeknormOverschrijdingsDagen are always computed, not only for
violations: the factor is the ratio of waiting time to the Treeknorm limit (1.0 = exactly on the norm), and
treeknormOverschrijdingsDagen is the absolute day difference (negative = comfortably within the norm). This
tells 2 days late apart from 180 days late, instead of a flat boolean.
Trend tracking (trackTrend, optional, separately charged)
With trackTrend: true, every provider/location/treatment combination (treatmentKey+locationKey) is
compared with the previous run:
nieuweOverschrijding:nullwhen no previous run exists for this combination; otherwisetrueonly when the Treeknorm is violated this run for the first time (it wasn't violated last run),falseotherwiseoverschrijdingOpgelost: symmetric withnieuweOverschrijdingโnullwhen no previous run exists; otherwisetrueonly when a combination that violated the Treeknorm last run no longer does this run,falseotherwise
This is the actionable "getting worse"/"getting better" signal for scheduled/recurring runs โ a subscriber sees new violations and resolved violations appear instead of just a snapshot every time.
Use cases
- Patient decision support โ compare waiting times across providers before choosing where to go
- Referrer (huisarts) tooling โ check current waiting times when referring a patient
- Insurer / benchmarking dashboards โ track Treeknorm compliance across the sector over time
- AI agents & MCP tools โ flat JSON, small input schema, direct yes/no Treeknorm signal
- Journalism / research โ analyze which specialisms or regions have the worst access to care
Pricing
This Actor uses Apify's Pay-Per-Event (PPE) pricing model.
- Actor Start: $0.00005 (Apify default)
- wachttijd-record: $0.004 per plain waiting-time record (raised from $0.003 โ now always includes the
treeknormOverschrijdingsFactor/-Dagenseverity fields, not just a boolean) - treeknorm-overschrijding-alert: $0.01 per record that exceeds the legal Treeknorm โ priced higher because this is the actionable signal (a provider legally failing to meet the national norm), not just a data point
- nieuwe-overschrijding-signaal: $0.018 extra, only with
trackTrendenabled and only when a combination violates the Treeknorm for the first time compared to the previous run - overschrijding-opgelost-signaal: $0.018 extra, only with
trackTrendenabled and only when a combination that violated the Treeknorm last run no longer does this run
Legal
- Source: NZa Zorgbeeldportaal (
zorgbeeld.nza.nl), an official Dutch government (Nederlandse Zorgautoriteit) open data feed. Care providers are legally required to submit this data monthly under NZa Regeling NR/REG-2421. - No authentication, no scraping โ this is a direct, public REST API intended for reuse.
- Data is aggregated per care provider/location/treatment. The NZa itself withholds figures with insufficient underlying observations (
voldoendeWaarnemingen: false) to prevent individual patients from being identifiable โ this actor passes that flag through and never overrides it. - No personal data of any kind is collected, stored, or output.
FAQ
Q: What is the "Treeknorm"? A: A widely recognized Dutch national waiting-time norm: max. 4 weeks (28 days) for an outpatient visit or diagnostics, max. 7 weeks (49 days) for treatment. This actor applies it automatically per record.
Q: Why is treeknormOverschreden always false for some records even though wachttijdDagen is high?
A: If voldoendeWaarnemingen is false, the NZa itself flagged the underlying observation count as too low to publish a reliable figure โ this actor never marks such a record as a Treeknorm violation.
Q: How do I find a care provider's KVK number?
A: Run once with specialismQuery or no filter at all โ every returned record includes the kvkNummer, reusable in future targeted runs.
Q: What is rangnummerKortsteWachttijd?
A: A rank (1 = shortest waiting time) among all records in this run that share the same specialism and treatment โ answers "which provider has the shortest wait for X" directly, without you having to sort the output yourself. It's computed only over the records this run returns, not the full national dataset, unless you ran with no filters at all.
Q: How often is the data updated? A: The NZa updates this feed roughly every two weeks; a weekly or monthly scheduled run is more than sufficient.
Related Actors
Also by this developer:
- ../nl-waterstanden-monitor โ same profile: a direct, authentication-free Dutch open-government-data REST feed with no scraping involved.
- NL Parking Monitor โ same profile: a direct, authentication-free Dutch open-government-data feed (RDW), no scraping involved.
- NL Milieuzones & Zero-Emissiezones Monitor โ same profile: a direct, authentication-free NDW road-traffic-data feed, no scraping involved.
Keywords: nza wachttijden, ziekenhuis wachttijd, treeknorm, zorgbeeldportaal, dutch hospital waiting times, medisch specialistische zorg, wachtlijst ziekenhuis, healthcare data netherlands.
Keywords
netherlands, healthcare, hospital, waiting-time, nza, treeknorm, open-data, government-data, mcp-tool
Changelog
0.4.0
- Added
overschrijdingOpgelostfield and a new charged eventoverschrijding-opgelost-signaal($0.018, same tier asnieuwe-overschrijding-signaal): symmetric trend signal for a combination that violated the Treeknorm last run and no longer does this run. Only withtrackTrendenabled. Price confirmed by the user (2026-07-16, see docs/actor-verbeteringen/PRIJSBESLISSINGEN.md). New event โ must still be created in Apify Console > Monetization before the nextapify push.
0.3.1 - Bugfix
- Fixed
trackTrend(nieuwe-overschrijding-signaal) never seeing prior-run state: the actor was reading/writing its snapshot 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
treeknormOverschrijdingsFactor/treeknormOverschrijdingsDagenโ an always-computed severity measure (not just a boolean), distinguishing 2 days late from 180 days late.wachttijd-recordraised from $0.003 to $0.004 to reflect this. - Added
trackTrend: compares each combination with the previous run and flags first-time Treeknorm violations. New charged eventnieuwe-overschrijding-signaal($0.018). - Both confirmed by the user (2026-07-14, see docs/actor-verbeteringen/PRIJSBESLISSINGEN.md).
0.2.0
- Added
rangnummerKortsteWachttijdโ ranks each record (1 = shortest wait) against others in the same run sharing the same specialism/treatment, so "shortest waiting time near me" no longer requires sorting 11,000 records yourself. No pricing change.
0.1.0 - Initial release
- Fetch waiting-time records from the NZa Zorgbeeldportaal REST API, optionally scoped to one or more KVK numbers.
- Automatic Treeknorm-limit computation and violation flagging per treatment type.
- Specialism (substring) and treatment-type filtering.
- Pay-per-event pricing: base record vs. higher-value Treeknorm-violation alert.