Our car spec site has a bug that hides behind a good excuse. This is the crawl that found it.
Symptom
/toyota/camry/2020/safety renders:
No NCAP data was returned for this model year. The U.S. New Car Assessment Program did not return a record for this vehicle. That is normal for older model years and for vehicles sold in volumes too small to be selected for testing.
Camry, 2020, five stars at NHTSA. The record exists. Our page doesn't have it, and then explains the absence with a reason that isn't true.
Crawl
# 1. all brand sitemaps subs = re.findall(r"<loc>([^<]+)</loc>", get(SITE + "/sitemap.xml")) # 2. model-year pages only my = [u for u in pages if re.search(r"/[^/]+/[^/]+/\d{4}$", u)] # 2,792 # 3. classify each safety page "no-record" if "No NCAP data was returned" in text else "rated" Sampling: at most three model-years per brand, stratified. 170 pages, 61 brands. /maintenance fetched on all 170, /safety on 162. curl through a proxy, ten workers, text parse.
Two URLs in the sitemap weren't model years — /ram/1500 and /saab/9000 are model names that happen to be four digits. Excluded, because a false positive in an audit is worse than a smaller sample.
Results
| Check | n | Result |
|---|---|---|
| Maintenance fields | 170 pages / 1,008 fields | 0 filled — 100% "Not yet verified" |
| Safety pages | 162 | 157 no-record · 3 rated · 2 failures |
| Rated pages | 3 | 2017 Honda Accord, 2026 Honda Passport, 2010 Honda Civic |
| Spot checks | 4 | Camry / Elantra / Model 3 no-record; CR-V rated |
What the distribution implies
Not a year problem. Median year of failing pages: 2021. The three working pages: 2017, 2026, 2010. If the cause were data age, the pattern would run the other way.
A make problem. 3 of 3 working pages are Honda. Every non-Honda page in the sample fell into the empty state. When a defect correlates with a single foreign key value, the defect is in the join, not the source.
Two data classes, opposite behaviour, same codebase. EPA fuel economy arrives as a bulk CSV and is present on every page. NHTSA recall and complaint counts arrive as bulk downloads and are present too. Fluid capacities, torque and service intervals live in paid service information and are empty on 170 of 170 pages — deliberately, since a bad torque value destroys engines. So the site has one class of blank that is a decision and another that is a bug, and the two render identically. That's the actual design failure: an honest blank and a broken blank look the same, which is why this survived unnoticed.
Boundaries
I did not read the importer. Cause is correlation, not trace.
162 safety pages, 170 maintenance pages, 61 brands — not 2,792.
No baseline for NHTSA's own NCAP coverage of 2018–2025 models, so I can't split 157 into our-miss and never-rated. Confirmed our-misses: 3. The remainder is unquantified and I'm not going to estimate it.
Correction
The "low volume / older model year" copy is ours, was written to explain an empty table, and now excuses a bug. Removing it. Pending the fix the page says only that no record matched, with no theory attached.
Disclosure
This is CarSpecData, which I operate. Crawl, regex and exclusions are above so the numbers are reproducible. No sponsor, no manufacturer review.
The 2020 Camry rating is four clicks away on NHTSA's site. Ours is a paragraph of speculation. The fix is in the importer, and the importer is next.