Maintenance

NTSB finding section · Personnel issues › Task performance

Cases
1,074
In the probable cause
964 (90%)
Fatal cases
156
NTSB code
020620

NTSB has coded findings and defining events since 2008. Earlier cases used its older occurrence and cause codes, so they aren’t counted here.

When and where

In green, cases where NTSB made it part of the probable cause; in gray, a factor or other finding. Findings are coded with the final report, often a year or more after the event, so the latest years are incomplete.

Cases per year

2008In the probable causeFactor only2026
Cases with Maintenance per year: 1,074 cases
200876
200948
201056
201167
201279
201379
201464
201575
201662
201768
201854
201951
202053
202141
202264
202352
202462
202522
20261
Query with SQL
duckdb -csv -c "SELECT year(c.\"eventDate\") AS year, count(DISTINCT f.case_mkey) AS cases,
    count(DISTINCT f.case_mkey) FILTER (WHERE f.\"inProbableCause\") AS in_probable_cause
  FROM 'https://openairdocs.org/data/latest/ntsb_findings.parquet' f JOIN 'https://openairdocs.org/data/latest/ntsb_case_detail.parquet' c ON c.\"mKey\" = f.case_mkey
  WHERE starts_with(f.\"findingCode\", '020620') AND c.\"eventDate\" >= DATE '2000-01-01'
  GROUP BY 1
  ORDER BY 1"

Prints the counts as CSV. It reads the release’s Parquet files over HTTPS, so there’s nothing to download first. Install DuckDB to run it.

Subsections · 8

Query with SQL
duckdb -csv -c "SELECT left(f.\"findingCode\", 8) AS code, max(f.\"tier4Name\") AS name,
    count(DISTINCT f.case_mkey) AS cases,
    count(DISTINCT f.case_mkey) FILTER (WHERE f.\"inProbableCause\") AS in_probable_cause
  FROM 'https://openairdocs.org/data/latest/ntsb_findings.parquet' f
  WHERE starts_with(f.\"findingCode\", '020620') AND f.\"findingCode\" GLOB '[0-9][0-9]*'
  GROUP BY 1
  ORDER BY cases DESC, code"

Prints the counts as CSV. It reads the release’s Parquet files over HTTPS, so there’s nothing to download first. Install DuckDB to run it.

In the same cases

Query with SQL
duckdb -csv -c "WITH matched AS (SELECT DISTINCT case_mkey, aircrafts_position FROM 'https://openairdocs.org/data/latest/ntsb_findings.parquet' WHERE starts_with(\"findingCode\", '020620'))
  SELECT * FROM (
  SELECT 'Defining event' AS kind, e.\"tier2Number\" AS code, max(e.\"eventTier2Name\") AS name, count(DISTINCT f.case_mkey) AS cases
  FROM matched f JOIN 'https://openairdocs.org/data/latest/ntsb_events.parquet' e ON e.case_mkey = f.case_mkey AND e.aircrafts_position = f.aircrafts_position AND e.\"isDefiningEvent\"
  WHERE e.\"tier2Number\" <> ''
  GROUP BY ALL
  UNION ALL
  SELECT 'Aircraft model', a.aircraft_model_code, any_value(concat_ws(' ', m.manufacturer, m.model)), count(DISTINCT f.case_mkey)
  FROM matched f JOIN 'https://openairdocs.org/data/latest/ntsb_aircrafts.parquet' a ON a.case_mkey = f.case_mkey AND a.position = f.aircrafts_position
  LEFT JOIN 'https://openairdocs.org/data/latest/faa_aircraft_model.parquet' m ON m.code = a.aircraft_model_code
  WHERE a.aircraft_model_code IS NOT NULL
  GROUP BY ALL
  UNION ALL
  SELECT 'Other finding', left(g.\"findingCode\", 8), max(g.\"tier4Name\"), count(DISTINCT g.case_mkey)
  FROM 'https://openairdocs.org/data/latest/ntsb_findings.parquet' g
  WHERE g.case_mkey IN (SELECT case_mkey FROM matched) AND NOT starts_with(g.\"findingCode\", '020620') AND g.\"findingCode\" GLOB '[0-9][0-9]*'
  GROUP BY ALL
  )
  QUALIFY row_number() OVER (PARTITION BY kind ORDER BY cases DESC) <= 10
  ORDER BY kind, cases DESC"

Prints the counts as CSV. It reads the release’s Parquet files over HTTPS, so there’s nothing to download first. Install DuckDB to run it.

Newest cases · 1,074

NTSB ERA26LA151Accident · Minor injuriesClass 4 · LimitedFinal reportPiper PA-32-260 · Block Island, RIMaintenance personnel’s failure to ensure that the throttle cable was properly secured to the carburetor, which resulted an inflight separation of the throttle cable and the pilots’ inability to control the engine.Mar 25, 2026 · N7081H · Substantial damageNTSB CEN26LA074Accident · Minor injuriesClass 3 · LimitedFinal reportPitts S1S · Carbondale, ILA loss of engine power due to fuel starvation resulting from an uncommanded change to the fuel servo mixture position due to the improperly installed mixture cable.Dec 31, 2025 · N401MS · Substantial damageNTSB WPR26LA056Accident · No injuriesClass 4 · LimitedFinal reportRotorway Exec · Lake Havasu City, AZThe pilot’s improper securing hardware installation, which resulted in a loss of throttle control and a loss of engine power.Dec 8, 2025 · C-GBZD · Substantial damageNTSB CEN25LA402Accident · No injuriesClass 4 · LimitedFinal reportTextron 525C · Baton Rouge, LAThe improper installation of the trunnion pin, which resulted in a failure of the right main landing gear. Contributing to the accident was the failure of maintenance personnel to follow the aircraft manufacturer’s maintenance procedures.Sep 25, 2025 · N361MB · Substantial damageNTSB CEN25LA401Accident · No injuriesClass 3 · LimitedFinal reportCubCrafters CCK-2000 · Thompsonville, MIA total loss of engine power due to a lack of ignition resulting from a fractured alternator ring terminal and the builder’s incorrect installation of the wire connecting to the alternator. Contributing to the total loss of engine power was the failure of the…Sep 7, 2025 · N40DT · Substantial damageNTSB ERA25LA295Accident · No injuriesClass 4 · LimitedFinal reportCessna 195 · Memphis, TNFailure of the left main landing gear due to the loss of the protective paint coating and a change in the local surface finish from impermissible grinding, which resulted in fatigue cracking.Aug 8, 2025 · N1950C · Substantial damageNTSB ANC25LA059Accident · No injuriesClass 4 · LimitedFinal reportCessna 170B · Denali Park, AKThe failure of the left main landing gear spring due to a fatigue fracture during landing on uneven terrain.Jun 25, 2025 · N2655D · Substantial damageNTSB ERA25LA238Accident · No injuriesClass 3 · LimitedFinal reportCessna 310 · Fayetteville, TNThe pilot’s decision to operate the airplane with known discrepancies.Jun 24, 2025 · N5045Q · Substantial damageNTSB ERA25FA230Accident · 2 fatalClass 3 · FieldFinal reportMooney M20F · Beverly, MAThe pilot’s failure to maintain control of the airplane while maneuvering to return to the airport which resulted in an aerodynamic stall. Contributing to the accident was the improperly installed No. 2 cylinder bottom spark plug by maintenance personnel,…Jun 19, 2025 · N9573M · Substantial damageNTSB ERA25LA223Accident · No injuriesClass 4 · LimitedFinal reportPiper PA22 · Hebron, OHThe airplane owner and pilot’s intentional allowance of unapproved maintenance and maintenance personnel’s failure to adequately maintain or service the brake system, which resulted in a total loss of brake pressure.Jun 7, 2025 · N6804B · Substantial damage
See all 1,074 cases
Query with SQL
duckdb -csv -c "SELECT c.\"ntsbNumber\", c.\"eventDate\", c.\"eventType\", c.\"eventCity\", c.\"eventStateOrRegion\", a.n_number, a.\"aircraftMake\", a.\"aircraftModel\", c.\"highestInjuryLevel\", c.\"totalFatal\", c.\"completionStatus\", c.report_url
  FROM 'https://openairdocs.org/data/latest/ntsb_case_detail.parquet' c LEFT JOIN 'https://openairdocs.org/data/latest/ntsb_aircrafts.parquet' a ON a.case_mkey = c.\"mKey\" AND a.position = 1
  WHERE c.\"mKey\" IN (SELECT f.case_mkey FROM 'https://openairdocs.org/data/latest/ntsb_findings.parquet' f WHERE starts_with(f.\"findingCode\", '020620'))
  ORDER BY c.\"eventDate\" DESC, c.\"ntsbNumber\" DESC"

Prints the whole list as CSV. It reads the release’s Parquet files over HTTPS, so there’s nothing to download first. Install DuckDB to run it.