PULSCAR ANALYSIS OF NHTSA PUBLIC DATA — "CAR PULLS TO ONE SIDE" 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 -------------------------------------------------------------------------- All inputs are NHTSA public flat files, downloaded from static.nhtsa.gov and loaded into a local SQLite database: Complaints FLAT_CMPL.txt 777,040 unique 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; campaigns counted DISTINCT on the campaign number. Communications FLAT_TSBS.txt manufacturer communications (TSBs, dealer messages, warranty bulletins) with communication dates from 6 January 2015 to 12 September 2026; counted DISTINCT on the NHTSA document id. Investigations FLAT_INV.txt ODI investigation records. Complaints are OWNER REPORTS. They are not verified repairs and they are not failure rates: there is no denominator of vehicles on the road in this data, so a make with more complaints may simply have more vehicles, older vehicles, or more owners who file. Nothing here ranks reliability. -------------------------------------------------------------------------- 2. COMPLAINT QUERY (the 612) -------------------------------------------------------------------------- Step 1 - full-text search (SQLite FTS5) over the complaint narrative for any of 42 phrases covering pull / veer / drift plus a direction: "pull to one side", "pulls to one side", "pulling to one side", "pulled to one side", "pull(s|ing|ed) to the right", "pull(s|ing|ed) to the left", "pulls right", "pulls left", "pulling right", "pulling left", "pulls hard right", "pulls hard left", "veer(|s|ing|ed) to the right", "veer(|s|ing|ed) to the left", "veers right", "veers left", "veering right", "veering left", "drift(|s|ing|ed) to the right", "drift(|s|ing|ed) to the left", "drifts right", "drifts left", "drifting right", "drifting left". -> 2,601 complaints. Step 2 - regex confirmation on the narrative: (pull|pulls|pulling|pulled|veer|veers|veering|veered|drift|drifts|drifting| drifted)\s+(hard(er)|sharply|slightly|violently|abruptly|suddenly|severely| badly|constantly|always|strongly)?\s*(to\s+)?(the\s+)?(right|left|one side|either side) A match is discarded when the 55 characters around it match the "driver pulled over" construction: (pull\w*)\s+(over|off)?\s*(to\s+)?(the\s+)?(right|left)?\s*(shoulder|side of the (road|highway|freeway|interstate)|median|emergency lane|breakdown lane) -> 2,551 complaints. Step 3 - FIRST SAMPLE READING. 30 random matches were read in full. 17 of 30 (57%) were NOT the article's symptom: they were one-off events - a wheel or rim detaching, a seat bracket breaking, unintended acceleration, an ABS or stability-control intervention, a steering lock-up, or a driver describing a deliberate maneuver ("had to pull to the right"). A 57% false positive rate is too high to publish, so the query was tightened. Step 4 - tightening, three filters, all of which must pass: (a) COMPONENT: the complaint is tagged with at least one of STEERING, SUSPENSION, TIRE, WHEEL, SERVICE BRAKES, STRUCTURE. (b) STEADINESS CUE: the narrative contains at least one of alignment / aligned / align, tire pressure, camber, caster, toe in|out, tires rotated, constantly, continuously, all the time, every time, at all speeds, hands off, let go of the (steering) wheel, keep it straight, correct the steering, hold the wheel, drift(s), wander. This is what separates a standing complaint from a single scary moment. (c) EVENT EXCLUSION: discarded when the 400 characters around the pull phrase contain detach / came off / fell off / broke off / fractur / snapped / crash / collision / collided / struck / hit a (tree|guard| pole|curb|wall) / rolled over / flipped / blew out / blowout / lost control / airbag deployed / accelerat -- UNLESS the complaint also contains "align" somewhere, which keeps genuine pull complaints that happen to mention a later crash. Motorcycles were removed by make (Harley-Davidson, Indian, Ducati, KTM, Triumph, Aprilia, Moto Guzzi, Zero, Royal Enfield, Victory, Husqvarna, Can-Am, Polaris, Kawasaki, Yamaha, BRP, Vespa, Piaggio, Benelli, CFMoto, SSR, Kymco, Arctic Cat) and by the component string "HANDLE BAR". -> 612 complaints. This is the published set. Step 5 - SECOND SAMPLE READING. 30 fresh random matches from the 612 were read in full. 3 of 30 (10%) were off target: one BMW touring motorcycle that the make list does not catch, one steering lock-up event, one adaptive-cruise event. Residual false-positive rate: about 10%. -------------------------------------------------------------------------- 3. WHAT THE 612 CONTAIN (counts published in the article) -------------------------------------------------------------------------- 612 complaints in the set 412 (67.3%) mention an alignment 104 say an alignment was actually performed; of those 37 (36%) say the pull came back or never left 32 (5.2%) say the shop could not find it, could not duplicate it, or called it normal 30 (4.9%) describe the pull in a braking context 24 mention uneven or premature tire wear 22 mention a lane-keeping / lane-centering / adaptive-cruise system 18 towed (2.9%) vs 39,739 of 777,040 (5.1%) in all complaints 22 crash reported (3.6%) vs 33,940 of 777,040 (4.4%) 12 injuries reported in total; 1 fire Failure mileage, excluding 0 and anything >= 400,000: n = 362 of 612 (250 complaints report no usable mileage). 25th percentile 1,098 miles median 24,000 miles 75th percentile 70,000 miles 87 of 362 (24%) report the pull at 1,000 miles or less. -------------------------------------------------------------------------- 4. READING 110 COMPLAINTS FOR "WHAT FIXED IT" -------------------------------------------------------------------------- From the 612, 285 contain a diagnosis or repair cue (diagnos*, replac*, repair*, was fixed, resolved by, turned out, found that, determined that, root cause). 110 of those 285 were drawn at random (seed fixed) and read in full. Each was assigned ONE primary category - what the complaint says the shop found or did: 22 steering hardware (rack, steering gear, EPS unit, column, intermediate shaft, power steering pump, hose, coupler) 20 still unresolved after repeated visits, no single cause named 17 alignment named as the finding or the repair 14 no cause found: "could not duplicate", "operating as designed", "no problem found" 11 tires (uneven wear, defect, pressure, replacement) 11 suspension or steering linkage parts (control arm, tie rod, ball joint, bushings, sway bar, links, shocks, track bar, drag link) 6 rusted subframe or other structure 4 brakes (caliper, pads, ABS) 5 off target (one motorcycle, one travel trailer, three unrelated) Limitation: the category is what the OWNER wrote, not a verified repair order, and a complaint filed while the car is still at the shop records the attempt, not the outcome. "Unresolved" and "no cause found" therefore overlap with cases that were later fixed without a follow-up filing. -------------------------------------------------------------------------- 5. MANUFACTURER COMMUNICATIONS (the 246) -------------------------------------------------------------------------- FTS over the summary for pull / lead / drift / wander / off-center phrases, then a regex requiring the phrase to be about the VEHICLE or the STEERING (vehicle pulls|pulls or leads|leads or drifts|steering (wheel) pull|drift| wander|pull/drift|lead/pull|pulls to the right|left|one side|drifts to the right|left|steering wheel not centered|off-center|crooked|tramlining), with an exclusion list for the "off center" false positives found by reading: camera image, exhaust tips, airbag module, radio, display, seat, mirror, headlamp, emblem, and "vehicle pulls away" (a transmission complaint). 10 documents were dropped by that exclusion. Counted DISTINCT NHTSA document id: 246 documents, communication dates 2016 to 2026. By make: Jeep 48, Honda 33, Chevrolet 15, Ram 15, Dodge 15, Audi 14, Toyota 13, Mazda 12, Chrysler 11, Infiniti 9, Ford 8, Mitsubishi 7, Cadillac 6, Nissan 6, Land Rover 5, Lexus 4, Volvo 4, Volkswagen 3. IMPORTANT CAVEAT, found by reading: 27 of Honda's 33 are the same repeating dealer message about 2019 Passport and Pilot steering found off center or pulling at pre-delivery inspection, re-issued weekly from April to September 2019. One issue, 27 documents. Counts of documents are not counts of problems, and the same is true of the many revisions of Jeep 08-074-20 (Revisions A through F) inside the Jeep total. Remedy words present in the summaries (a summary can mention several): diagnostic procedure 99, alignment 51, steering hardware 42, software 32, tires 20, brakes 8; 77 summaries are too terse to classify. -------------------------------------------------------------------------- 6. RECALLS (the 37) -------------------------------------------------------------------------- Recall records whose defect or consequence text matches pull / veer / drift plus a direction (same regex family as the complaints), counted DISTINCT on the campaign number: 37 campaigns, 1,401,412 vehicles potentially affected. 663,823 of those units are heavy trucks (Freightliner, Western Star, International, Mack, Hino, and the Gunite slack-adjuster equipment campaign), almost all of them air-brake campaigns. 23 campaigns and 737,589 units are light vehicles. 5 campaigns, covering 984,585 units, have a software remedy (the remedy text says reprogram / software / update / calibrate). -------------------------------------------------------------------------- 7. FILES IN THIS FOLDER -------------------------------------------------------------------------- pull-complaints-by-make.csv makes with 3+ complaints in the 612 pull-complaints-by-model.csv models with 3+ complaints in the 612 pull-complaints-by-model-year.csv the 612 by vehicle model year pull-manufacturer-bulletins.csv the 246 documents, with the first 200 characters of NHTSA's summary pull-recalls.csv the 37 campaigns No personal data is published: no VINs, no names, no cities, no dealer addresses, and no complaint narratives beyond short quoted fragments. -------------------------------------------------------------------------- 8. LIMITATIONS -------------------------------------------------------------------------- - Owner reports, not failure rates. No vehicle-population denominator. - Keyword recall is imperfect: an owner who wrote "it doesn't track straight" without a direction word is not in the 612. - Free-text mileage and dates are as typed by the owner. - The residual false-positive rate measured by reading is about 10%. - The communications file contains NHTSA's summary, not always the full bulletin; the documents quoted in the article were downloaded from static.nhtsa.gov and read as PDFs. ------------------------------------------------------------------------------ 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 (2,601) is LARGER than the absolute ceiling a case-sensitive search of the same terms could have returned (122 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.