It is the middle of September and every winter feed we carry says the roads are fine. Illinois reports clear on 9,639 segments. Alberta and Saskatchewan say bare dry. California has 1,009 chain-control checkpoints live and every single one reads R-0 — no restriction in force. That is the correct answer today, and it is exactly why this is the right week to wire the layer, not the second week of November when a dispatcher is refreshing six DOT pages by hand at 5 a.m.
Because from October the thing that ruins a run usually is not an incident. It is a condition. Nothing is closed, nothing is crashed, there is no event to query — the road is simply covered, and the question is whether your driver should be on it. That question lives in a different dataset from the one your incident feed reads, and it is the least standardized dataset in North American road data.
Conditions Are Not Incidents, and They Are Not in Your Events Feed
An incident feed answers what happened at this point. A conditions feed answers what this stretch is like right now — which is a property of a segment, published on its own cadence, usually by a different part of the same agency. If you are reading only events, a corridor with 200 miles of snow-covered pavement and no crashes on it looks identical to a corridor in July.
We carry that layer as road_conditions. Here is what it actually holds, read from production on 17 September 2026, 12:42–13:02 UTC — a single snapshot, and a deliberately off-season one:
- 17,407 active condition segments across 21 states and provinces — Illinois 9,246, Alberta 1,237, Wisconsin 1,175, North Dakota 750, Ontario 546, Montana 544, South Dakota 542, Alaska 496, Québec 446, Nevada 434, Arkansas 393, Manitoba 366, West Virginia 276, Idaho 237, Yukon 156, Newfoundland & Labrador 156, Utah 145, Colorado 100, New Brunswick 87, Northwest Territories 59, Washington 16.
- 7,608 of them carry a LineString, so they are real stretches of road you can intersect with a route rather than pins on a map; 17,287 of 17,407 carry geometry of some kind.
- All 21 sources were polled within a 20-minute window at that snapshot — oldest reading 12:42:05, newest 13:02:10. This is a live layer, not a nightly dump.
Six Field Names, Twenty-Seven Words, One Question
Here is the part that makes this a normalization problem rather than a plumbing one. Twenty-one agencies describe the same physical thing, and they do not agree on what the field is called, let alone what goes in it. Across the layer the condition text arrives under six different property names:
| Property key | Who publishes it | Segments |
|---|---|---|
condition | 19 of 21 sources | 16,216 |
conditions (in addition to condition) | Ontario, Colorado | 646 |
condition_category | North Dakota | 750 |
condition_code | Québec | 446 |
surface_conditions | Alaska (part of its rows) | 164 |
road_condition | Washington | 16 |
And inside those fields, 27 distinct condition strings across the 19 sources that publish one. Some of them are the same state of the world wearing four different coats:
bare dry 1,275 (Alberta, Saskatchewan)
dry 687 (3 sources)
bare and dry 309
3 - dry 75
Others are not descriptions at all. North Dakota publishes Green — a colour on its own scale, 750 segments of it. Québec publishes Ds and Dm, 309 and 137 segments, which mean something precise to Transports Québec and nothing to a dispatcher in Indiana. Several agencies offer good, fair and open, which are judgements rather than observations.
We do not flatten these into a severity score. That is a deliberate decision and it is worth stating plainly: inventing a five-point scale would mean deciding that Ontario’s normal_seasonal and Alberta’s bare dry are the same number, and we have no basis for that beyond our own opinion. You get the publisher’s own words, in one schema, on one endpoint, plus the jurisdiction that said them — so you can map the vocabulary to your own risk policy once, in one place, instead of writing 21 scrapers and then doing it anyway.
What the Layer Says Today, Off-Season
A conditions feed in September is mostly a feed reporting that it is September. That is the honest reading, and the distribution shows it:
| Condition, as published | Segments | Sources |
|---|---|---|
| clear | 9,639 | 2 |
| no report | 1,715 | 8 |
| bare dry | 1,275 | 2 |
| seasonal conditions | 750 | 1 |
| dry | 687 | 3 |
| normal_seasonal | 546 | 2 |
The interesting rows are the small ones, and they are all in the north, in September: 24 segments already read closed — Manitoba 11, Northwest Territories 11, Alberta 2. Alaska publishes no winter maintenance on 9. Yukon and Alaska carry difficult on 13 between them, and the Northwest Territories caution on 5. The season does not start everywhere on the same day, and the feed knows that before the calendar does.
no report is not clear. Those 1,715 segments across 8 sources mean nobody has filed an observation, which is a different fact from a road that has been looked at and found fine. Any rule you build on this layer has to treat the two separately, and we keep them separate rather than collapsing silence into good news.
Chain Control Is the One That Is Actually Actionable — and It Is One State
Conditions tell you what the road is like. Chain control tells you what you are legally required to do about it, which is the only part of winter data that changes a driver’s next ten minutes rather than a planner’s afternoon.
We carry 1,009 chain-control checkpoints, and all of them are California. Every one carries a complete record — chain_status, chain_control_active, elevation, county and district are populated on all 1,009 rows, which is a fill rate almost nothing else in North American road data achieves. Today every checkpoint reads R-0: no requirement in force.
This is also the one winter type that surfaces on a route. Ask for a truck route and an active chain control on it comes back as a warning in the response, keyed off chain_control_active. The R-1/R-2/R-3 escalation on Donner Pass in January is a real operational signal and it is wired end to end.
One state, though. Colorado, Washington, Oregon, Nevada and Utah all run chain and traction laws of their own, and none of them publishes a checkpoint feed we can carry today. If your lanes are I-70 west of Denver or I-90 over Snoqualmie, this specific dataset does not cover you, and we would rather say so than let a California number imply a western one.
Querying It
One feature type, one endpoint, filtered the same way as everything else we carry:
GET /api/v1/features?
type=road_conditions&
jurisdiction=MT&
limit=2
Swap type for chain_controls to get the California checkpoints, drop jurisdiction to sweep all 21, or pass a bounding box to take a corridor rather than a state. The response carries the publisher’s condition text in properties under whichever of the six keys that agency uses, alongside the normalized fields — jurisdiction, geometry, last_seen_at — that are the same for every type in the system. The road_conditions and chain_controls layers are on every plan, free trial included.
The Honest Limits
Four of them, and as with everything else we publish they matter more than the headline count.
Wisconsin publishes no condition text at all. Its 1,175 segments arrive with segment and area_name and nothing else — a list of stretches with no state attached to them. They are in the layer because the segment list itself is useful and because the field may start arriving; they are not in it because we can tell you what those roads are like. That is 1,175 of 17,407 rows, and a naive count of “segments covered” would quietly include them.
Road conditions do not enrich a route. Chain controls do; conditions do not. Ask for a route today and you will get work zones, hazards, weigh stations, border crossings and chain controls shaped into warnings — and no road-condition warning, because the spatial rule for “this 40-mile segment is snow-covered and your route uses eleven miles of it” is not the same rule as “there is an incident 60 metres from the line”, and we have not shipped it. Query the layer directly and intersect it yourself, or wait; do not assume the route response has already checked.
The plow layer exists, and its counts are not trustworthy yet. We carry service_vehicles from 13 jurisdictions and today 1,222 of them are active — Pennsylvania 767, Indiana 243, Iowa 115. The lifecycle on this type flaps: a vehicle that stops reporting is deactivated and reactivated repeatedly, so the active count is a reading of who is transmitting this minute and not a measure of a state’s fleet or its effort. It is under repair. Until it is fixed, treat plow positions as a live sighting, never as a denominator.
Everything above is a September snapshot of a winter layer. The counts will be different in January — that is the entire point of it being an endpoint rather than a table in a PDF. Re-run the queries and you will get the day you are standing in.
Why Wire It in September
The work of adopting a conditions layer is not the querying. It is deciding what your operation does when Québec says Dm, what no report means for a load you have already quoted, and which of the 27 strings are allowed to hold a driver at a truck stop. That is a policy conversation with your dispatch team, and it is a much better conversation to have in September, against a live feed that says everything is clear, than during the first real storm of the season.
The feed is running now. Point it at your corridors and read a month of boring answers — that is how you find out what your rules should be before the answers stop being boring. Most of the road-data problems we write about in the five road-data problems every NA fleet team hits are this shape: the data exists, in 21 places, in 21 vocabularies, and the cost is never the fetching.
Try It
- API docs — the
/featuressurface, its jurisdiction and bounding-box filters, and the full feature-type list - Weather at the incident — the observation layer that sits next to this one
- Free API key — no credit card, 14-day trial
Wire the winter layer before you need it
17,407 live condition segments across 21 states and provinces, plus 1,009 California chain-control checkpoints — one schema, one endpoint, the publisher’s own words preserved. Free 14-day trial. No credit card.
Get Free API Key Read the Docs