← Back to all posts
Winter Road Weather Safety

The Road Freezes Before the Air Does: Pavement Temperature in One Field

October 16, 2026 · 7 min read

The forecast for the overnight run says 2 °C. The dispatcher reads it, sees a number above freezing, and moves on. Forty miles out the road crosses a river on a bridge deck that has been radiating heat into a clear sky since dusk, and the deck is at −1. There is no incident, no closure, nothing in the events feed — just a film of ice on a surface that the air temperature never described.

That is the whole problem in one sentence: air temperature is the wrong number for ice. The road loses heat faster than the air above it on a clear, still night, and bridges and overpasses lose it fastest of all, because they are cooled from below as well as above. A route that is “above freezing” on every weather product can still be frozen where it matters.

The Sensor That Actually Knows

State and provincial DOTs already measure the right thing. Their road-weather stations — RWIS, in the trade — carry a sensor set into the pavement itself, and most of them publish what it reads. It is the number their own winter-maintenance crews use to decide when to put brine down.

Measured on 16 October 2026, 13:00 UTC: 1,531 roadside stations across 25 states and provinces publish a road-surface temperature in our feed — Minnesota 148, Maryland 129, Idaho 124, British Columbia 105, Alberta 103, Washington 97, Pennsylvania 93, Montana 91 at the top of the list. They are a subset of the 4,161 weather stations we carry; the rest measure the air and nothing beneath it, and we do not pretend otherwise.

Two Different Numbers, Measured the Same Minute

The point is not that surface and air temperatures differ a little. It is that they move independently, in both directions, by more than the margin that decides whether a road is wet or frozen.

At 13:00 UTC on 16 October — 7 a.m. in the Rockies, before sunrise across the western half of the continent — 180 stations read a road surface at or below 0 °C: Montana 59, North Dakota 37, Colorado 35, Alaska 16, Idaho 11 at the top. At 17 of them the pavement was below zero while the air above it was still above freezing. Flesher Pass in Montana read −2.2 °C on the road under +0.6 °C of air; Edinburg, North Dakota, −1.2 under +0.3. Read by air temperature alone, every one of those places is above freezing.

The five North Dakota stations in that group labelled their surface dry, and that matters as much as the number: pavement below zero is ice only where there is moisture on it. That is why surface_condition travels with the temperature rather than being folded into it.

Across all 1,406 stations that reported both readings at that hour, the road was still a median 1.0 °C warmer than the air — pavement holds yesterday’s heat — but at 379 of them it was the colder of the two. The average hides exactly the stations that matter.

In the middle of a sunny day the gap widens, and almost all of it points one way. At 17:29 UTC on 15 October, across the 1,462 stations that reported both readings, the road surface was a median 3.5 °C warmer than the air, and at 552 of them the two numbers were 5 °C or more apart. A planner who reads one and assumes the other is reading the wrong instrument, whichever way the sun happens to be pointing.

Eight Spellings, One Field

Here is why this number has been hard to use even though it was always published. The same measurement arrives from different agencies under eight different property names, in two units, and sometimes as a string with the unit written into it. One Minnesota station, as we hold it:

GET /api/v1/features?type=weather_stations&jurisdiction=MN
{
  "id": "MN-ws-4",
  "name": "I-35: Askov",
  "jurisdiction": "MN",
  "properties": {
    "surface_temp": "50° F",
    "surface_temperature": 50,
    "surface_temperature_c": 10,
    "surface_condition": "Trace moisture",
    "air_temperature_f": 45,
    "humidity_pct": 97,
    "precipitation": "Light Rain"
  },
  "last_seen_at": "2026-10-15T17:36:15Z"
}

(Abbreviated — the full record carries every key the agency published.) The first two lines are the agency’s own: a string with its unit inside it, and the bare number. surface_temperature_c is the one field that means the same thing for every station we carry, in Celsius, whichever agency published it and however they spelled it. The originals stay next to it, because someone may already be reading them.

The unit is established feed by feed, from the publisher’s own documentation, from a unit written into the value, or from a measurement against the same station’s air reading — never guessed from a range. That last check is not a formality. While building this field we found one feed whose surface reading had been labelled Fahrenheit and was Celsius, and three city stations publishing Celsius inside a state feed that is otherwise Fahrenheit. Both are corrected; both would have put a summer road below freezing.

surface_condition sits next to it with the agency’s own word — dry, wet, trace moisture, chemically wet — on 781 of the 1,531 stations. We do not translate those into a severity scale, for the same reason we do not for winter road conditions: the words are the observation, and inventing a shared scale would be our opinion wearing the agency’s badge.

Querying It

GET /api/v1/features?
  type=weather_stations&
  bbox=-93.5,45.5,-92.0,47.0

Filter by jurisdiction for a state, or by bbox for a corridor, and read properties.surface_temperature_c where it is present. A station without the key has no pavement sensor, or its sensor is not reporting — that is unknown, not warm. The weather_stations layer is on every plan, free trial included.

The Honest Limits

Most readings cannot be aged. Only 284 of the 1,531 stations publish the time their sensor took the reading. For the rest we know when we last polled the station — every one of them within the past hour on 16 October — but not when the sensor measured. A pavement reading can lag the road, and on a falling-temperature night the lag is in the dangerous direction. Treat a reading without observation_time as recent, not as now.

It is a reading, not a forecast. This tells you what the road is at the station. It does not tell you what it will be at 4 a.m., and it does not tell you about the bridge eleven miles downstream that has no sensor. Stations are where agencies put them — often exactly on the bridges and passes that freeze first, but not on all of them.

There is no overnight history yet. We keep the current reading on the station, not a series of them, so “how fast did this deck cool last night” is not a query you can run against us today.

It does not raise an alarm on your route. A weather station on the line of a truck route appears in the route response as an information-level notice with the station’s name. It does not carry the surface reading, and nothing fires when the reading drops below zero. If freezing pavement on a planned route is the decision, query the corridor and apply your own threshold.

Coverage moves overnight. On 15 October Iowa published pavement temperature for 62 stations; by the morning of 16 October its feed carried no pavement sensors at all, and Iowa dropped out of the count above. The stations are still there, reporting air. Count what a region reports today, not what it reported last week.

A faulty sensor is not always flagged, and a flag is not always a fault. Where we convert a station’s reading ourselves and the station marks its surface sensor as in error, we drop the temperature. Where the agency publishes the Celsius value directly, we pass it through with the flag beside it: Colorado marked the surface status of 13 stations as Error while their temperatures track the air plausibly, so the flag there describes a different sensor. When a sensor fails without saying so, nothing catches it: on 15 October one Alberta station read −28.6 °C at the surface against +7.1 °C in the air. Compare against the air reading and the neighbouring stations before you act on a single extreme.

Figures measured on production: coverage and the pre-dawn comparison on 16 October 2026, 13:00 UTC; the midday comparison on 15 October 2026, 17:29 UTC. Readings move by the minute; coverage moves by the day.

Try It

Read the road, not the air

Road-surface temperature from 1,531 DOT sensors across 25 states and provinces, in one Celsius field, next to the agency’s own words. Free 14-day trial. No credit card.

Get Free API Key Read the Docs