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 ATL81FLT13Accident · Minor injuriesClosedMooney 20C · Coldwater, MSNTSB DEN81FTK18Accident · No injuriesClosedCessna 172 · Presho, SDNTSB FTW81FQG63Accident · No injuriesClosedCessna 182F · Hereford, TXNTSB CHI81PEE51Accident · No injuriesClosedBeech A45 · Glenview, ILNTSB FTW81DPG57Accident · No injuriesClosedPiper PA-25 · Mcgehee, ARNTSB ANC81DAG56Accident · No injuriesClosedCessna 180 · Cordova, AKNTSB NYC81FA076Accident · Minor injuriesClosedRobinson R22 · Summit Twp, PANTSB ATL81DKW21Accident · No injuriesClosedTexas Hel M-47A · Rickman, TNNTSB ANC81DAG62Accident · Minor injuriesClosedPiper PA-28 · Iliamna, AKNTSB MIA81FA102Accident · 2 fatalClosedBeech 65-B80 · Groveland, FLNTSB MIA81FA101Accident · No injuriesClosedCessna P206A · Marathon, FLNTSB DEN81FTK16Accident · No injuriesClosedGrum-Amer AA-5B · Custer, SDNTSB FTW81FRA48Accident · Serious injuriesClosedBell 206B · Houston, TXNTSB DEN81FA053Accident · 2 fatalClosedLet Blanik · Aspen, CONTSB CHI81FEM31Accident · No injuriesClosedPiper PA-32R · Harbor Springs, MINTSB MKC81DCA20Accident · No injuriesClosedGrumman G-164A · Fagus, MONTSB CHI81DEC35Accident · No injuriesClosedCessna 172 · Deford, MINTSB SEA81DYP32Accident · Minor injuriesClosedPiper PA-28 · Warren, IDNTSB ANC81DAG54Accident · No injuriesClosedPiper PA-12 · Tyonek, AKNTSB SEA81FYP28Accident · Minor injuriesClosedEnstrom F-28C · Rice, WANTSB SEA81FYP29Accident · No injuriesClosedCessna 177 · Priest River, IDNTSB LAX81FUA08Accident · No injuriesClosedPiper PA-34 · Long Beach, CANTSB MKC81DCQ46Accident · No injuriesClosedCessna 150 · Coldwater, KSNTSB NYC81FHM12Accident · No injuriesClosedCessna 172N · Ridgefield Prk, NJNTSB LAX81DUG41Accident · No injuriesClosedCessna 180 · Lake Elsinore, CANTSB CHI81DEM28Accident · No injuriesClosedAeronca 11AC · Elwell, MINTSB FTW81DRD32Accident · No injuriesClosedBeech 77 · Grand Isle, LANTSB FTW81DPG53Accident · No injuriesClosedCessna 188B · Beech Grove, ARNTSB SEA81DYK12Accident · No injuriesClosedCessna 180 · Florence, ORNTSB MKC81FCG49Accident · No injuriesClosedPiper PA-25 · Knob Noster, MONTSB LAX81FUG40Accident · No injuriesClosedCessna R172K · Yucca Valley, CANTSB LAX81FUG39Accident · No injuriesClosedCurtis WRT. B-4000 · Chino, CANTSB ATL81DKJ22Accident · No injuriesClosedHiller Acft UH-12E · Centreville, ALNTSB ATL81DLJ12Accident · No injuriesClosedCessna 188A · Bayboro, NCNTSB DEN81DTK14Accident · No injuriesClosedCessna 177 · Viborg, SDNTSB CHI81DEP29Accident · Minor injuriesClosedGrumman AA-5 · Summit Lake, WINTSB CHI81FEM25Accident · No injuriesClosedPiper PA-28 · Mecosta, MINTSB ANC81DA076Accident · No injuriesClosedDehavilland DHC-3 · South Naknek, AKNTSB CHI81FEM27Accident · Minor injuriesClosedPiper PA-22 · Alma, MINTSB FTW81DRG52Accident · No injuriesClosedPiper PA-36 · Woodward, TXNTSB NYC81FFA18Accident · Serious injuriesClosedBeech 23 · Livingston Mnr, NYNTSB ANC81DAG47Accident · No injuriesClosedPiper PA-12 · Anchorage, AKNTSB NYC81FNA17Accident · Minor injuriesClosedCessna 172 · Haverhill, MANTSB DEN81DTE49Accident · No injuriesClosedHelio H-295 · Alamosa, CONTSB LAX81FUJ75Accident · No injuriesClosedCessna 140 · Glendale, AZNTSB FTW81FQD28Accident · No injuriesClosedLuscombe 8A · El Paso, TXNTSB CHI81DEP26Accident · No injuriesClosedGrumman AA-5A · Rio, WINTSB CHI81DCA08Accident · No injuriesClosedPiper PA-25 · Belleville, ILNTSB NYC81FGM21Accident · No injuriesClosedPiper PA-28 · Breezewood, PANTSB FTW81DPJ31Accident · No injuriesClosedN Amer Avn AT-6 · Chickasha, OK