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 DEN80FA060Accident · 1 fatalClosedBell UH-1B · Provo, UTNTSB FTW80DA110Accident · No injuriesClosedCessna 185 · Houma, LANTSB DEN80FTA21Accident · No injuriesClosedBell UH-1B · Red Lodge, MTNTSB CHI80FEP60Accident · No injuriesClosedPiper PA-28 · Cornucopia, WINTSB CHI80DEM43Accident · No injuriesClosedCessna 172 · Lansing, MINTSB SEA80DYA23Accident · No injuriesClosedBeech C24R · Soda Springs, IDNTSB NYC80DA084Accident · No injuriesClosedCessna 150 · Geneseo, NYNTSB FTW80DRJ36Accident · Minor injuriesClosedWeatherly 201B · Winnsboro, LANTSB ATL80FLA10Accident · No injuriesClosedPiper PA-30 · Valdosta, GANTSB FTW80FRG67Accident · No injuriesClosedCessna 150 · Mcallen, TXNTSB ANC80DA095Accident · No injuriesClosedDehavilland DHC-2 · Kukaklek Lake, AKNTSB SEA80FYP34Accident · No injuriesClosedBell 47G-2 · Sunnyside, WANTSB LAX80DVA64Accident · No injuriesClosedBell 47G · Bakersfield, CANTSB LAX80FUA19Accident · Minor injuriesClosedPiper PA-28R · Long Beach, CANTSB ATL80FKG21Accident · No injuriesClosedCessna 182 · Douglas, GANTSB MKC80FCG42Accident · No injuriesClosedCessna 182G · Ft Leavenworth, KSNTSB MKC80FCA30Accident · No injuriesClosedAir Tractor AT-301 · Mathews, MONTSB SEA80DYM55Accident · No injuriesClosedHiller Acft UH-12E · Tillamook, ORNTSB MKC80FCA28Accident · No injuriesClosedLuscombe 8A · Kennett, MONTSB NYC80FHJ22Accident · No injuriesClosedCessna 206F · Dunwood, NYNTSB DEN80FTE71Accident · No injuriesClosedCessna 340 · Steamboat Spgs, CONTSB CHI80DEE43Accident · No injuriesClosedCessna 172N · Rockford, ILNTSB ANC80DA092Accident · No injuriesClosedPiper PA-32 · Ekuk, AKNTSB LAX80FA132Accident · Serious injuriesClosedBell 47G3B1 · Los Angeles, CANTSB LAX80FVW23Accident · No injuriesClosedBreezy RLU-1A · Las Vegas, NVNTSB MIA80FA090Accident · 2 fatalClosedPiper PA-31 · Dania, FLNTSB ATL80DLQ25Accident · Serious injuriesClosedSchweizer SGS233 · Frankfort, KYNTSB NYC80DA067Accident · Minor injuriesClosedHiller Acft UH-12C · Meriden, CTNTSB LAX80DUM25Accident · No injuriesClosedPiper PA-28 · Rnch Vallecito, CANTSB DEN80DTM36Accident · Serious injuriesClosedHiller Acft UH-12D · Coalville, UTNTSB NYC80FHM24Accident · No injuriesClosedCessna 172N · Spring Valley, NYNTSB MIA80IA089Incident · No injuriesClosedConvair 440 · Clearwater, FLNTSB ATL80FKM24Accident · Minor injuriesClosedCessna 150 · Bryson City, NCNTSB LAX80FUJ90Accident · No injuriesClosedPiper PA-18 · Mesa, AZNTSB ANC80DA082Accident · No injuriesClosedAerospatle SA341G · Gulkana, AKNTSB DEN80FTE68Accident · Minor injuriesClosedCessna 172K · Aspen, CONTSB NYC80FNC48Accident · No injuriesClosedPiper J-3 · Springfield, VTNTSB NYC80FNA18Accident · No injuriesClosedCessna 172 · Halifax, MANTSB CHI80DEC28Accident · Minor injuriesClosedCessna 172N · Ubly, MINTSB ANC81DAA06Accident · No injuriesClosedCessna 180 · Fairbanks, AKNTSB MIA80FA087Accident · Minor injuriesClosedDouglas C-47A · New Smyrna Bch, FLNTSB DEN80FA052Accident · 2 fatalClosedAerospatial SA315 · Meeteetse, WYNTSB CHI80FEM38Accident · No injuriesClosedPiper PA-28 · Kalamazoo, MINTSB MKC80DCD28Accident · No injuriesClosedBellanca 7ECA · Boone, IANTSB MKC80DCJ23Accident · No injuriesClosedCessna 188 · Blue Hill, NENTSB LAX80FJA22Accident · No injuriesClosedMyna Bird 1 · Lihue, HINTSB DEN80FA051Accident · 1 fatalClosedAerospatle 315B · Dell, MTNTSB CHI80FEV29Accident · No injuriesClosedStinson 108-3 · Chester, ILNTSB ANC80DAG87Accident · No injuriesClosedCessna 180 · Beluga, AKNTSB MIA80DLA35Accident · No injuriesClosedPiper PA-28 · Archer, FL