Where an Aircraft Is Registered Is Not Where It Flies: FAA Addresses Explained

On this page

Problem statement

The address in the FAA registry is where the owner receives mail, not where the aircraft is kept or flown. For a private owner that is usually home, near the airfield. For a company it can be anywhere, and a large share of US aircraft are owned through LLCs and corporations set up in states chosen for their law and taxes, or held by trust companies for owners who cannot register an aircraft themselves. The result is that some places hold thousands of aircraft on paper. This page measures how much that distorts state and ZIP-code figures in the 16 October 2026 registry, and what to count instead.

Quick answer

Count valid US registrations by state and divide by 2025 population:

us = reg[(reg.COUNTRY == "US") & (reg["STATUS CODE"] == "V")].copy()
us["owner"] = us["TYPE REGISTRANT"].map(REGISTRANT)
spop = pop.groupby("STATE").POPESTIMATE2025.sum().rename(index={v: k for k, v in STATEFP.items()})
s = pd.DataFrame({"aircraft": us.STATE.value_counts(), "residents": spop}).dropna()
s["per_1000"] = s.aircraft / s.residents * 1000
print(s.nlargest(5, "per_1000").round(2).to_string())
       aircraft  residents  per_1000
STATE                               
AK         9022   737270.0     12.24
DE        10835  1059952.0     10.22
WY         3170   588753.0      5.38
MT         5943  1144694.0      5.19
ND         2462   799358.0      3.08

Alaska has the most aircraft per resident, 12.24 per 1,000, as expected of a state where flying is everyday transport. Delaware, the second-smallest state by area, is second with 10.22, ahead of Wyoming and Montana.

Paired bars for the ten states with the most aircraft per 1,000 residents, all owners against individuals: Alaska high on both, Delaware second on all owners but near zero for individuals. Paired bars for the ten states with the most aircraft per 1,000 residents, all owners against individuals: Alaska high on both, Delaware second on all owners but near zero for individuals.
Aircraft per resident by state, all owners against individuals.

Who registers where

1. Owner types by state

mix = pd.crosstab(us.STATE, us.owner, normalize="index")
print(mix.loc[["DE", "MT", "AK", "TX", "CA"], ["individual", "LLC", "corporation"]].round(3).to_string())
print(f"US: {(us.owner == 'LLC').mean():.1%} LLC, {(us.owner == 'individual').mean():.1%} individual")
owner  individual    LLC  corporation
STATE                                
DE          0.034  0.565        0.370
MT          0.295  0.506        0.107
AK          0.551  0.175        0.091
TX          0.456  0.248        0.203
CA          0.403  0.162        0.280
US: 28.3% LLC, 40.7% individual

56.5% of Delaware's aircraft are owned by LLCs and 37.0% by corporations; only 3.4% by individuals. Montana is half LLC as well. In Alaska 55.1% belong to individuals. Nationally 28.3% are LLC-owned and 40.7% individually owned.

2. The ZIP codes behind it

top = us["ZIP CODE"].value_counts().head(8)
t = pd.DataFrame({"aircraft": top, "city": us.groupby("ZIP CODE").CITY.agg(lambda s: s.mode()[0]).loc[top.index],
                  "state": us.groupby("ZIP CODE").STATE.first().loc[top.index],
                  "individual": us[us.owner == "individual"]["ZIP CODE"].value_counts().reindex(top.index).fillna(0).astype(int)})
print(t.to_string())
          aircraft             city state  individual
ZIP CODE                                             
94080         3032       S SAN FRAN    CA           7
19808         1934       WILMINGTON    DE          44
84111         1924   SALT LAKE CITY    UT           2
19801         1675       WILMINGTON    DE           8
84054         1661  NORTH SALT LAKE    UT           5
19810         1574       WILMINGTON    DE           6
60606         1249          CHICAGO    IL           3
59901         1171        KALISPELL    MT          68

The ZIP codes with the most aircraft are company addresses: South San Francisco 94080 with 3,032, three Wilmington, Delaware codes with 1,574 to 1,934 each, Salt Lake City 84111 and North Salt Lake 84054, Chicago 60606 and Kalispell, Montana. Each has only a handful of individual owners.

Stacked bars of owner type shares for Delaware, Montana, Texas, California and Alaska: Delaware 57% LLC and 37% corporation, Alaska 55% individual. Stacked bars of owner type shares for Delaware, Montana, Texas, California and Alaska: Delaware 57% LLC and 37% corporation, Alaska 55% individual.
Who owns the aircraft registered in each state.

3. What the address does to a ranking

ind = us[us.owner == "individual"].STATE.value_counts()
s["individual_per_1000"] = ind.reindex(s.index) / s.residents * 1000
r = s.rank(ascending=False)
print(pd.DataFrame({"rank, all owners": r.per_1000, "rank, individuals": r.individual_per_1000}).loc[["DE", "MT", "AK", "ID", "WY"]].astype(int).to_string())
       rank, all owners  rank, individuals
STATE                                     
DE                    2                 25
MT                    4                  2
AK                    1                  1
ID                    8                  6
WY                    3                  4

Counting individually owned aircraft, Delaware drops from 2nd to 25th, while Alaska stays 1st and Montana moves up to 2nd, its LLC aircraft aside. Wyoming and Idaho barely move.

Jets, and what to map instead

The data used on this page

The FAA's Releasable Aircraft Database, public domain, downloaded on 16 October 2026 and saved on this site, because the FAA replaces it every day. The saved copy leaves out the owners' names and street addresses and keeps five-digit ZIP codes; every other column is as published. With it come the Census Bureau's Vintage 2025 county population estimates, 2024 county boundaries and 2024 ZCTA gazetteer.

from pathlib import Path
import zipfile

import geopandas as gpd
import numpy as np
import pandas as pd
import requests

Path("data").mkdir(exist_ok=True)
# FAA Releasable Aircraft Database, 16 October 2026: MASTER.txt without the NAME, STREET, STREET2 and OTHER NAMES
# columns and with five-digit ZIP codes (MASTER-no-names.txt), ACFTREF.txt and ENGINE.txt as published; Census
# Vintage 2025 county estimates, 2024 cartographic boundary counties and 2024 ZCTA gazetteer. Saved here unchanged
# otherwise, because the FAA replaces the file daily.
# Live: https://registry.faa.gov/database/ReleasableAircraft.zip (needs a browser User-Agent),
# https://www2.census.gov/geo/docs/maps-data/data/gazetteer/2024_Gazetteer/2024_Gaz_zcta_national.zip
ARCHIVE = "faa-aircraft-registry-2026-10-16.zip"
if not Path(f"data/{ARCHIVE}").exists():
    Path(f"data/{ARCHIVE}").write_bytes(requests.get(f"https://data.spatialworkflow.io/{ARCHIVE}", timeout=600).content)
Z = zipfile.ZipFile(f"data/{ARCHIVE}")


def faa(name):
    """One registry file: comma-separated, every field padded with spaces, a byte-order mark and a trailing comma."""
    d = pd.read_csv(Z.open(name), dtype=str, encoding="utf-8-sig", keep_default_na=False)
    d.columns = d.columns.str.strip()
    d = d.loc[:, [c for c in d.columns if c and not c.startswith("Unnamed")]]
    return d.apply(lambda c: c.str.strip())


reg = faa("MASTER-no-names.txt")
ref = faa("ACFTREF.txt")
TYPE_AIRCRAFT = {"1": "glider", "2": "balloon", "3": "blimp", "4": "fixed wing single engine", "5": "fixed wing multi engine",
                 "6": "rotorcraft", "7": "weight-shift", "8": "powered parachute", "9": "gyroplane", "H": "hybrid lift", "O": "other"}
REGISTRANT = {"1": "individual", "2": "partnership", "3": "corporation", "4": "co-owned", "5": "government", "7": "LLC",
              "8": "non-citizen corporation", "9": "non-citizen co-owned", "": "blank"}
Path("data/cb_2024_us_county_20m.zip").write_bytes(Z.read("cb_2024_us_county_20m.zip"))
counties = gpd.read_file("data/cb_2024_us_county_20m.zip")
STATEFP = counties.drop_duplicates("STUSPS").set_index("STUSPS").STATEFP
pop = pd.read_csv(Z.open("co-est2025-alldata.csv"), encoding="latin-1", dtype={"STATE": str, "COUNTY": str})
pop = pop[pop.SUMLEV == 50].assign(GEOID=lambda p: p.STATE + p.COUNTY)
print(f"FAA registry, 16 October 2026: {len(reg):,} aircraft, {len(ref):,} make-and-model codes")
FAA registry, 16 October 2026: 317,604 aircraft, 94,115 make-and-model codes

Example 1: bigger aircraft lean on companies

for label, codes in [("turbojet and turbofan", ["4", "5"]), ("piston", ["1"])]:
    k = us[us["TYPE ENGINE"].isin(codes)]
    print(f"{label}: {len(k):,} aircraft; registered in DE {(k.STATE == 'DE').mean():.1%}; owned by individuals {(k.owner == 'individual').mean():.1%}")
turbojet and turbofan: 27,365 aircraft; registered in DE 8.0%; owned by individuals 1.6%
piston: 204,171 aircraft; registered in DE 3.3%; owned by individuals 49.6%

Jets lean on companies even more: of 27,365 turbojet and turbofan aircraft, 1.6% are owned by individuals and 8.0% have a Delaware address, against 49.6% and 3.3% of the 204,171 piston aircraft.

Example 2: map all owners against individuals

states = counties[~counties.STUSPS.isin(["AK", "HI", "PR"])].dissolve("STUSPS").to_crs(5070).join(s)
import matplotlib.pyplot as plt

print(states[["per_1000", "individual_per_1000"]].describe().loc[["min", "50%", "max"]].round(2).to_string())
fig, axes = plt.subplots(1, 2, figsize=(14, 5))
for ax, col in zip(axes, ["per_1000", "individual_per_1000"]):
    states.plot(column=col, cmap="Blues", ax=ax, legend=True)
    ax.set_axis_off()
     per_1000  individual_per_1000
min      0.31                 0.10
50%      0.91                 0.35
max     10.22                 1.53
Two maps of lower-48 states shaded by aircraft per 1,000 residents, counting all owners on the left, with Delaware darkest, and individuals only on the right, with Delaware pale and the Mountain West and northern Plains darkest. Two maps of lower-48 states shaded by aircraft per 1,000 residents, counting all owners on the left, with Delaware darkest, and individuals only on the right, with Delaware pale and the Mountain West and northern Plains darkest.
Counting all owners puts Delaware on top; counting individuals does not.

Across the lower 48, aircraft per 1,000 residents ranges from 0.31 to 10.22 with all owners, and from 0.10 to 1.53 counting individuals. Mapping individuals is the closer picture of where aircraft are based, though it leaves out every company fleet, from flight schools to air ambulances.