NTSB investigations
14,041 cases where the phase of flight was Takeoff.
Cases, newest first
Query with SQL
duckdb -csv -c "WITH phase_names(main, name) AS (VALUES (100, 'Prior to flight'), (150, 'Standing'), (200, 'Pushback/towing'), (250, 'Taxi'), (300, 'Takeoff'), (350, 'Initial climb'), (400, 'Enroute'), (450, 'Maneuvering'), (500, 'Approach'), (550, 'Landing'), (600, 'Emergency descent'), (650, 'Uncontrolled descent'), (700, 'Post-impact'), (750, 'After landing'), (800, 'Other'), (990, 'Unknown')),
crosswalk(code, main, name) AS (VALUES (500, 150, 'Standing'), (501, 150, 'Standing - pre-flight'), (502, 150, 'Standing - starting engine(s)'), (503, 150, 'Standing - engine(s) operating'), (504, 150, 'Standing - engine(s) not operating'), (505, 150, 'Standing - idling rotors'), (510, 250, 'Taxi'), (511, 200, 'Taxi - pushback/tow'), (512, 250, 'Taxi - to takeoff'), (513, 250, 'Taxi - from landing'), (514, 250, 'Taxi - aerial'), (520, 300, 'Takeoff'), (521, 300, 'Takeoff - roll/run'), (522, 350, 'Takeoff - initial climb'), (523, 300, 'Takeoff - aborted'), (530, 400, 'Climb'), (531, 400, 'Climb - to cruise'), (540, 400, 'Cruise'), (541, 400, 'Cruise - normal'), (542, 400, 'Maneuvering - holding (IFR)'), (550, 400, 'Descent'), (551, 400, 'Descent - normal'), (552, 600, 'Descent - emergency'), (553, 650, 'Descent - uncontrolled'), (560, 500, 'Approach'), (561, 500, 'Approach - VFR pattern - downwind'), (562, 500, 'Approach - VFR pattern - base turn'), (563, 500, 'Approach - VFR pattern - base leg/base to final'), (564, 500, 'Approach - VFR pattern - final approach'), (565, 500, 'Go-around (VFR)'), (566, 500, 'Approach - IAF to FAF/outer marker (IFR)'), (567, 500, 'Approach - FAF/outer marker to threshold (IFR)'), (568, 500, 'Circling (IFR)'), (569, 500, 'Missed approach (IFR)'), (570, 550, 'Landing'), (571, 550, 'Landing - flare/touchdown'), (572, 550, 'Landing - roll'), (573, 550, 'Landing - aborted'), (574, 550, 'Emergency landing'), (575, 550, 'Emergency landing after takeoff'), (576, 600, 'Emergency descent/landing'), (580, 450, 'Maneuvering'), (581, 450, 'Maneuvering - aerial application'), (582, 450, 'Maneuvering - turn to reverse direction'), (583, 450, 'Maneuvering - turn to landing area (emergency)'), (590, 450, 'Hover'), (591, 450, 'Hover - in ground effect'), (592, 450, 'Hover - out of ground effect'), (600, 800, 'Other'), (610, 990, 'Unknown')),
current_codes AS (
SELECT e.case_mkey, TRY_CAST(e.\"tier1Number\" AS INTEGER) AS code,
row_number() OVER (PARTITION BY e.case_mkey ORDER BY coalesce(e.\"isDefiningEvent\", false) DESC, e.position) AS n
FROM 'https://openairdocs.org/data/latest/ntsb_events.parquet' e
WHERE e.aircrafts_position = 1 AND e.\"tier1Number\" GLOB '[1-9][0-9]*'
AND (e.\"isDefiningEvent\" OR e.case_mkey IN (SELECT \"mKey\" FROM 'https://openairdocs.org/data/latest/ntsb_case_detail.parquet' WHERE \"isPre1982\"))
),
phases AS (
SELECT case_mkey, 'current' AS scheme, code, CASE WHEN code >= 990 THEN 990 ELSE code // 50 * 50 END AS main
FROM current_codes WHERE n = 1
UNION ALL
SELECT o.case_mkey, 'older', o.\"phaseOfFlightCode\", w.main
FROM 'https://openairdocs.org/data/latest/ntsb_occurrences.parquet' o JOIN crosswalk w ON w.code = o.\"phaseOfFlightCode\"
WHERE o.aircrafts_position = 1 AND o.\"occurrenceNumber\" = 1 AND o.case_mkey NOT IN (SELECT case_mkey FROM current_codes)
),
case_phases AS (
SELECT p.*, c.\"eventDate\", c.\"highestInjuryLevel\" = 'Fatal' AS fatal, a.aircraft_model_code
FROM phases p JOIN 'https://openairdocs.org/data/latest/ntsb_case_detail.parquet' c ON c.\"mKey\" = p.case_mkey
LEFT JOIN 'https://openairdocs.org/data/latest/ntsb_aircrafts.parquet' a ON a.case_mkey = p.case_mkey AND a.position = 1
WHERE c.\"eventDate\" >= DATE '1962-01-01' AND p.main IN (SELECT main FROM phase_names)
)
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 case_mkey FROM case_phases WHERE main = 300)
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.
WITH phase_names(main, name) AS (VALUES (100, 'Prior to flight'), (150, 'Standing'), (200, 'Pushback/towing'), (250, 'Taxi'), (300, 'Takeoff'), (350, 'Initial climb'), (400, 'Enroute'), (450, 'Maneuvering'), (500, 'Approach'), (550, 'Landing'), (600, 'Emergency descent'), (650, 'Uncontrolled descent'), (700, 'Post-impact'), (750, 'After landing'), (800, 'Other'), (990, 'Unknown')),
crosswalk(code, main, name) AS (VALUES (500, 150, 'Standing'), (501, 150, 'Standing - pre-flight'), (502, 150, 'Standing - starting engine(s)'), (503, 150, 'Standing - engine(s) operating'), (504, 150, 'Standing - engine(s) not operating'), (505, 150, 'Standing - idling rotors'), (510, 250, 'Taxi'), (511, 200, 'Taxi - pushback/tow'), (512, 250, 'Taxi - to takeoff'), (513, 250, 'Taxi - from landing'), (514, 250, 'Taxi - aerial'), (520, 300, 'Takeoff'), (521, 300, 'Takeoff - roll/run'), (522, 350, 'Takeoff - initial climb'), (523, 300, 'Takeoff - aborted'), (530, 400, 'Climb'), (531, 400, 'Climb - to cruise'), (540, 400, 'Cruise'), (541, 400, 'Cruise - normal'), (542, 400, 'Maneuvering - holding (IFR)'), (550, 400, 'Descent'), (551, 400, 'Descent - normal'), (552, 600, 'Descent - emergency'), (553, 650, 'Descent - uncontrolled'), (560, 500, 'Approach'), (561, 500, 'Approach - VFR pattern - downwind'), (562, 500, 'Approach - VFR pattern - base turn'), (563, 500, 'Approach - VFR pattern - base leg/base to final'), (564, 500, 'Approach - VFR pattern - final approach'), (565, 500, 'Go-around (VFR)'), (566, 500, 'Approach - IAF to FAF/outer marker (IFR)'), (567, 500, 'Approach - FAF/outer marker to threshold (IFR)'), (568, 500, 'Circling (IFR)'), (569, 500, 'Missed approach (IFR)'), (570, 550, 'Landing'), (571, 550, 'Landing - flare/touchdown'), (572, 550, 'Landing - roll'), (573, 550, 'Landing - aborted'), (574, 550, 'Emergency landing'), (575, 550, 'Emergency landing after takeoff'), (576, 600, 'Emergency descent/landing'), (580, 450, 'Maneuvering'), (581, 450, 'Maneuvering - aerial application'), (582, 450, 'Maneuvering - turn to reverse direction'), (583, 450, 'Maneuvering - turn to landing area (emergency)'), (590, 450, 'Hover'), (591, 450, 'Hover - in ground effect'), (592, 450, 'Hover - out of ground effect'), (600, 800, 'Other'), (610, 990, 'Unknown')),
current_codes AS (
SELECT e.case_mkey, TRY_CAST(e."tier1Number" AS INTEGER) AS code,
row_number() OVER (PARTITION BY e.case_mkey ORDER BY coalesce(e."isDefiningEvent", false) DESC, e.position) AS n
FROM 'https://openairdocs.org/data/latest/ntsb_events.parquet' e
WHERE e.aircrafts_position = 1 AND e."tier1Number" GLOB '[1-9][0-9]*'
AND (e."isDefiningEvent" OR e.case_mkey IN (SELECT "mKey" FROM 'https://openairdocs.org/data/latest/ntsb_case_detail.parquet' WHERE "isPre1982"))
),
phases AS (
SELECT case_mkey, 'current' AS scheme, code, CASE WHEN code >= 990 THEN 990 ELSE code // 50 * 50 END AS main
FROM current_codes WHERE n = 1
UNION ALL
SELECT o.case_mkey, 'older', o."phaseOfFlightCode", w.main
FROM 'https://openairdocs.org/data/latest/ntsb_occurrences.parquet' o JOIN crosswalk w ON w.code = o."phaseOfFlightCode"
WHERE o.aircrafts_position = 1 AND o."occurrenceNumber" = 1 AND o.case_mkey NOT IN (SELECT case_mkey FROM current_codes)
),
case_phases AS (
SELECT p.*, c."eventDate", c."highestInjuryLevel" = 'Fatal' AS fatal, a.aircraft_model_code
FROM phases p JOIN 'https://openairdocs.org/data/latest/ntsb_case_detail.parquet' c ON c."mKey" = p.case_mkey
LEFT JOIN 'https://openairdocs.org/data/latest/ntsb_aircrafts.parquet' a ON a.case_mkey = p.case_mkey AND a.position = 1
WHERE c."eventDate" >= DATE '1962-01-01' AND p.main IN (SELECT main FROM phase_names)
)
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 case_mkey FROM case_phases WHERE main = 300)
ORDER BY c."eventDate" DESC, c."ntsbNumber" DESCRun it at the DuckDB prompt, or in any tool that reads Parquet over HTTPS. More ways to query the release are on Use the data.
NTSB MKC71DDM09Accident · No injuriesClosedCessna 172H · Pequot Lakes, MNNTSB FTW71FRG01Accident · No injuriesClosedSwearingen SA26AT · New Braunfels, TXNTSB SEA70DDG15Accident · No injuriesClosedPiper PA-32 · Three Forks, MTNTSB LAX70DVA21Accident · No injuriesClosedCessna 182 · Bakersfield, CANTSB MIA70DLA27Accident · No injuriesClosedAero Comdr A-9B · Altha, FLNTSB FTW71DQG51Accident · No injuriesClosedBell 47D1 · Hale Center, TXNTSB CHI70DBA27Accident · No injuriesClosedPiper PA-25 · Ireland, INNTSB MKC70DCJ33Accident · No injuriesClosedCessna 150 · Lincoln, NENTSB FTW70FPD15Accident · Serious injuriesClosedCessna 182M · Smithfield, TXNTSB NYC70FHD39Accident · No injuriesClosedCessna 172 · Hammonton, NJNTSB MKC70DDD22Accident · No injuriesClosedFairchild M-62 · Warwick, NDNTSB MIA70FLD33Accident · Minor injuriesClosedPiper PA-28 · Bradenton, FLNTSB MIA70FLD32Accident · No injuriesClosedBell 47-G2 · Kissimmee, FLNTSB FTW70FPA16Accident · No injuriesClosedCessna 180 · Cedar Hill, TXNTSB MKC70DDM35Accident · No injuriesClosedCessna 172G · Lakeville, MNNTSB SEA70DDG12Accident · No injuriesClosedCessna 172G · Belgrade, MTNTSB MIA70FKJ41Accident · No injuriesClosedAero Comdr 500-B · Clanton, ALNTSB FTW70DRG51Accident · No injuriesClosedCessna 150 · Willow City, TXNTSB CHI70DBQ21Accident · No injuriesClosedCessna 170B · Waggoner, ILNTSB FTW70FPD17Accident · No injuriesClosedCessna 170B · Abilene, TXNTSB NYC70AN128Accident · Serious injuriesClosedDouglas DC-8F · Bangor, MENTSB ANC70IA087Incident · No injuriesClosedAeronca 7DC · Dillingham, AKNTSB NYC70DFA25Accident · No injuriesClosedCessna 180 · Willsboro, NYNTSB MIA70DLD28Accident · No injuriesClosedCessna 206 · Groveland, FLNTSB DEN71DXD03Accident · No injuriesClosedBellanca 17-31A · Rocky Ford, CONTSB CHI70DDM05Accident · Minor injuriesClosedCessna 150 · Baldwin, WINTSB LAX70DUJ42Accident · No injuriesClosedGrumman TBM · White River, AZNTSB ANC70DAG25Accident · No injuriesClosedPiper PA-12 · Seldovia, AKNTSB MKC70DDM33Accident · No injuriesClosedCessna 180B · Grand Rapids, MNNTSB NYC70IN127Incident · No injuriesClosedBoeing 747 · Jamaica, NYNTSB ANC70AA083Accident · No injuriesClosedPiper PA-18 · Sand Point, AKNTSB MIA70DKT25Accident · No injuriesClosedPiper PA-24 · Opa Locka, FLNTSB NYC71DFG05Accident · No injuriesClosedCessna 172 · Wolfeboro, NHNTSB NYC70FHA12Accident · Minor injuriesClosedTaylorcraft BL-65 · Honesdale, PANTSB MKC70FDM28Accident · Minor injuriesClosedCessna 150H · Crystal, MNNTSB MKC70DCD36Accident · No injuriesClosedCessna 177 · Nevada, IANTSB FTW70DPJ21Accident · No injuriesClosedBeech V35A · Bethany, OKNTSB SEA70DXM17Accident · No injuriesClosedPiper PA-18 · Border, WYNTSB CHI70DGJ12Accident · No injuriesClosedLuscombe 8E · Monticello, KYNTSB ANC70AA081Accident · 1 fatalClosedBell 206-A · Deadhorse, AKNTSB CHI70DDW19Accident · No injuriesClosedCessna 140 · Adrian, MINTSB LAX70DUJ37Accident · No injuriesClosedCessna 150 · Carefree, AZNTSB CHI70FBJ28Accident · No injuriesClosedPiper PA-30 · Charlotte, MINTSB NYC70DFA22Accident · No injuriesClosedPiper PA-18 · Hinckley, NYNTSB MKC70AK064Accident · No injuriesClosedBeech S35 · Guthrie Cntr, IANTSB IAD71FIG17Accident · No injuriesClosedFairchild M-62C · Baltimore, MDNTSB FTW70DPM11Accident · No injuriesClosedBoeing A75N1 · Vera, OKNTSB NYC70IN121Incident · No injuriesClosedAero Comdr 1121B · Pomona, NJNTSB CHI70FGG20Accident · No injuriesClosedCessna 140 · Chesterville, OHNTSB CHI70FGJ17Accident · No injuriesClosedCessna A188 · Philpot, KY