← Back to the databaseMethod

How this was built

The source, the species problem and the main caveat about what these numbers mean.

The source

The Federal Aviation Administration (FAA) publishes its entire National Wildlife Strike Database as a downloadable file from wildlife.faa.gov. This site is built from the public Excel export at /assets/database_excel.zip, which FAA rebuilds daily. The copy used here holds 352,419 strike records dated January 2, 1990 through August 12, 2026, across 2,788 airports and 975 identified species.

When a strike leaves only fragments, the remains go to the Smithsonian Institution's Feather Identification Lab, which identifies the species from feather material, blood or DNA and returns it to FAA's database manager. The lab processes over ten thousand cases a year. That pipeline is why the species column is as specific as it is.

The main caveat

Strike reporting is voluntary. FAA says so on its own front page. This database is not a census of strikes; it is a census of reports. An airport with a high count may have a diligent reporting culture rather than more birds, and an airport with a low count may not file. Nothing here supports a ranking of which airports are dangerous, and the rise in annual counts since 1990 substantially reflects better reporting.

Telling birds from everything else

FAA records a species name but no clean animal-class field, so the "not birds" filter is derived here. Naive keyword matching gets this badly wrong: Killdeer is a plover, not a deer, and a Western cattle egret is not cattle. The classifier therefore matches mammal, reptile and amphibian words only on whole-word boundaries, and then vetoes any match if the name also contains a bird word, from a list of about 120 bird groups. That moved the non-bird total from an initial, wrong 27,821 down to 12,494.

It is a derived tag on a name string, not a taxonomic authority, and should not be used as a precise count.

What is shipped, and what is left in the source

Airports

The single largest "airport" in the raw file is ZZZZ, meaning unknown, with 47,738 strikes. It is excluded from the map and the airport list, and its records still count in every species and altitude figure. Airport coordinates come from the file itself; 2,788 airports appear, of which those with coordinates are mapped.

Altitude

Height is above ground level in feet, as reported, and is present on 174,766 of the records. Bands are 500 feet up to 10,000 and 2,500 feet above that. The extreme tail is thin and worth reading as individual reports rather than as a distribution: a handful of strikes are on record above 25,000 feet.

What this cannot tell you

Rebuilding it

build_faa.py in this repository reads a CSV conversion of FAA's Excel export and writes the files in data/. It exits non-zero on an empty read. FAA rebuilds its export daily, so re-downloading and re-running picks up new strikes.

Built with AI assistance. Figures are computed from FAA's export rather than transcribed, but check FAA's own search tool before publishing any number.

← Back to the database