NL Traffic Congestion Index Monitor (NDW) avatar

NL Traffic Congestion Index Monitor (NDW)

Pricing

from $8.00 / 1,000 filedruk-groep-records

Go to Apify Store
NL Traffic Congestion Index Monitor (NDW)

NL Traffic Congestion Index Monitor (NDW)

Check live Dutch traffic congestion (filedruk, verkeersdrukte) per province or road network in one call โ€” real vs. free-flow travel time from NDW open data, pre-classified per province with optional alerts/trend, skipping raw DATEX II XML parsing. From $0.008/record, PPE.

Pricing

from $8.00 / 1,000 filedruk-groep-records

Rating

0.0

(0)

Developer

Dennis

Dennis

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

16 days ago

Last modified

Categories

Share

NL Traffic Congestion Index Monitor (NDW) ๐Ÿ‡ณ๐Ÿ‡ฑ๐Ÿš—

Live traffic congestion index per Dutch province, computed from the official NDW (Nationale Databank Wegverkeersgegevens) open-data travel-time feed. No configuration required, no API key, no scraping โ€” this actor fetches NDW's real-time DATEX II travel-time publication, compares actual measured travel time against each measurement point's free-flow reference value, and aggregates the result into one congestion score per province (plus separate national-highway and municipal-road summaries).

Who is this for?

  • Logistics planners & fleet operators โ€” quick daily congestion signal per province, no need to parse raw NDW feeds yourself
  • Real-estate & site-selection analysts โ€” accessibility context for a region, alongside other location data
  • Media/data journalists โ€” a ready-made national congestion index for reporting
  • AI agents โ€” structured JSON output, ideal as a tool for agentic workflows (MCP-ready)

When should an AI agent use this?

  • "What's the current traffic congestion level in Zuid-Holland?"
  • "Which Dutch province has the worst traffic right now?"
  • "Give me a national traffic congestion snapshot."
  • "Alert me when congestion in Noord-Brabant crosses a certain threshold."

What this Actor does

  • Fetches NDW's live traveltime.xml.gz feed (updated roughly every minute, DATEX II/XML format)
  • For every measurement point, compares the actual/reconstituted travel time against its static free-flow reference value
  • Classifies each measurement point to a province using the road authority's own site-ID naming convention (see Methodology below) โ€” measurement points on national highways or municipal roads that can't be attributed to a specific province are reported as separate summary groups instead of being silently dropped
  • Aggregates to one record per group: number of measurement points, average travel-time ratio, and a derived 0-100+ congestion score
  • Optional threshold alerting: flag groups whose congestion score crosses a value you set

Methodology (please read before use)

NDW's own measurement-site IDs for provincial roads follow the pattern P<province-code><number>_... (e.g. PNB05_BRE_Keizerstraat_N01). This is the road authority's own convention, not something this actor invents. It was empirically verified on 2026-07-15 by resolving 11 measurement points (spanning 10 of the 12 province codes) to their real coordinates via NDW's own location table and reverse-geocoding each one with the official PDOK Locatieserver โ€” all 11 matched the expected province.

  • Known edge case: a handful of specific road segments run right along a province border (e.g. a bridge/dam connecting two provinces). Such a segment is grouped under the province that administers it, which can occasionally differ from strict geographic containment.
  • Measurement points on the national highway network (RWS...) generally don't carry a province code at all โ€” these are reported as "Rijkswegennet (niet provinciaal ingedeeld)", a separate group.
  • Measurement points on municipal roads (G...) are reported as "Gemeentelijk wegennet".
  • Anything that doesn't match a known prefix is reported as "Overig/onbekend wegbeheerder" โ€” nothing is ever silently excluded from the totals.

This actor does not perform per-point geocoding at runtime โ€” that would require tens of thousands of lookups per run and isn't practical. The province classification is a static, empirically spot-checked mapping from the road authority's own ID prefix.

Input

FieldTypeDescription
provinciesarray of stringsLimit output to these exact province names (e.g. "Noord-Holland"). Empty (default) = all provinces plus the non-provincial groups.
includeOngeclassificeerdbooleanAlso return the national-highway and municipal-road summary groups (default true)
minMeetpuntenintegerSkip groups with fewer measurement points than this (default 5)
alertDrempelintegerCongestion-score threshold (0-100+) that triggers a paid high-congestion alert for a group. Leave empty to disable.
trackTrendbooleanCompare each group's score against the previous run and flag rising/falling/unchanged. Default false.
topNPerGroepintegerInclude the N busiest individual measurement points per group (1-50). Leave empty to disable.

Output

One record per group (province, or non-provincial category):

{
"groep": "Zuid-Holland",
"classificatieMethode": "provincie-wegbeheerder-prefix",
"aantalMeetpunten": 2807,
"gemiddeldeReistijdRatio": 1.253,
"filedrukScore": 25,
"hogeFiledrukAlert": true,
"dagdeel": "ochtendspits",
"publicatietijd": "2026-07-15T09:37:42.012Z",
"trend": null,
"bron": "NDW Open Data โ€” traveltime.xml.gz (opendata.ndw.nu, DATEX II)"
}
  • gemiddeldeReistijdRatio: average of (actual travel time / free-flow reference time) across the group's measurement points that have a reference value
  • filedrukScore: round((ratio - 1) * 100), floored at 0 โ€” 0 means at-or-below free-flow speed on average, 25 means travel times are running ~25% above free-flow, etc.
  • classificatieMethode: "provincie-wegbeheerder-prefix" for province groups, "niet-provinciaal" for the national-highway/municipal-road/unknown groups
  • hogeFiledrukAlert: null when alertDrempel isn't set, otherwise true/false
  • dagdeel: "ochtendspits"/"avondspits"/"dal", derived from publicatietijd converted to Europe/Amsterdam local time (DST-aware). null if publicatietijd is unknown
  • trend: null unless trackTrend is enabled; otherwise "oplopend"/"dalend"/"gelijk" compared to the previous run, or null on the very first run (no prior snapshot yet)

Trend between runs (trackTrend, optional, separately charged)

With trackTrend: true, the actor stores each group's filedrukScore in its key-value store after every run and compares against it on the next one. Each record then gets a trend field: "oplopend" (higher than last run), "dalend" (lower), or "gelijk" (same). The very first run (no stored snapshot yet, or a group that's new) always gets trend: null. Charged as trend-signaal, only for groups actually flagged "oplopend" or "dalend" โ€” an unchanged group is never charged.

Top-N busiest measurement points (topNPerGroep, optional, separately charged)

With topNPerGroep set (e.g. 5), each group record gets a topMeetpunten array with the N individual measurement points that have the highest travel-time ratio within that group, sorted descending:

{
"groep": "Zuid-Holland",
"topMeetpunten": [
{ "siteId": "PZH04_A20_Gouda_L01", "reistijdRatio": 2.31 },
{ "siteId": "PZH04_A12_Zoetermeer_L02", "reistijdRatio": 2.08 }
]
}

Charged as meetpunt-detail, once per measurement point actually included (e.g. topNPerGroep: 5 on a run with 10 groups charges up to 50 meetpunt-detail events, on top of the 10 filedruk-groep-record events).

National summary (free extra dataset record)

Whenever there's at least one group record in the run, one extra record with

"type": "landelijke-samenvatting"
is pushed to the dataset (no extra charge) โ€” the national average filedrukScore, the busiest province (drukstProvincie/drukstProvincieScore), and the total count of groups that triggered hogeFiledrukAlert this run:

{
"type": "landelijke-samenvatting",
"aantalGroepen": 12,
"gemiddeldeFiledrukScore": 18.4,
"drukstProvincie": "Zuid-Holland",
"drukstProvincieScore": 25,
"aantalAlerts": 2,
"dagdeel": "ochtendspits",
"publicatietijd": "2026-07-15T09:37:42.012Z",
"bron": "NDW Open Data โ€” traveltime.xml.gz (opendata.ndw.nu, DATEX II)"
}

Use cases

Just the provinces, no national-highway/municipal noise:

{ "includeOngeclassificeerd": false }

Watch specific provinces with an alert:

{ "provincies": ["Noord-Holland", "Zuid-Holland", "Utrecht"], "alertDrempel": 30 }

Pricing

This Actor uses Apify's Pay-Per-Event (PPE) pricing model.

  • Actor Start: $0.00005 (Apify default)
  • filedruk-groep-record: $0.008 per group record delivered
  • hoge-filedruk-alert: $0.02 extra, only when alertDrempel is set and a group's congestion score reaches it
  • trend-signaal: $0.0125 extra, only with trackTrend enabled and a group actually flagged "oplopend" or "dalend"
  • meetpunt-detail: $0.005 per measurement point, only with topNPerGroep set, per point actually included
  • Data source: NDW (Nationale Databank Wegverkeersgegevens), opendata.ndw.nu โ€” a joint open-data service of Rijkswaterstaat, provinces, and municipalities, explicitly published for reuse. No authentication required.
  • Purely aggregated traffic-flow measurements on the road network โ€” no license plates, no individual vehicle identification, no personal data.
  • Province classification is a best-effort, empirically spot-checked heuristic based on the road authority's own ID convention (see Methodology above), not an officially published NDW mapping table.

FAQ

Q: How current is the data? A: NDW updates the travel-time feed roughly every minute. Each run reflects a live snapshot at the moment it runs โ€” schedule the actor periodically (e.g. hourly) to build a time series.

Q: Why do some groups have far more measurement points than others? A: Coverage reflects NDW's actual sensor/camera/floating-car-data network, which is denser in the Randstad and along major national highways. This isn't adjustable.

Q: What if a province name I pass in provincies doesn't match anything? A: You'll get zero records for that run โ€” province names must match exactly (e.g. "Noord-Holland", not "Noord Holland" or "NH").

  • PDOK Locatieserver โ€” used during this actor's own development to verify the province-classification methodology above.

Zoekwoorden: filedruk, verkeersdrukte, reistijdindex, NDW verkeersdata, files per provincie, verkeerscongestie Nederland, filedruk monitor, actuele filedruk.

Keywords

traffic congestion, filedruk, ndw, travel time index, netherlands traffic, road congestion, datex ii, verkeersdata

Changelog

0.3.0 - Agent-readiness: task-oriented description

  • Rewrote the Store description/short description (task-oriented first sentence, explicit NL/EN synonyms "filedruk"/"verkeersdrukte"/"congestion", a decision-benefit sentence, and a plain-text price indication) as part of the portfolio-wide agent-readiness pass. No code, schema, or pricing change โ€” .actor/actor.json and STOREINFO.md are kept identical.

0.2.0 - Trend detection & top-N busiest measurement points

  • Added trackTrend โ€” compares each group's filedrukScore against the previous run via a named key-value-store snapshot, flags trend as "oplopend"/"dalend"/"gelijk". New trend-signaal event ($0.0125), only charged for groups actually flagged rising or falling.
  • Added topNPerGroep โ€” includes the N individual measurement points with the highest travel-time ratio per group (topMeetpunten). New meetpunt-detail event ($0.005 per point), only charged per point actually included.

0.1.1

  • Added dagdeel (ochtendspits/avondspits/dal) per record, derived from publicatietijd in NL-local time. No pricing change.
  • Added a free landelijke-samenvatting dataset record per run (national average, busiest province, alert count). No pricing change.

0.1.0

  • Initial release: live NDW travel-time feed aggregated into a congestion index per province, with national-highway/municipal-road summary groups and optional threshold alerting.