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 MIA77FLD47Accident · No injuriesClosedPiper PA-30 · Brooksville, FLNTSB MKC77DCQ28Accident · No injuriesClosedCessna 140 · Kirwin, KSNTSB ANC77DAG59Accident · No injuriesClosedTaylorcraft BC12-D · Kokhanok, AKNTSB MIA77FKA06Accident · No injuriesClosedAero Comdr 100 · Lajas, PRNTSB CHI77DEM20Accident · Minor injuriesClosedPiper PA-18 · Faithorne, MINTSB FTW77FPJ13Accident · No injuriesClosedDehavilland DH 104 · Yukon, OKNTSB CHI77FEX19Accident · No injuriesClosedCessna 182 · Middletown, INNTSB CHI77FEI15Accident · No injuriesClosedCessna 150L · Chagrin Falls, OHNTSB ANC77FAA12Accident · No injuriesClosedCessna 150 · Fairbanks, AKNTSB FTW77FRA16Accident · No injuriesClosedPiper PA-28 · Tomball, TXNTSB CHI77DEP27Accident · No injuriesClosedPiper PA-28 · Waupun, WINTSB SEA77FYE12Accident · 2 fatalClosedN.American P-51D · Olympia, WANTSB MIA77DLA20Accident · No injuriesClosedPiper PA-28 · Lake City, FLNTSB CHI77FEX17Accident · Minor injuriesClosedCessna 150 · Helmsburg, INNTSB MIA77FKJ21Accident · 1 fatalClosedBellanca 8KCAB · Headland, ALNTSB FTW77DA041Accident · No injuriesClosedBell 47G2A1 · Laredo, TXNTSB MKC77DCJ15Accident · No injuriesClosedPiper PA-22 · Whitman, NENTSB MIA77FKT29Accident · No injuriesClosedPiper PA-25 · W.Boynton Bch, FLNTSB ANC77DA036Accident · No injuriesClosedAerospatial SA-318 · Coldfoot, AKNTSB IAD77DA033Accident · No injuriesClosedPiper PA-34 · Charlotte, NCNTSB MKC77DCJ12Accident · No injuriesClosedCessna 185 · Lincoln, NENTSB LAX77DUG32Accident · Minor injuriesClosedCessna 172 · Blythe, CANTSB OAK77FA023Accident · No injuriesClosedDehavilland DH-114 · Fresno, CANTSB DEN77FQA25Accident · Minor injuriesClosedPiper PA-11 · Los Lunas, NMNTSB IAD77DA026Accident · Minor injuriesClosedBell 206B · Prestonburg, KYNTSB MKC77DCQ20Accident · No injuriesClosedCessna 170B · Hugoton, KSNTSB FTW77DRA14Accident · No injuriesClosedCessna A188A · El Campo, TXNTSB MKC77DTG03Accident · No injuriesClosedCessna 150 · Wahpeton, NDNTSB FTW77DRG29Accident · No injuriesClosedCessna 180 · New Braunfels, TXNTSB CHI77FEC18Accident · No injuriesClosedMeyers 200A · Monroe, MINTSB MKC77DER21Accident · No injuriesClosedBeech A-23 · Goodland, MNNTSB CHI77FEK23Accident · No injuriesClosedLuscombe 8A · Rockbridge, OHNTSB MIA77FA032Accident · Serious injuriesClosedBell 206B · Atlanta, GANTSB NYC77FHA15Accident · No injuriesClosedSchweizer SGS233 · Erwinna, PANTSB OAK77FVM08Accident · No injuriesClosedMooney MK20C · Half Moon Bay, CANTSB SEA77FTA12Accident · No injuriesClosedCessna 140 · Hinsdale, MTNTSB NYC77DNC21Accident · No injuriesClosedCessna 414 · Carabasset, MENTSB MIA77DLG10Accident · No injuriesClosedCessna 150 · Moncks Corner, SCNTSB SEA77DYM20Accident · No injuriesClosedCessna 140A · Battle Ground, WANTSB NYC77FFJ10Accident · No injuriesClosedPiper PA-23 · Brockport, NYNTSB NYC77DNA12Accident · No injuriesClosedGrum Amer AA-1B · Tewksbury, MANTSB MIA770KT33Accident · No injuriesClosedCessna C150 · Acklins Isl, Burkina FasoNTSB OAK77FVW07Accident · Minor injuriesClosedFord 5-AT-B · Las Vegas, NVNTSB OAK77FVD14Accident · Minor injuriesClosedBeech C45H · Antioch, CANTSB ANC77DA026Accident · No injuriesClosedCessna 207 · Circle Hot Spg, AKNTSB FTW77DPA03Accident · Minor injuriesClosedDer Jager D IX · Addison, TXNTSB CHI77FEX11Accident · No injuriesClosedCessna 172M · Elwood, INNTSB CHI77FEI11Accident · No injuriesClosedCessna 401B · Vienna, OHNTSB NYC77DNC20Accident · No injuriesClosedCessna 402 · Bennington, VTNTSB LAX77DUJ28Accident · No injuriesClosedPiper PA-25 · Poston, AZ