NTSB investigations
14,038 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 FTW76DQH10Accident · No injuriesClosedBeech A23-19 · Dalhart, TXNTSB MIA76AM109Accident · 2 fatalClosedBeech C-45H · W Palm Beach, FLNTSB MIA77DLA68Accident · No injuriesClosedCessna 172 · Laurel Hill, FLNTSB IAD76FIJ19Accident · No injuriesClosedPiper PA-30 · Daybrook, WVNTSB ANC76DAA62Accident · No injuriesClosedCessna 170 · Tok, AKNTSB LAX76FUQ48Accident · Minor injuriesClosedBell 47G-5 · Lompoc, CANTSB LAX76DUK08Accident · No injuriesClosedHickey SE5A · Phoenix, AZNTSB CHI76FEI49Accident · Minor injuriesClosedCessna 150L · Millbury, OHNTSB ANC76FAH72Accident · Serious injuriesClosedCessna 170B · Tyonek, AKNTSB OAK76FXQ67Accident · No injuriesClosedKinner Kinair · Reno, NVNTSB SEA77DYG03Accident · No injuriesClosedCessna 172M · Benge, WANTSB SEA76DYA48Accident · No injuriesClosedHiller Acft UH-12E · Jerome, IDNTSB LAX76FUA32Accident · Minor injuriesClosedBell 47G · San Pedro, CANTSB ANC76DAH69Accident · No injuriesClosedBellanca 7GCBC · Sutton, AKNTSB FTW76DPD55Accident · No injuriesClosedAeronca 7AC · Ft.Worth, TXNTSB SEA76AS075Accident · 1 fatalClosedPiper PA-28 · Mountain Home, IDNTSB MIA76DKH08Accident · No injuriesClosedCessna 150 · Columbus, GANTSB MIA76FKJ99Accident · Minor injuriesClosedHiller UH-12B · Midland City, ALNTSB MIA76FKH07Accident · No injuriesClosedCessna 150 · Stone Mountain, GANTSB NYC76FFJ31Accident · Serious injuriesClosedPiaggo 136-L2 · Canandaigua, NYNTSB SEA76DYC69Accident · No injuriesClosedChampion 7ECA · Wallowa, ORNTSB OAK76DJA23Accident · No injuriesClosedBoeing A75N1 · Hanapepe, HINTSB FTW76FRG88Accident · No injuriesClosedBeech A56TC · Batesville, TXNTSB MIA76DKH02Accident · Minor injuriesClosedWeatherly 201B · Shellman, GANTSB CHI76FEC58Accident · No injuriesClosedCessna 180 · Salem, MINTSB ANC76DAH61Accident · No injuriesClosedBellanca 7GCBC · Skwentna, AKNTSB ANC76AA126Accident · Minor injuriesClosedCessna 185 · Iliamna, AKNTSB MIA76FLA65Accident · Minor injuriesClosedHughes 269B · Pensacola, FLNTSB MKC76FCD64Accident · No injuriesClosedBeech B24R · Lamoni, IANTSB NYC76FHA50Accident · No injuriesClosedGrum Amer AA-5 · Allentown, PANTSB MKC76DCJ64Accident · No injuriesClosedCessna 188 · Bridgeport, NENTSB FTW76FRD63Accident · No injuriesClosedStinson 108 · Baton Rouge, LANTSB SEA76DYE54Accident · Minor injuriesClosedCessna 177 · Eliza Island, WANTSB DEN76DTC45Accident · No injuriesClosedBellanca 7GCBC · Saratoga, WYNTSB MIA76FLA63Accident · No injuriesClosedBell 47D-1 · Campbellton, FLNTSB ANC76DAA51Accident · No injuriesClosedBellanca 7GCBC · Fairbanks, AKNTSB MIA76FLG46Accident · No injuriesClosedCessna 195A · Charleston, SCNTSB FTW76FRG83Accident · Minor injuriesClosedEnstrom F-28A · Brownsville, TXNTSB DEN76DTC44Accident · No injuriesClosedBellanca 7GCBC · Glenrock, WYNTSB MKC76FCJ63Accident · No injuriesClosedPiper PA-36 · North Platte, NENTSB OAK76DVH03Accident · No injuriesClosedCessna 172 · Franklin, CANTSB CHI76FEA47Accident · No injuriesClosedCessna 310K · New Castle, INNTSB MKC76FCA39Accident · No injuriesClosedBell 47J · St Louis, MONTSB CHI76FEC52Accident · No injuriesClosedCessna 172M · Westland, MINTSB MKC76DCQ74Accident · No injuriesClosedCessna 150 · Clay Center, KSNTSB MIA76FLD76Accident · No injuriesClosedBeech F50 · North Port, FLNTSB CHI76DEV57Accident · No injuriesClosedCessna 177 · Salem, ILNTSB SEA76DTA28Accident · No injuriesClosedPiper PA-28 · Powderville, MTNTSB OAK76DXQ63Accident · No injuriesClosedGlobe GC-1B · Wild Horse Res, NVNTSB NYC76FHD34Accident · Serious injuriesClosedGrum Amer AA-5A · West Chester, PA