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 NYC73FFA19Accident · No injuriesClosedCessna 182P · Essex, NYNTSB LAX73FUQ15Accident · No injuriesClosedTaylorcraft BC12-D · Santa Paula, CANTSB FTW73FRD09Accident · Serious injuriesClosedPiper PA-18 · Bayou Chene, LANTSB NYC73DNA28Accident · No injuriesClosedPiper PA-28 · Taunton, MANTSB LAX73DUJ35Accident · Minor injuriesClosedAeronca 7AC · Queen Creek, AZNTSB CHI73DEA18Accident · No injuriesClosedCessna 150 · Greencastle, INNTSB SEA73FTI13Accident · No injuriesClosedCessna 421 · Kalispell, MTNTSB SEA73DYI05Accident · No injuriesClosedAero Comdr 100 · Burns, ORNTSB MIA73RKT18Accident · No injuriesClosedCessna 180D · Nassau, Burkina FasoNTSB NYC73FGM10Accident · No injuriesClosedCessna 172H · Emlenton, PANTSB NYC73DHA09Accident · No injuriesClosedSwift GC-1B · Blairstown, NJNTSB LAX73FUQ12Accident · No injuriesClosedCessna 150J · Snta Susana, CANTSB FTW73DPG25Accident · No injuriesClosedCessna 337B · Lonoke, ARNTSB ANC73FAG50Accident · Minor injuriesClosedCessna 180B · Anchorage, AKNTSB ANC73DAG49Accident · No injuriesClosedCessna 185E · King Salmon, AKNTSB OAK73DVG22Accident · No injuriesClosedCessna 172 · Vacaville, CANTSB NYC73DIA06Accident · No injuriesClosedPiper PA-18 · Lothian, MDNTSB FTW73FPA14Accident · No injuriesClosedCessna 140 · Terrell, TXNTSB DEN73DTC09Accident · No injuriesClosedPiper PA-18 · Kaycee, WYNTSB DEN73DTM11Accident · Minor injuriesClosedCessna T210-H · St George, UTNTSB NYC73FIJ05Accident · No injuriesClosedHelio H-295 · Pineville, WVNTSB NYC73DNC24Accident · No injuriesClosedPiper PA-28 · Wentworth, NHNTSB CHI73DEI18Accident · No injuriesClosedCessna 172 · Millersburg, OHNTSB LAX73DVM07Accident · No injuriesClosedCessna 182 · Paso Robles, CANTSB FTW73FPG23Accident · No injuriesClosedCessna 188 · Scott, ARNTSB CHI73AC033Accident · 4 fatalClosedCessna 337B · Chicago, ILNTSB MIA73DLT04Accident · No injuriesClosedPiper PA-25 · Jackson, TNNTSB MIA73DLG20Accident · No injuriesClosedPiper PA-28 · Johns Island, SCNTSB ANC73AA021Accident · Minor injuriesClosedCessna 180 · Chefornak, AKNTSB OAK73AP007Accident · No injuriesClosedBoeing 707 · S.Francisco, CANTSB FTW73DRJ16Accident · No injuriesClosedBoeing A75N1 · Evelyn, LANTSB ANC73AA019Accident · No injuriesClosedHughes 369S · Craig, AKNTSB FTW73FPG22Accident · No injuriesClosedCessna 188B · Marvell, ARNTSB NYC73FFA14Accident · No injuriesClosedPiper PA-28 · Greene, NYNTSB FTW73FRD05Accident · No injuriesClosedBell 47J2A · Leeville, LANTSB NYC73AN044Accident · No injuriesClosedCessna 210L · Davis, NCNTSB LAX73DUJ26Accident · No injuriesClosedPiper PA-22 · Duncan, AZNTSB ANC73DAG40Accident · No injuriesClosedCessna 180C · Paxson, AKNTSB CHI73FEE22Accident · Minor injuriesClosedPiper PA-28 · Rockford, ILNTSB MKC73FTG07Accident · No injuriesClosedPiper PA-20 · Nekoma, NDNTSB NYC73FFJ06Accident · Serious injuriesClosedSchweizer TSC1A1 · Watkins Glen, NYNTSB FTW73FPG15Accident · No injuriesClosedCessna 188 · Elaine, ARNTSB UNK72X0114Accident · Minor injuriesClosedHoward DGA-15 · Anhien Lk Bc, CanadaNTSB MKC73DER15Accident · No injuriesClosedCessna 180H · Walker, MNNTSB MIA73AM023Accident · No injuriesClosedMartin 404 · Ft.Lauderdale, FLNTSB ANC73DAG32Accident · No injuriesClosedPiper PA-12 · Prt Alsworth, AKNTSB MIA73AM020Accident · No injuriesClosedFord MTR 5-AT-B · Peachtree City, GANTSB FTW73DPD06Accident · No injuriesClosedCallair A-9 · De Leon, TXNTSB DEN73DTE22Accident · No injuriesClosedPiper PA-25 · Eckley, CONTSB MKC73DCJ17Accident · Minor injuriesClosedAeronca 7FC · Chadron, NE