Licensed Amateurs by State
How Extra is Your State?
My amateur radio license was set to expire early in 2026, so I sat down to navigate the FCC’s renewal process. I don’t recall a separate payment system (CORES) needing to be tethered to an FRN a decade ago, but it’s there now, and hopefully at your next renewal you will enjoy the game of Bureaucratic Twister as much as I did. I'll spare you that particular headache for this post.
While I was clicking through the digital maze, it reminded me of the time I spent a decade ago studying to upgrade from General to Extra. I wanted the extra band privileges and the ability to help out as a VE, but it made me wonder: how many amateurs actually bother with the climb to the top of the licensing hill?
Back in 2006, the upgrade from Technician to General still required the 5 WPM Morse test. If I’d had the audacity to try for Extra at that time, I would have needed to demonstrate 20 WPM. Since I was already struggling to keep my head above water at 5 WPM, the prospect of hitting 20 felt about as realistic as me winning the lottery.
The FCC eventually dropped the Morse requirement in 2007, but I didn't give the upgrade serious thought until 2015 when I started playing with QRP rigs and CW again. The reality is that if you enjoy working CW, there are exclusive neighborhoods in the bands that you simply can’t enter without an Extra ticket—and that’s usually where the best DX is hiding.
Show me the data
That was a wordy intro, so what’s this really about? I wanted to be able to query the FCC database. There was supposedly an API at one time, but that seems to be defunct now. However, you can still download the entire FCC database as a zip file: https://data.fcc.gov/download/pub/uls/complete/l_amat.zip That download provides a collection of pipe-delimited files containing the raw data from the FCC amateur license database. Many of these are large files, containing data that is related by call sign or fccid records.
If you were so inclined, you could load those records into the database of your choice, a Jupyter Notebook, or any other tool to query it. I would guess they are too large for Excel but not having Excel I can't be sure. Fortunately, a helpful ham created a bash script that downloads and parses these files into a MySQL database. You can find the repository for that script at: https://github.com/k3ng/hamdb
I had to modify the script slightly to get it running under Windows, but otherwise, it worked as expected. The script includes some simple commands to send SQL to the database server to look up a record by call sign or return all call signs for a specific zip code. In my initial testing, I found it interesting that there are 257 licensed operators in my zip code.
However, if you want to obtain interesting insights that requires writing SQL (Structured Query Language), which is the standard for relational databases like MySQL or PostgreSQL. If you haven’t spent time as a software developer, that might seem a little daunting.
But in this bold new age of "I don't need to know nothin because I have an AI assistant"
Anyone can now generate a SQL script to return the results they are looking for.
Specifically, I wanted to know how many amateur operators held Extra Class licenses across all states. It was a bit tricky to pull the correct data because the operator class is part of a table that contains every upgrade and renewal. Since there are multiple records for many call signs, you have to build a query that returns only the most recent result from the updates (hd) table.
Example SQL Query:
SELECTe.state,-- Total count of all active licenses in the stateCOUNT(*) AS total_licenses,-- Count of Extra Class specificallySUM(CASE WHEN a.class = 'E' THEN 1 ELSE 0 END) AS extra_class_count,-- Percentage of the state's total that is Extra ClassROUND(SUM(CASE WHEN a.class = 'E' THEN 1 ELSE 0 END) * 100.0 / COUNT(*), 2) AS state_extra_percentage,-- Distribution of other classes (optional context)SUM(CASE WHEN a.class = 'G' THEN 1 ELSE 0 END) AS general_count,SUM(CASE WHEN a.class = 'T' THEN 1 ELSE 0 END) AS technician_countFROM fcc_amateur.am AS aJOIN fcc_amateur.en AS e ON a.fccid = e.fccidINNER JOIN (-- Get the single highest fccid (most recent) for every callsignSELECT MAX(fccid) AS latest_fccidFROM fcc_amateur.hdWHERE status = 'A'GROUP BY callsign) AS latest ON a.fccid = latest.latest_fccidWHERE e.state IS NOT NULL AND e.state != ''GROUP BY e.stateORDER BY extra_class_count DESC;
I joined those results with census data into a Google Sheet to provide the following:
Results
Conclusion
That table shows that Idaho has the highest percentage of Amateur Radio licenses by population but one of the lowest percentage of operators upgraded to Extra class.
The column "One out of every" I find interesting just to demonstrate how rare licensed operators are in the population. For example, in the state of North Carolina where I reside while there are 25,924 licensed operators, given the total population of the state only one out of every 42,609 persons are a licensed operator. There are more doctors in the state than licensed amateur operators.
As to my original question of how many upgraded to Extra there are only 5,705 amateurs in NC or 22% of the licensed operators. So almost a quarter of operators in NC upgraded to Extra. It ranks slightly better than other states in that regard (see map above).
Play around with the table and let me know in a comment if you find anything surprising or interesting.
Play around with the table and let me know in a comment if you find anything surprising or interesting.
That's all for now
72/73 de Richard AA4OO













