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 FTW74AF030Accident · Minor injuriesClosedBell 206B · Intracstl Cty, LANTSB MIA74FKG42Accident · No injuriesClosedCessna 150 · Atlanta, GANTSB FTW74FRG33Accident · No injuriesClosedCessna A188 · Port Isabel, TXNTSB ANC74DAG74Accident · No injuriesClosedPiper PA-20 · Alex Lk Ldge, AKNTSB DEN74DTE29Accident · No injuriesClosedStinson 108-3 · Kiowa, CONTSB MIA74DLD40Accident · No injuriesClosedBeech C35 · Orange Lake, FLNTSB ANC74DAG78Accident · No injuriesClosedCessna 170B · Skwentna, AKNTSB NYC74DNC29Accident · No injuriesClosedCessna 140 · Gilmanton, NHNTSB NYC74DNA26Accident · Minor injuriesClosedPiper PA-22 · Stow, MANTSB ANC74DAG72Accident · No injuriesClosedPiper PA-11 · Alexndr Lake, AKNTSB LAX74AL030Accident · 2 fatalClosedCessna 401A · Laverne, CANTSB CHI74DEI11Accident · No injuriesClosedPiper PA-22 · Norwalk, OHNTSB LAX74FUG23Accident · Serious injuriesClosedCessna 140 · Simi Valley, CANTSB SEA74DTI12Accident · No injuriesClosedPiper PA-22 · Martinsdale, MTNTSB OAK74DVD16Accident · No injuriesClosedPiper PA-32 · Novato, CANTSB FTW74FRD17Accident · No injuriesClosedGrumman G-164 · Eunice, LANTSB NYC74FFJ16Accident · No injuriesClosedLuscombe 8A · Leroy, NYNTSB IAD74DKM23Accident · No injuriesClosedCessna 150 · High Point, NCNTSB IAD74DLJ20Accident · No injuriesClosedMooney M20D · Portsmouth, NCNTSB NYC74FHA14Accident · No injuriesClosedErco 415-D · Tunkhannock, PANTSB LAX74FUJ30Accident · No injuriesClosedEea Biplane P-1 · Yuma, AZNTSB SEA74DYE21Accident · Minor injuriesClosedPiper PA-28 · Bellevue, WANTSB ANC74DAG68Accident · No injuriesClosedCessna U206 · Akiak, AKNTSB MIA74AM031Accident · No injuriesClosedGrumman G-21A · Christiansted, PRNTSB MKC74FTG07Accident · No injuriesClosedPiper PA-28 · Fargo, NDNTSB MIA74AM030Accident · 1 fatalClosedLuscombe 8A · Natchez, MSNTSB ANC74DAG64Accident · No injuriesClosedPiper PA-14 · Anchorage, AKNTSB MKC74DTG09Accident · No injuriesClosedCessna 150H · Angus, MNNTSB CHI74FEV22Accident · No injuriesClosedMitsubishi MU-2 · Springfield, ILNTSB IAD74DLT07Accident · No injuriesClosedCessna A188B · Collierville, TNNTSB DEN74DQD07Accident · No injuriesClosedBeech B55 · Silver City, NMNTSB NYC74FFJ13Accident · No injuriesClosedCessna 180 · Franklinville, NYNTSB MIA74DLA17Accident · No injuriesClosedPiper PA-25 · Jay, FLNTSB DEN74AD012Accident · No injuriesClosedPiper PA-31 · Roswell, NMNTSB IAD74FLQ09Accident · No injuriesClosedCessna 337C · Murray, KYNTSB IAD74FIG10Accident · No injuriesClosedPiper J-3 · College Park, MDNTSB FTW74DPM08Accident · No injuriesClosedBoeing A75 · Coleman, OKNTSB CHI74DET10Accident · Minor injuriesClosedCessna 172 · Peru, INNTSB OAK74FVW08Accident · Minor injuriesClosedBell 47G2 · Arden, NVNTSB NYC74DGM06Accident · No injuriesClosedPiper PA-28 · Smicksburg, PANTSB SEA74DYE17Accident · No injuriesClosedHughes 269C · Eagle Lake, WANTSB IAD74FLQ08Accident · Minor injuriesClosedPiper PA-36 · Russellville, KYNTSB IAD74FIA05Accident · No injuriesClosedPiper PA-12 · Front Royal, VANTSB FTW74DPD11Accident · No injuriesClosedCessna 150L · Stephenville, TXNTSB MKC74DCJ10Accident · No injuriesClosedPiper PA-25 · Gresham, NENTSB FTW74DRD11Accident · Minor injuriesClosedBell 206B · Gulf Of Mexico (Gulf of Mexico)NTSB ANC74DAG52Accident · No injuriesClosedPiper PA-18 · Pilot Point, AKNTSB ANC74DAG44Accident · No injuriesClosedCessna 180 · Skwentna, AKNTSB FTW74FQG15Accident · Serious injuriesClosedCessna 150F · Muleshoe, TXNTSB NYC74FNA16Accident · No injuriesClosedCessna 206 · East Boston, MA