PULSCAR ANALYSIS OF NHTSA PUBLIC DATA — GRINDING NOISES PulsCar analysis of NHTSA public data, September 2026. License: CC BY 4.0. Files in this folder: grinding_complaints_summary.csv, grinding_complaints_by_system.csv, grinding_timing_vs_system.csv, grinding_complaints_by_model.csv. SOURCE FILES 1. NHTSA Office of Defects Investigation complaint flat file (COMPLAINTS_RECEIVED_*.txt), downloaded from https://static.nhtsa.gov/odi/ffdd/cmpl/ — field definitions: https://static.nhtsa.gov/odi/ffdd/cmpl/CMPL.txt Rows loaded: 777,040 complaints, received 1 January 2015 through 8 September 2026. One row per complaint (ODINO), de-duplicated on ODINO. 2. NHTSA manufacturer communications (TSB) flat file, FLAT_TSBS.txt — 187,827 distinct NHTSA document ids, one row per make/model/year per document. 3. NHTSA recall flat file, FLAT_RCL.txt — 245,578 rows, counted as DISTINCT campaign. 4. NHTSA investigation flat file, FLAT_INV.txt. All four were loaded into a local SQLite database with FTS5 full-text indexes on the complaint description and the bulletin summary. Queries below are the exact ones run. QUERY 1 — THE GRINDING SET select c.* from complaints c join complaints_fts f on f.rowid = c.rowid where complaints_fts match 'grind OR grinds OR grinding OR grinded'; Result: 6,248 complaints. EXCLUSIONS Each match was re-read in Python. For every complaint we extracted every window of +/-90 characters around every occurrence of /grind\w*/i. A complaint was DROPPED only if ALL of its windows matched the machining-and-idiom regex: (resurfac|re-?surfac|machin|turn(ed|ing)?\s+the\s+rotors?|grind(ing)?\s+(down\s+)?(the\s+)? (rotors?|brake\s+rotors?|discs?)|grind(ing)?\s+to\s+a\s+halt|daily\s+grind|grind(ing)?\s+of\s+traffic) That is, a complaint that says "the shop ground the rotors" and nothing else is dropped; a complaint that says "it grinds when I brake, so they ground the rotors" is kept. Dropped: 12. Kept: 6,236. This is the denominator for every percentage in the article unless another denominator is named. SAMPLE READING (false-positive rate) Before publishing any count we drew 40 matches at random (Python random.seed(7), random.sample over the 6,248 raw matches) and read the grinding sentence in each. 39 of 40 described a noise, a sensation or a gear clash the owner or a technician experienced. 1 of 40 was a machining use ("Toyota's solution was to resurface/grind the rotors", ODINO 10821007) — a 2.5% false-positive rate in the raw set. That single failure mode is what the exclusion regex above targets. We did not tighten further: narrower phrase queries such as '"grinding noise" OR "grinding sound"' lose real reports that say "it grinds when I brake" or "the gears grind", and the residual error after exclusion is smaller than the rounding we publish at. QUERY 2 — SYSTEM WORDS (grinding_complaints_by_system.csv) Case-insensitive regex over the FULL complaint text, one flag per family, NON-EXCLUSIVE: a complaint that names both brakes and a bearing counts in both rows, so the shares add to more than 100%. Patterns, verbatim: Brakes: pads, rotors, calipers \bbrake|\bpads?\b|rotor|caliper Transmission, CVT, clutch or gears transmission|\bcvt\b|clutch|gearbox|shift|\bgears?\b Wheel bearing or hub wheel bearing|hub assembl|\bhub\b|bearing Tires or wheels \btires?\b|\bwheels?\b|lug nut|rim\b Differential, axle, driveshaft, t-case differential|\baxle|driveshaft|drive shaft|transfer case|\bcv joint|cv axle Starter or flywheel ring gear starter|flywheel|ring gear|bendix|solenoid Steering: rack, pump or column steering|\brack\b|power steering|column Engine internals or accessories \bengine\b|timing chain|\bpiston|camshaft|valve train|valvetrain|water pump|alternator|serpentine|tensioner|idler|pulley ABS, traction control, automatic braking \babs\b|traction control|automatic emergency|collision|\baeb\b|stability control Suspension: struts, springs, control arms strut|suspension|shock absorber|control arm|ball joint|sway bar A/C compressor, blower or HVAC \ba/?c\b|air condition|compressor|blower|hvac These are WORD counts, not diagnoses. A complaint lands in "Brakes" because the owner wrote "brake", which may be the system that failed, the system they suspected, or the system a shop replaced without fixing the noise. QUERY 3 — WHEN IT GRINDS (grinding_timing_vs_system.csv) Same +/-90-character windows around the grinding words (NOT the whole complaint, which would catch any mention of braking anywhere in the text). Non-exclusive; a complaint that says "it grinds when I brake and when I turn" counts twice. Patterns, verbatim: When braking brak|\bpedal\b|stopp?ing|come to a stop|slow(ing)? down When turning or cornering turn(ing|s|ed)?\b|corner|steer When starting the engine start(ing|ed|s|up)?\b|crank|ignition|turn the key|push button When shifting or changing gear shift|chang(e|ing) gear|\bgears?\b|reverse|\bpark\b|\bneutral\b|clutch When accelerating acceler|throttle|gas pedal|speeding up|pulling away At highway speed highway|freeway|interstate|\b[5-8]\d\s?mph|high speed At low speed or parking low speed|parking lot|park(ing)? space|driveway|\b[1-2]?\d\s?mph|backing (up|out)|slow speed Known weakness, stated in the article: "When starting the engine" also catches the very common narrative opener "the noise started when...", so that row is an upper bound. The cross-tab columns are the system-word families above, counted within each timing row. QUERY 4 — MODELS (grinding_complaints_by_model.csv) Top 30 make/model pairs by grinding-complaint count. The rate column is grinding complaints / all complaints for THAT make and model in this file x 1,000. It is a share of that model's complaint traffic, NOT a failure rate: there is no registration or vehicles-in-service denominator in these files, and complaint volume follows recalls, news coverage and fleet size. Model years shown are the top three by count. MILEAGE, TOW, CRASH, FIRE Mileage quartiles use only rows with miles > 0 and miles < 400,000 (3,805 of 6,236 grinding complaints carry a usable mileage; 392,935 of 777,040 file-wide). Tow, crash and fire are the file's own Y/N flags, owner-reported. "A SHOP COULD NOT FIND IT" FTS5 phrase list, applied identically to the grinding set and to the whole file: "could not duplicate" OR "unable to duplicate" OR "could not replicate" OR "unable to replicate" OR "could not reproduce" OR "no problem found" OR "could not find the" OR "unable to find the" OR "nothing was found" OR "found nothing wrong" OR "no issue found" OR "no problems found" Grinding: 107 of 6,236 (1.72%). Whole file: 7,337 of 777,040 (0.94%). This measures a phrase, not an outcome: complaints that describe the same experience in other words are not counted, so both numbers are floors and only their ratio is the finding. QUERY 5 — WHAT THE OWNER SAYS WAS DONE (last ten rows of the summary CSV) Case-insensitive regex over the full complaint text, non-exclusive, sentence-bounded by [^.]{0,30-60}. Example, verbatim, for the pads row: (replac\w+|new)[^.]{0,30}\bpads?\b|\bpads?\b[^.]{0,30}(were |was )?(replac|chang) and for the transmission row: (transmission|cvt)[^.]{0,60}(replac|rebuil|new)|(replac\w+|new|rebuil\w+)[^.]{0,30}(transmission|cvt) The other eight families follow the same shape around rotors, caliper, wheel bearing/hub, starter, differential/axle/driveshaft, engine, clutch and compressor. THIS IS NOT A FIX RATE. It counts complaints that MENTION a part being replaced — including complaints where the replacement did not cure the noise, and including parts replaced before the grinding started. Most complaints are filed before any repair, so all ten rows are floors. BULLETINS select distinct t.* from tsbs t join tsbs_fts f on f.rowid = t.rowid where tsbs_fts match 'grind OR grinding OR grinds'; 502 distinct NHTSA document ids. "Software-ish" = the summary matches software|reprogram|calibrat|flash|update the|pcm update|module update — 30 of 502 (6.0%). Bulletin counts are per document, not per vehicle. RECALLS AND INVESTIGATIONS select * from recalls where defect like '%grind%' or consequence like '%grind%' or notes like '%grind%'; 4 distinct campaigns, of which 2 are industrial grinder trailers (Vermeer) and 2 are passenger vehicles: 10V656000 and 11V244000. Investigations were searched the same way. LIMITATIONS Complaints are unverified owner reports. They are not a failure rate, not a sample of all cars, and not a sample of all grinding noises — only of grinding noises somebody chose to report to the federal government. Counts here must not be read as "this make grinds more than that one." Word counts measure vocabulary. Nothing in this folder contains a VIN, a city, a dealer name or any free text longer than a short quoted snippet. CONTACT: support@pulscar.io