Every failure in this post returned HTTP 200. None of them threw an exception, filled a log, or tripped an alert. Each one was a traffic feed quietly handing back something other than what its field name promised — and each one was served, for a while, as data.
That is the part of “just integrate the state 511 feeds yourself” that doesn’t show up in the estimate. Writing a parser for one feed is a day or two. Writing thirty is a few weeks. Noticing when one of them stops meaning what it meant is a permanent job, and it is the job this post is about. Everything below was measured on our own North American production system between 27 and 28 September 2026, and every one of these was ours to find.
1. The message was a picture
Five states publish their highway message signs through a platform they share. For most sign types the feed carries the text on the board, line by line. For one type it carries a single line that is not text at all: a link to a rendered image of the panel.
Our adapter joined every line into the sign’s message. So when a customer asked what a sign in the largest of those states said, 182 of its 251 active signs answered with a URL. A second state did the same for 80 signs, a third for about 50. The oldest such row in our history is from 10 April 2026 — the day that history begins — and the first state alone accumulated 342,316 of them, because every time the platform re-rendered the image the link changed, and a changed link looked exactly like a changed message.
Nothing failed. A URL is a perfectly valid string.
2. The text moved one level deeper
One state publishes its signs in a compact binary format. In it, each line of a sign’s message is not a plain string but a small record of its own: an identifier, the text, and a line number. Our decoder read the whole record as though it were the string. The result decoded cleanly into characters — just not into words.
When we looked on 27 September, all 96 lines in the live feed came out as control characters, and 21 of its signs were serving them as their message. Our history holds 767,383 such rows going back to 10 April. We cannot tell you when it started, or whether that decoder ever read those lines correctly — only that the problem predates the history.
3. Half a sign
A message sign often cycles two screens: “SLOW DOWN AND MOVE OVER FOR ANY STOPPED VEHICLES”, then “5 MIN TO I-294 · 21 MIN TO HARLEM”. One regional feed reports only the screen that happened to be showing when you asked. 73 of the 211 signs in that feed carrying a message had two screens, so every poll saw one or the other.
A customer got half of what the driver saw, and which half was a coin toss. Our own message history recorded the board flipping back and forth every ten minutes as if an operator were retyping it. The full message was in the same record, in a different field — you just had to know it was there.
4. Two sources, one row
One Canadian jurisdiction publishes its signs through a documented API and, separately, through its public map. We had wired both. Both wrote to the same record, one with the message and one without, so every one of its signs went blank for exactly one poll in each cycle and came back: 6,711 blank-then-back periods in three days, every one of them a single poll long.
The binary-feed state from section 2 had the worse version. Two of its systems number their signs independently, and we had used both numbers in the same namespace. 38 of 72 identifiers collided, and the two signs sharing each identifier were never the same sign: they stood between 24 and 558 km apart, 315 km at the median. For those 38 rows, two unrelated boards were taking turns owning the name, the position on the map and the message.
5. The answer was a web page
Ask one large state’s traffic system for JSON and it replies 406 Not Acceptable. Ask without saying and it replies 200 OK with 1.79 MB of HTML — measured 22 August 2026. A monitor that checks status codes reads that as healthy. A decoder reads it as a syntax error on the first character, which is the least helpful description of “you are talking to the wrong thing” that exists.
What noticing actually takes
None of these would have been caught by checking whether a request succeeded. What caught them was asking whether the data still had the shape we promise:
- Does the field hold the kind of value its name says? A message that starts with
https://, or contains control characters, is not a message. That is a query, and it has to be run against every source, not the one you are debugging. - Does a change look like a change? A sign that goes blank for exactly one poll and returns to the same text is not an operator; it is two writers. Measured across a network, the pattern is unmistakable.
- Do the parts still add up to the whole? Two feeds of 72 and 152 that produce 186 rows instead of 224 are sharing identifiers.
- Is it still the thing you think you’re talking to? Content type and the first bytes, not the status code.
Every one of those checks has a blind spot, and we would rather say so than imply coverage: a feed that is wrong consistently — the same wrong value every poll, in the right type — passes all four.
The arithmetic of building it yourself
The honest comparison is not our API against a weekend of parser-writing. It is our API against a person who owns thirty-odd feeds indefinitely — who runs shape checks across all of them, reads the history for patterns that look like operators but aren’t, and fixes each break without introducing the next. Every example above was found by doing exactly that, and every one of them had been live for months before anyone did.
If your product needs road data from one state, integrate it directly; it is not hard. If it needs thirty, the parsers are the small part.
Figures measured on North American production between 27 and 28 September 2026 (the web-page response on 22 August 2026). All of the defects described are fixed.
Try It
- API docs — one schema for signs, cameras, events and 30+ other feature types
- Normalizing 30+ 511 APIs — how the unified model is laid out
- Free API key — no card, 14-day trial
The parsers are the small part
Traffic events, message signs, cameras and restrictions from 30+ state and provincial systems in one schema — with someone watching whether each field still means what it says. Free 14-day trial. No credit card.
Get Free API Key Read the Docs