MechanicDB › OBD-II DTC database
The OBD-II trouble code database, as a file you can query.
15,886 diagnostic trouble codes joined to 56,729 ranked repair procedures, delivered as pipe-delimited CSV, Apache Parquet or a SQLite database. Built for OBD apps, scan-tool firmware, AI mechanic co-pilots and shop software — not a website you have to scrape.
What you get in the download
| 15,886 trouble codes | 9,249 SAE-standard (P0, P2, P34–P39, C0, B0, U0, U3) + 6,637 manufacturer-specific across 32 makes |
| 56,729 ordered procedures | 3–5 per code in authored consideration order (up to 8 in reviewed families, where diagnostic steps list no parts), conditional on prerequisites and findings, with difficulty tier, parts-cost range and labor hours where estimated |
| 75,055 parts mappings | Aftermarket part names per fix, with catalog search URLs |
| 647 fault families | Authored groupings that make the corpus navigable rather than a flat code list |
Formats
Every tier ships all three. Pipe-delimited CSV (UTF-8 BOM, Excel-safe). Apache Parquet with Snappy compression — a measured 92.5% smaller. A SQLite database carrying all four tables with the join chain intact.
Schema
Four relational tables, normalized for databases and pre-joined for notebooks.
| Table | Rows | Holds |
|---|---|---|
dtc_codes | 15,886 | Definition, system category, OEM flag and make, fault family, technical explanation |
diagnostic_fixes | 56,729 | Authored procedures with consideration order, difficulty tier, parts cost min/max, labor hours, steps |
replacement_parts | 75,055 | Aftermarket part names per fix, with catalog search URLs |
dtc_fixes_joined | 56,729 | The flat analytical view — all 21 columns, one read_csv / read_parquet |
Join chain: dtc_codes.code_id → diagnostic_fixes.code_id → replacement_parts.fix_id
probability_rank is the supported legacy name for authored procedure
consideration order within a code (1 = first). It is not measured cause
likelihood, repair success, severity, urgency or minimum cost. Follow each procedure's
prerequisites and diagnostic findings. See ordering metadata.
From edition 2026.10, IDs are stable: code_id, fault_id, fix_id and part_id keep their numbers when the dataset grows, so your joins and annotations survive updates. IDs are scoped by domain and table, and repairs are still listed in rank order. Numbers from earlier editions map through the identity and migration contract.
Coverage, stated honestly
The 9,249 SAE-universal codes apply to every vehicle regardless of make. OEM coverage is not even — it is strongest on US-market brands and some marques are thin. The full per-make breakdown is published on the homepage so you can check the makes you care about before buying rather than after. Every published code traces to a committed source; a build gate rejects fabricated codes.
Licensing
The 90-code sample is free under ODbL v1.0. The full dataset ships under a commercial license — $49 for the 9,249 SAE codes, $149 for SAE plus all 6,637 OEM codes. Full terms and the per-make breakdown are on the homepage.
Looking up one specific code instead? Browse the fault-family directory.
Working on trucks, buses or off-highway diesels? The J1939 fault code database covers SAE J1939 SPN/FMI fault pairs from published OEM documents.