PulsCar analysis of NHTSA public data, September 2026 Article: https://www.pulscar.io/blog/car-battery-replacement-cost License: CC BY 4.0 (https://creativecommons.org/licenses/by/4.0/) — cite "PulsCar analysis of NHTSA public data, September 2026". SOURCE FILES - NHTSA Office of Defects Investigation flat files, downloaded September 2026 and loaded into SQLite: COMPLAINTS (owner complaints received 1 January 2015 – 8 September 2026, de-duplicated by ODI number: 777,040 rows), RECALLS (one row per make/model/year per campaign), TSBS / manufacturer communications (one row per make/model/year per document), INVESTIGATIONS. - Documents opened and read in full (all on static.nhtsa.gov, links in the article's "Sources and documents"): Part 573 reports 23V-734 (Toyota RAV4), 25V-019 and 24V-267 (Ford Bronco Sport / Maverick); investigation opening resume PE21-005; Honda ServiceNews A18070E; GM 23-NA-044; Porsche Technical Information 60/12 (rev. 1, 2026); Audi TSB 27 23 53 2069916/1. - Recall summaries for 17V-418, 23E-044, 19V-299, 19V-348, 19V-586, 22V-733, 20V-798, 24V-204, 24V-868, 24V-200, 24V-867, 23V-080, 25V-125 are from the NHTSA recall file and the api.nhtsa.gov campaign endpoint. COMPLAINT SET A — "battery-replaced complaints" (battery_replaced_complaints_by_make.csv, battery_replaced_complaints_by_model.csv), n = 4,276 Step 1. FTS5 pre-filter: battery AND (replaced OR replacement OR "new battery" OR "bought a battery" OR "purchased a battery" OR "installed a battery" OR "put in a new battery") → 13,442 rows. Step 2. Regex (case-insensitive) requiring a replacement statement: (replaced|replacing|replace|installed|bought|purchased|put in|got) + up to three of (the|a|my|our|another|new|brand new|2nd|second|third|3rd) + battery/batteries OR battery/batteries + (was|were|has been|had been|got|was then) + (replaced|changed) OR new battery/batteries + (was) (installed|put in|fitted). Step 3. Exclusions: - high-voltage / EV / hybrid-pack / key-fob contexts (hybrid battery, high voltage, HV battery, traction battery, lithium, li-ion, charging station, supercharg*, charge port, kWh, electric vehicle, EV, PHEV, BEV, plug-in, battery pack, drive battery, propulsion, key fob, fob battery, remote battery, key battery) UNLESS the text also says "12V"/"12 volt"; - makes TESLA, RIVIAN, LUCID, POLESTAR, FISKER, VINFAST, SMART and motorcycle makes; - complaints whose only replacement statement is negated ("did not / refused to / would not replace the battery"). Result: 4,276 complaints. Sample reading: 30 random complaints read in full; 27 were about a replaced 12-volt battery, 3 were off topic (a plug-in hybrid drive battery, a Chevrolet Volt battery control module, a battery cable). Estimated false-positive rate about 10%. Keyword counts over the 4,276 (one count per complaint, case-insensitive regex): still / again / same problem / came back / did not fix / no change / continued 2,113 (49.4%) · dealer 2,580 (60.3%) · jump 802 (18.8%) · drain OR parasitic 712 (16.7%) · alternator 571 (13.4%) · stranded / towed / tow truck / roadside 1,159 (27.1%) · recall (word) 1,045 (24.4%) · warranty 434 (10.1%) · "not covered" / "wear item" / "out of pocket" / "not under warranty" 96 (2.2%) · two or more batteries (second/third/2nd/3rd/two/three/multiple/several/another battery, or battery twice / 3 times) 286 (6.7%) · shop could not find / duplicate / reproduce / "nothing wrong" / "found nothing" 331 (7.7%) · corro* 76 (1.8%) · AGM 14 (0.3%). Vehicle age = year received minus model year (4,273 usable): median 5, quartiles 3 and 8; 26.5% at 3 years or less; 7.5% at 1 year or less. Mileage: NHTSA "miles" field where 0 < miles < 400,000 (2,334 usable): median 65,000; quartiles 33,650 and 100,000. Severity flags vs the all-complaints baseline (777,040): towed 7.51% vs 5.11% · crash 1.12% vs 4.37% · fire 1.92% vs 1.82%. Complaints received per year: 2015 266 · 2016 226 · 2017 265 · 2018 284 · 2019 399 · 2020 377 · 2021 442 · 2022 447 · 2023 355 · 2024 400 · 2025 464 · 2026 (to 8 Sep) 351. Per-10,000 figures divide by ALL complaints for that make or model in the same file, not by vehicles on the road. COMPLAINT SET B — owner-reported battery prices (battery_price_mentions.csv), n = 97 figures in 96 complaints Step 1. Pre-filter: battery AND (replaced OR replacement OR "new battery" OR replace OR bought OR purchased OR paid OR cost); same HV/EV/motorcycle exclusions as set A; RV/coach makes removed. Step 2. A dollar amount $50–$700 (digits not followed by another digit or comma, so "$1600" is not read as "$160") matched by one of: (new|replacement|another|second|third|2nd|3rd|a|the|for|my) [up to two words] battery [not "and"] [up to 40 chars] $N $N (for|on) (a|the|an|my|another|new|replacement|second|third)? [up to two words] battery battery (cost|costs|costing|was|were|is|at|price|priced|charged|paid|pay|out of pocket) [about/around/approximately]? $N Step 3. Dropped if the surrounding 25 characters contain: alternator, starter, tow, diagnos, labor, total, bill, module, sensor, cable, bracket, tray, test, check, fee, credit, deductible, rebate, refund, reimburs, latch, switch, tire, brake, pump, filter, oil, "over $", "almost $", "nearly $", spent, plus, gift, posts, recondition, jumper, jump box, charger, tender, backup, auxiliary. One figure per (complaint, amount). Sample reading: 40 random figures read in context; 36 were clearly the price paid or quoted for a 12-volt battery; 4 were a bill that also included a test, or a duplicate filing of the same incident. Two earlier, looser versions of the regex were read (40 each) and had roughly 45% and 70% precision; the digit-boundary bug and "battery and $N" pattern were the main errors and were fixed. Results: median $244; quartiles $169 / $366; mean $275. Bands: under $100: 1 · $100-149: 10 · $150-199: 21 · $200-249: 17 · $250-299: 11 · $300-399: 17 · $400+: 20. By year received: 2015-2019 n=44 median $187 (quartiles $150/$275) · 2020-2022 n=21 median $219 ($160/$300) · 2023-2026 n=32 median $329 ($270/$485). "dealer" within the 100-character window: n=18, median $285. Limitation: people who write to NHTSA about a battery are disproportionately those who paid a dealer and still had a problem; the figures are not a market average. The published CSV omits the text snippet; the ODI number lets anyone read the original at nhtsa.gov. RECALLS (battery_recalls_12v.csv), n = 89 campaigns Query: recall rows whose component field equals "ELECTRICAL SYSTEM:12V/24V/48V BATTERY" (battery cables are a separate component and are not included), one row per campaign, potentially-affected count = the maximum reported across the campaign's make/model/year rows. vehicle_class: "passenger" if the make is a passenger-car or light-truck brand (list in the script; 30 campaigns, 4,015,951 vehicles); otherwise "other" (trucks, buses, motorhomes, trailers, motorcycles, fire apparatus, stand-alone equipment) — 59 campaigns. defect_class: keyword reading of the defect + consequence text, in this order: "12V not recharged (DC-DC / charger)" (ICCU, DC-DC, converter, not charging); "battery loose / wrong fit / hold-down" (replacement, aftermarket, does not fit, tray, hold-down, bracket, secured, shift, move, loose); "battery itself defective" (degrad*, suddenly fail, internal, cast-on, weld, open circuit, premature); "battery sensor"; "terminal / cable / cover"; "other". fire_or_short: Y if the defect or consequence text mentions fire, short, thermal, spark, melt or overheat. Passenger campaigns: 13 of 30 = Y. Passenger-class breakdown: loose / wrong fit / hold-down 9 campaigns (2,177,695 vehicles) · sensor 1 (1,148,550) · not recharged 7 (405,821) · battery defective 2 (272,818) · terminal / cable / cover 4 (4,399) · other 7 (6,668). BULLETINS (battery_type_bulletins.csv), n = 40 Query: tsbs_fts match (AGM OR "absorbed glass" OR "absorbent glass" OR "enhanced flooded" OR EFB) AND battery, counted by DISTINCT nhtsa_id; heavy-truck, bus, RV, motorcycle and boutique makes removed; Nissan/Infiniti dealer-system reports that matched on "AGM" as a text fragment removed. Summaries are NHTSA's short abstracts; four documents (Honda A18070E, GM 23-NA-044, Porsche 60/12, Audi 2069916/1) were opened in full. LIMITATIONS - Complaints are self-reported, unverified, not a failure rate, and skew toward vehicles with publicity (class actions, recalls) and toward dealer visits that did not fix the car. - The replacement regex cannot tell a worn-out battery from a drained one; the set is "owners who replaced a 12-volt battery and then complained". - Keyword categories over the 4,276 texts were not individually read; the 30 read complaints and the 40 read prices are the checks on them. - Recall defect classes are keyword classes and one campaign can plausibly belong to two; the CSV shows the class assigned and the reader can re-class.