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 ANC76DAG91Accident · No injuriesClosedCessna 185 · Nondalton, AKNTSB CHI76IC045Incident · No injuriesClosedLockheed 1011 · Detroit, MINTSB MKC76DER47Accident · No injuriesClosedCessna 170B · Buffalo, MNNTSB NYC76FHJ11Accident · No injuriesClosedBeech B35 · Farmingdale, NYNTSB ANC76AA062Accident · Serious injuriesClosedCessna 185 · Homer, AKNTSB MKC76DCG45Accident · No injuriesClosedPiper PA-32 · Mount Vernon, MONTSB NYC76DNA26Accident · No injuriesClosedCessna 172 · Block Island, RINTSB NYC76AN066Accident · No injuriesClosedBeech D18S · New York, NYNTSB OAK76FVG43Accident · No injuriesClosedBell 47D-1 · Sacramento, CANTSB NYC76AN063Accident · 1 fatalClosedAero Comdr 560 · Skaneateles, NYNTSB ANC76AA061Accident · No injuriesClosedCessna 180 · Yakutat, AKNTSB LAX76DUQ23Accident · No injuriesClosedGlobe GC-1B · Burbank, CANTSB ANC76DAG77Accident · No injuriesClosedCessna 180 · Iliamna, AKNTSB FTW76FPA14Accident · No injuriesClosedCessna 310J · Addison, TXNTSB FTW76FPA13Accident · Minor injuriesClosedCessna 150 · Rice, TXNTSB CHI76FEC17Accident · No injuriesClosedPiper PA-28 · Detroit, MINTSB SEA76FTA11Accident · No injuriesClosedCessna 172B · Billings, MTNTSB MKC76AK032Accident · No injuriesClosedCessna A185F · Oak Island, MNNTSB MKC76DCD23Accident · No injuriesClosedChampion 7ECA · Mediapolis, IANTSB MKC76DER43Accident · No injuriesClosedCessna 421B · Grand Rapids, MNNTSB ANC76DAA22Accident · No injuriesClosedChampion 7ECA · Mckinley Park, AKNTSB CHI76FEA19Accident · Serious injuriesClosedCessna 170B · Lebanon, INNTSB DEN76FQA31Accident · No injuriesClosedPiper PA-24 · Albuquerque, NMNTSB FTW76FRD24Accident · No injuriesClosedNavion A · New Orleans, LANTSB OAK76AP032Accident · No injuriesClosedBeech D18S · Oakland, CANTSB OAK76DVD16Accident · Minor injuriesClosedCessna 170 · Tamales, CANTSB MIA76FKG36Accident · No injuriesClosedCessna 170B · Fayetteville, GANTSB FTW76FPD21Accident · No injuriesClosedCessna 140 · Mineral Wells, TXNTSB MIA76DKT31Accident · No injuriesClosedCessna 337 · Miami, FLNTSB FTW76FRD22Accident · No injuriesClosedGrumman G-164 · Iowa, LANTSB CHI76FEA17Accident · No injuriesClosedCessna 172 · Carthage, INNTSB MKC76DCJ18Accident · No injuriesClosedPiper PA-18 · Merriman, NENTSB OAK76FJA05Accident · Serious injuriesClosedBrantly 305 · Honolulu, HINTSB CHI76DEA15Accident · No injuriesClosedCessna 140 · Reynolds, INNTSB DCA76AZ010Accident · Serious injuriesClosedDouglas DC-10 · Jamaica, NYNTSB OAK76DVG32Accident · Minor injuriesClosedGrumman G-44 · Collinsville, CANTSB MKC76DCQ24Accident · Minor injuriesClosedCessna 182J · Garden City, KSNTSB DEN76FTE38Accident · No injuriesClosedStinson 108-1 · Peyton, CONTSB FTW76FRA16Accident · No injuriesClosedEnstrom F-28A · Houston, TXNTSB MKC76DCQ23Accident · No injuriesClosedCessna 188 · Leoti, KSNTSB FTW76DPJ15Accident · No injuriesClosedLuscombe 8A · Waukomis, OKNTSB NYC76FGT09Accident · No injuriesClosedPiper PA-28 · Hanover, PANTSB IAD76DIJ08Accident · No injuriesClosedSmith DSA1 · Abingdon, VANTSB SEA75DYG22Accident · No injuriesClosedBell 47G3B2 · Sandpoint, IDNTSB DEN76FTE36Accident · No injuriesClosedCessna 411 · Colorado Spgs, CONTSB CHI76FEV18Accident · Minor injuriesClosedLuscombe 8A · Urbana, ILNTSB NYC76DNC26Accident · No injuriesClosedPiper PA-18 · Brooklin, MENTSB SEA76DYI10Accident · No injuriesClosedCessna 320F · Riley Junction, ORNTSB ANC76DAG60Accident · Minor injuriesClosedLake LA-4 · Paxson, AKNTSB OAK76FXQ19Accident · Minor injuriesClosedCessna 150 · Reno, NV