himaxym/aviation-safety-occurrences
Aviation Safety Occurrences (1902–2026) 223,623 aircraft accident and incident records, consolidated from 124 official accident-investigation authorities into one table with a shared schema. Every row links back to the investigating authority's own report through report_url. Nothing here is a summary of a summary: the point of the dataset is that the records national bodies publish in 124 different formats, with 124 different field names and 124 different search forms, become… See the full description on the dataset page: https://huggingface.co/datasets/himaxym/aviation-safety-occurrences.
Aviation Safety Occurrences (1902–2026)
223,623 aircraft accident and incident records, consolidated from 124 official accident-investigation authorities into one table with a shared schema.
Every row links back to the investigating authority's own report through report_url. Nothing here is a summary of a summary: the point of the dataset is that the records national bodies publish in 124 different formats, with 124 different field names and 124 different search forms, become one file you can GROUP BY.
Quick start
from datasets import load_dataset
ds = load_dataset("himaxym/aviation-safety-occurrences", split="train")-- duckdb, straight off the hub
SELECT year, count(*) FROM 'train-*.parquet'
WHERE severity = 'fatal' GROUP BY 1 ORDER BY 1;What is in it
Largest contributors (sources.csv has all 124 with per-source year ranges):
The long tail is the interesting part: TSB, CIAIAC, BFU, ATSB, JTSB, MAK, KNKT, TAIC, OTKES, SHK, GPIAAF, PKBWL, ANSV, KBSZ and ~100 more, most of which have never been machine-readable outside their own site.
Columns
id, occurrence_type, event_date, year, severity, is_hull_loss, country_iso, lat, lon, type_icao, type_full, aircraft_category, family, family_slug, registration, operator, airline_icao, airline_name_canonical, flight_nature, occupants, fatalities_onboard, ground_fatalities, fatalities_total, phase, category, cause_summary, report_url, primary_source, llm_enriched
Read this before you use it
Coverage is uneven by field, and a column being 100% non-null does not mean it is 100% informative. These are the numbers, not an estimate:
Three traps in particular:
1. `severity` is 100% populated and 74% of it is the literal string `unknown`. The distribution is unknown 74.4%, fatal 21.7%, hull_loss 3.5%, minor 0.2%, incident 0.1%, serious_incident 0.03%. Treating unknown as "not fatal" will silently invent a safety trend. Filter it, don't fold it.
2. 41.5% of rows carry `llm_enriched = 1`, meaning at least one field on that row was extracted from narrative prose by a language model rather than read from a structured field. This matters most for casualty counts: a large share of non-null fatalities_total values sit on llm_enriched rows. If you are computing death tolls, filter to `llm_enriched = 0` and accept the smaller sample. We publish the flag precisely so that this is your decision and not a hidden one.
3. Coordinates exist for 13.2% of rows, and the ones that exist are not uniformly distributed — they skew heavily toward recent, well-documented, Western occurrences. Any map built from this is a map of reporting practice as much as of aviation. Records that sat at exactly (0, 0) in the source — the "Null Island" artefact of failed geocoding — have been set to NULL rather than shipped as a coordinate off the coast of Ghana.
flight_nature at 2.9% is included for completeness but is too sparse for any comparative claim. family and airline_icao are likewise thin.
What is deliberately not here
- No aggregate airline or aircraft-type safety scores. Producing one requires exposure denominators (departures, flight hours) that this dataset does not contain, and naive per-airline counts double-count occurrences that several authorities each filed. We publish the records; the denominators are your problem, and they should be.
- No fatality totals presented as authoritative. See trap 2.
- No personal data. Names of crew, passengers and investigators are not carried, even where the source report contains them.
Provenance and licence
This cut contains only records published by government accident-investigation authorities and equivalent public bodies, whose outputs are public records in their respective jurisdictions. Two large commercially-curated sources present in the upstream database (the Aviation Safety Network and the Bureau of Aircraft Accidents Archives) are excluded from this release because their terms govern redistribution; if you need them, go to them directly.
The compilation — the schema, the cross-source normalisation, the deduplication and the enrichment flags — is released under CC BY 4.0. The underlying records remain the works of their issuing authorities; for reuse of an individual record, report_url takes you to the authority that published it and to whatever terms it applies.
Provenance of the compilation
Built and maintained by FlightFinder, an aviation-safety data platform. The same corpus backs the accident histories shown on aircraft, airline, airport and route pages there.
Citation
Cite the DOI, not this page. The concept DOI below always resolves to the latest version, so a citation written today survives version 1.1.
@dataset{flightfinder_aviation_safety_occurrences,
title = {Aviation Safety Occurrences (1902--2026)},
author = {Kolomiiets, Denys},
year = {2026},
publisher = {Zenodo},
doi = {10.5281/zenodo.22057962},
url = {https://doi.org/10.5281/zenodo.22057962},
note = {Compiled from 124 official accident-investigation authorities}
}To pin this exact release instead of the latest, use the version DOI 10.5281/zenodo.22057963 (v1.0.0).
Changelog
- 2026-08-21 — initial release. 223,623 rows, 124 sources, snapshot of the production database.
