NTSB finding subcategory · Aircraft

Cases
476
In the probable cause
432 (91%)
Fatal cases
95
NTSB code
0104

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 Aircraft propeller/rotor per year: 476 cases
200850
200927
201028
201138
201239
201326
201426
201543
201625
201721
201821
201922
202020
202117
202221
202320
202424
20258
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\", '0104') 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.

Sections · 7

Query with SQL
duckdb -csv -c "SELECT left(f.\"findingCode\", 6) AS code, max(f.\"tier3Name\") 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\", '0104') 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\", '0104'))
  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\", '0104') 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 · 476

NTSB CEN26LA081Accident · No injuriesClass 4 · LimitedFinal reportEla ELA10 · Morris, ILThe pilot’s failure obtain the proper rotor rpm before applying power for the takeoff roll which resulted in a loss of control.Dec 23, 2025 · N396S · Substantial damageNTSB WPR26LA062Accident · No injuriesClass 4 · LimitedFinal reportBell 407 · Las Vegas, NVTail rotor blade impact from an unidentified object at an undetermined time.Dec 15, 2025 · N404LL · Substantial damageNTSB WPR25LA203Accident · No injuriesClass 4 · LimitedFinal reportRobinson Helicopter R44 · Park City, UTThe pilot’s failure to maintain rotor rpm during an approach to landing in a mountainous area, which resulted in a collision with terrain.Jul 6, 2025 · N715SG · Substantial damageNTSB ERA25LA236Accident · No injuriesClass 4 · LimitedFinal reportSting Sport TL-2000 · Dunavant, VAThe inflight failure of the propeller due to its exceedance of the manufacturer’s overhaul requirement.Jun 20, 2025 · N878N · Substantial damageNTSB ANC25LA028Accident · Minor injuriesClass 3 · LimitedFinal reportPiper PA-28-140 · Royal Kunia, HIImproper alteration of the crankshaft propeller flange at an unknown time, which resulted in an in-flight separation of the propeller assembly.Mar 27, 2025 · N261FC · Substantial damageNTSB CEN25LA117Accident · No injuriesClass 3 · LimitedFinal reportVans RV-7A · Plainview, TXThe improper machining of the propeller blade bearing seat, which resulted in an inflight propeller blade fatigue failure. Contributing to the accident was the improper machining of the propeller hub and propeller blade root and machining surface quality…Mar 10, 2025 · N923ZA · Substantial damageNTSB WPR25LA096Accident · No injuriesClass 3 · LimitedFinal reportCessna 150J · Minersville, UTThe failure of the propeller blade due to fatigue that originated from an impact pit sustained at an unknown time. Contributing to the accident was the failure of unknown maintenance personnel to detect and repair the impact pit before painting the propeller,…Feb 16, 2025 · N151GW · Substantial damageNTSB WPR25LA093Accident · No injuriesClass 4 · LimitedFinal reportAirbus Helicopters EC 130 T2 · Moab, UTThe inflight collision with debris during takeoff.Feb 13, 2025 · N3WL · Substantial damageNTSB ERA25LA040Accident · Minor injuriesClass 4 · LimitedFinal reportHughes 369D · Waycross, GAAn encounter with a foreign object, which resulted in a loss of control and collision with terrain.Nov 5, 2024 · N11AS · Substantial damageNTSB CEN25LA013Accident · Minor injuriesClass 3 · LimitedFinal reportRotorway Exec · Plymouth, INA loss of control due to the failed forward tail rotor belt as a result of the owner’s failure to follow the helicopter manufacturer’s tail rotor belt replacement recommendations.Oct 11, 2024 · N314AC · Substantial damage
See all 476 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\", '0104'))
  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.