PULSCAR ANALYSIS OF NHTSA PUBLIC DATA — SERPENTINE / ACCESSORY DRIVE BELT FAILURES PulsCar analysis of NHTSA public data, September 2026. License: CC BY 4.0. Files in this folder may be reused with attribution to PulsCar (pulscar.io). -------------------------------------------------------------------------- 1. SOURCE FILES -------------------------------------------------------------------------- NHTSA public flat files downloaded from static.nhtsa.gov and loaded into a local SQLite database: Complaints FLAT_CMPL.txt 777,040 owner complaints (ODINO), received 1 January 2015 – 8 September 2026. Field definitions: https://static.nhtsa.gov/odi/ffdd/cmpl/CMPL.txt Recalls FLAT_RCL.txt one row per make/model/model year per campaign, report dates 1 January 2010 – 9 September 2026; campaigns counted DISTINCT on the campaign number. Communications FLAT_TSBS.txt manufacturer communications, dates 6 January 2015 – 12 September 2026; counted DISTINCT on the NHTSA document id. Complaints are owner reports. They are not verified repairs, not failure rates, and there is no denominator of vehicles on the road in this data. A make with more complaints may simply have sold more cars or older cars. Nothing here ranks reliability. -------------------------------------------------------------------------- 2. COMPLAINT QUERY (the 398 belt-failure reports) -------------------------------------------------------------------------- Step 1 – full-text search (FTS5) for any of: "serpentine belt", "drive belt", "accessory belt", "belt tensioner", "idler pulley", "serpentine" -> 1,284 complaints. Step 2 – failure proximity. The part word and a failure word must appear in the same sentence within 70 characters of each other: part: serpentine belt | accessory (drive) belt | fan belt | drive belt | belt tensioner | tensioner pulley | idler pulley failure: broke | broken | snapped | shredded | came off | fell off | slipped | failed | seized | squealing | chirping | detached | fractured | tore | torn | separated | disintegrated | frayed | cracked | worn | shriveled | blew Step 3 – exclusions. A match is discarded when the surrounding 120 characters contain any of: seat belt, seatbelt, pretensioner, restraint, airbag, shoulder/lap belt, belt buckle, belt retractor, timing belt, oil pump, "oil belt", wet belt, cam belt, CVT. Complaints filed under powersports, RV, trailer and heavy-truck makes (Polaris, Harley-Davidson, Forest River, Keystone, Jayco, Can-Am, Mack, Freightliner, Peterbilt, Kenworth, bus bodies, trailer makers and similar) are dropped as well, because "drive belt" on those vehicles usually means a CVT or final-drive belt. -> 398 complaints. This is the set every number in the article is computed from. Step 4 – SAMPLE READING. 30 random matches were read in full (random.seed(77)). 27 of 30 were genuine accessory-belt-system failures. 3 were false positives: one used the belt only as a location reference ("cracked between the injectors, counting from the serpentine belt side"), one was a Ford oil-pump belt tensioner that the "oil pump" filter had missed in that phrasing ("oil belt tensioner"), and one was a timing-chain failure blamed on a belt tensioner design. Observed false-positive rate: about 10% (3/30). The "oil belt" phrasing was added to the exclusion list after this reading, which removed 4 further complaints; the remaining two false-positive types cannot be filtered by wording without dropping genuine reports, so the counts carry them. An earlier, looser version of the query (part word anywhere in the text, no failure-word proximity) kept 958 complaints, and a 30-complaint reading of that set showed roughly 30% were incidental mentions — a belt replaced among a list of other parts, or a service record. That is why the published set requires the failure-word proximity. -------------------------------------------------------------------------- 3. WHAT IS COUNTED (belt-failure-consequences-and-causes.csv) -------------------------------------------------------------------------- Consequence and cause categories are regex searches over the whole narrative of the 398, not over a proximity window, because owners describe the consequence in a different sentence from the part. A complaint can appear in several rows; the rows are shares of 398, not parts of a whole, and a "cause named" row means the owner's text names that component — not that a shop confirmed it. Mileage: values <= 0 and >= 400,000 dropped; 255 of the 398 carry a usable mileage. Median 90,000 miles, Q1 58,000, Q3 130,000. The NHTSA towed / crash / fire columns in the CSV are the agency's own flags on the complaint record. The separate "vehicle towed (text mention)" row counts complaints whose narrative uses a tow word, which is far more common than the flag: 113 versus 44. Both numbers are published so the gap is visible. Baselines over all 777,040 complaints: towed flag 39,739 (5.1%), crash flag 33,940 (4.4%), fire flag 14,121 (1.8%). -------------------------------------------------------------------------- 4. RECALLS (belt-recalls.csv) -------------------------------------------------------------------------- Campaigns whose DEFECT text names a serpentine / accessory / drive belt, a belt tensioner, a tensioner pulley or an idler pulley, excluding seat belts, timing belts, oil-pump belts and tire "tread/belt" components: -> 15 distinct campaigns, 329,115 vehicles potentially affected (sum of the per-campaign figures). Two of the 15 are the same part on the same vehicle: BMW 12V550000 (November 2012) and 18V336000 (May 2018), both for the engine idler pulley bolt on X5 xDrive35d diesels. 14 complaints in the 398 cite one of those campaign numbers, and four of the 14 state that the recall repair had already been performed on their vehicle before the bolt broke. -------------------------------------------------------------------------- 5. MANUFACTURER COMMUNICATIONS (belt-bulletins.csv) -------------------------------------------------------------------------- FTS5 query over bulletin summaries for "serpentine belt", "accessory drive belt", "drive belt", "belt tensioner" or "idler pulley", excluding "seat belt" and "timing belt": -> 272 distinct NHTSA document ids, of which 91 mention a noise word (noise, squeal, chirp, squeak, whine, rattle). The noise_related column in the CSV carries that flag. Heavy-truck and engine makers (Cummins) are left in the file and are visible in the make column. -------------------------------------------------------------------------- 6. LIMITATIONS -------------------------------------------------------------------------- - Self-selected reports; people who file with NHTSA are not a random sample. - No denominator: counts by make and model track fleet size and age. - "Median failure mileage 90,000" is the median of the mileages owners typed into 255 complaints about a failure. It is not a belt life expectancy and it is biased toward failures dramatic enough to report. - Cause categories are the owner's words. Where a shop diagnosis is quoted the text usually says so, but the regex cannot distinguish "the shop found the tensioner seized" from "I think it's the tensioner." - Make spellings are not normalized in the source file ("MERCEDES-BENZ" and "MERCEDES BENZ" appear separately) and are left as filed. - Recall and bulletin searches find documents that USE these words; a campaign describing the same failure as "pulley bolt" without naming the belt may be missing from the 15. Files: belt-failure-consequences-and-causes.csv, belt-failure-by-make.csv, belt-failure-top-models.csv, belt-recalls.csv, belt-bulletins.csv. ------------------------------------------------------------------------------ CASE SENSITIVITY — SECTION ADDED 19 SEPTEMBER 2026 ------------------------------------------------------------------------------ NHTSA stores complaint narratives in ALL CAPS for records filed through roughly 2020 and in mixed case for records filed from 2021 on. A case-SENSITIVE search of the narrative field loses about 92% of the complaints filed after 2020, so this is the single largest way an analysis of this database can go wrong while still looking finished. Every query behind this file is case-insensitive. SQLite's LIKE and its FTS5 full-text index both ignore case by default, and no query in this work uses GLOB or any case-sensitive comparison. This was not taken on trust. On 19 September 2026 every published folder was re-checked against the same database, comparing the figures here with what a case-sensitive query would have returned. The result: the complaint set published here (1,284) is LARGER than the absolute ceiling a case-sensitive search of the same terms could have returned (331 narratives). A case-sensitive query cannot produce a bigger set than itself, so the bug is ruled out for this folder by arithmetic, not by assurance.