Data freshness
| This site generated | 2026-08-01 12:59 UTC |
|---|---|
| FCC ULS amateur dump downloaded | 2026-08-01 |
| Census population estimates downloaded | 2026-08-01 · Vintage 2024 (POPESTIMATE2024) |
| Census age/sex estimates downloaded | 2026-08-01 · cc-est2024-agesex (latest YEAR code in file) |
| Growth window | Last 12 months (grant date) |
| Active licenses loaded | 824,842 |
Dates above are when this build’s pipeline downloaded or wrote each artifact (UTC file timestamps). The FCC publishes a weekly complete amateur license file; this project is intended to refresh monthly via GitHub Actions.
Maps
Continuous-scale county maps clip colors to the bulk of the distribution so extreme small-population rates do not flatten everything else. Quantile maps put ~equal numbers of counties in each color class — better for comparing ranks like 285 vs 360 licenses per 100k. Open any map, then pan/zoom (MapLibre).
State maps
-
Active licenses by state
Absolute count of active amateur licenses with a mailing address in each state.
state_license_count.html -
Licenses per 100,000 residents (state)
Density of active licenses relative to state population. Better for comparing sparsely vs densely populated states than raw counts.
state_licenses_per_100k.html -
New grants — last 12 months (state)
Active licenses whose FCC grant date falls in the last 12 months. A proxy for new licensees, not net stock change from expirations.
state_new_grants.html -
New grants per 100,000 (state)
Same 12-month grant window, scaled by population so large and small states are comparable.
state_new_grants_per_100k.html
County maps (continuous scale)
-
Active licenses by county
Absolute active-license counts by county. Large metro areas dominate.
county_license_count.html -
Licenses per 100,000 residents (county)
County density with a continuous color scale clipped to the bulk of the distribution (2nd–98th percentile) so a few extreme small-population counties do not wash out mid-range differences. Hover shows the true rate.
county_licenses_per_100k.html -
New grants — last 12 months (county)
Count of licenses with grant dates in the last 12 months, by county.
county_new_grants.html -
New grants per 100,000 (county)
Population-scaled growth proxy, continuous color scale (clipped percentiles).
county_new_grants_per_100k.html -
County median age
Census population-estimates median age of each county’s whole population (not the ages of license holders — FCC does not publish DOB).
county_median_age.html -
Share of population age 65+
Percent of county residents age 65 and older (Census estimates).
county_pct_65plus.html
County maps (quantile bins)
-
Licenses per 100,000 (county, quintiles)
Same density metric, but colored by equal-count quintiles: each class has ~20% of counties. Best for seeing rank differences in the middle of the distribution (e.g. 280 vs 360 per 100k).
county_licenses_per_100k_quantile.html -
New grants per 100,000 (county, quintiles)
12-month grants per 100k, quintile-binned for rank comparison.
county_new_grants_per_100k_quantile.html -
Population age 65+ (county, quintiles)
County % age 65+ in five equal-count classes. Useful next to ham-density quintile maps when exploring the age–hobby relationship.
county_pct_65plus_quantile.html
Age analysis
-
Scatter: density vs median age
Each point is a county. Tests whether older places have more hams per capita (ecological correlation only).
county_density_vs_median_age.html -
Scatter: density vs % age 65+
Same idea using share of population 65+ instead of median age.
county_density_vs_pct_65plus.html
Downloadable tables
Data sources
- FCC ULS — Amateur complete license dump (l_amat.zip). Weekly public dump (l_amat.zip). Active licenses only (status A). Geography is mailing address on the license.
- Census Population Estimates — co-est2024-alldata (Vintage 2024 (POPESTIMATE2024)).
- Census age/sex — cc-est2024-agesex-all (median age, population 65+).
- Boundaries — Census cartographic boundary files (GENZ2023 500k state & county).
- ZIP → county — Census 2020 ZCTA–county relationship (primary county by land area).
Methods (short)
- Keep active amateur licenses only; one row per call sign.
- Join licensee ZIP to county via ZCTA relationship file.
- Per-capita rates use Census county/state population estimates.
- “New grants” = grant_date within the configured rolling window.
- Age correlation is ecological (county vs county), not individual hams.
Project
Analysis code and pipeline live in the GitHub repository for this site.
Rebuild locally with ham all then ham site, or wait for
the monthly Actions workflow that publishes this Pages site.