Instant FCC Lookups with uls

POSTED: 2026-02-21

The FCC website license search website is very slow and awkward and bad and frustrating to use, so I made uls.

The Trade-Off

The FCC publishes its entire Universal Licensing System database as downloadable files, updated daily. These are not small—the GMRS dataset alone contains over 2.3 million records, and the amateur dataset has another 5 million. The files are pipe-delimited text packed into ZIP archives. They are not practical to work with by hand. You need a database, an ETL workflow to get the data into the database, and queries to obtain useful information and reports from the database.

uls provides all of those in one. It downloads these files, parses them, and stuffs everything into a local SQLite database. The initial import takes a few minutes:

❯ uls update -r gmrs
Updating gmrs database...
Importing weekly data...
Imported 2302841 records in 25.1s
✓ Applied weekly import.
✓ Applied 5 daily update(s).

After that, every lookup is instantaneous. No network round-trip, no waiting on the FCC's servers, no browser. Just a callsign and an answer:

❯ uls WRNX451
Call Sign:      WRNX451
Name:           James R Whitfield
Status:         A (Active)
Service:        ZA
Address:        742 Evergreen Ter
Location:       SPRINGFIELD, IL 627040000
FRN:            0012345678
Granted:        2021-03-15
Expires:        2031-03-15

You can also pass multiple callsigns at once. This is especially handy when you're not quite sure what you heard—was that an N or an M?—just throw both variants at it:

❯ uls WRNX451 WRMX451
No license found for: WRMX451
CALL       NAME                           STATUS CLASS LOCATION
---------- ------------------------------ ------ ----- --------------------
WRNX451    James R Whitfield              A      -     SPRINGFIELD, IL

1 result(s)

Keeping It Fresh

The FCC publishes a complete weekly snapshot every Sunday and incremental daily updates Monday through Saturday. uls understands this schedule. After the initial import, running uls update only downloads the daily deltas—small files that apply in seconds. If you set up a cron job or just run the update when you think of it, at least once a week, your local database stays within a day of the FCC's live data. If your data goes too far out of date, the tool will just prompt you to do another full weekly checkpoint download.

Who's Around Me?

Single-callsign lookups are the basic case, but you can also ask broader questions.

Who else in Springfield, Illinois has a GMRS license?

❯ uls search -r gmrs -s IL -c Springfield -a -l 10
CALL       NAME                           STATUS CLASS LOCATION
---------- ------------------------------ ------ ----- --------------------
WQHJ982    David M Archer                 A      -     Springfield, IL
WQUH965    Karen L Bennett                A      -     Springfield, IL
WQUI266    Thomas R Castillo              A      -     Springfield, IL
WRAL528    Patricia A Donnelly            A      -     Springfield, IL
WRNX851    James R Whitfield              A      -     SPRINGFIELD, IL
WRDN189    Michael J Erikson              A      -     Springfield, IL
WREQ171    Susan K Fitzgerald             A      -     SPRINGFIELD, IL
WRFG440    Robert W Gallagher             A      -     Springfield, IL
WRFG232    Linda M Hernandez              A      -     Springfield, IL
WRFK121    brian p ingram                  A      -     springfield, IL

10 result(s)

You can filter by state, city, ZIP code, name, license status, operator class (for amateur), grant date, expiration date, and more. Sort by name, callsign, state, or date. Limit results or let it run. The data is local, so even broad searches return immediately.

Amateur Too

uls supports both GMRS and amateur radio databases. The first time you look up a callsign it doesn't recognize, it downloads the relevant dataset automatically:

❯ uls W1AW
No data found for service 'HA'. Downloading...
Importing data (minimal mode for fast startup)...
✓ Imported 5021553 records from 3 files
Call Sign:      W1AW
Name:           ARRL HQ OPERATORS CLUB
Status:         A (Active)
Service:        HA
Address:        225 MAIN ST
Location:       NEWINGTON, CT 06111
FRN:            0004511143
Granted:        2020-12-08
Expires:        2031-02-26

For amateur lookups, the search gets more interesting because you can filter by operator class—Technician, General, Amateur Extra—which isn't a concept that exists in GMRS licensing.

Output Formats

The default output is a human-readable table, but uls also speaks JSON, CSV, and YAML. If you want to pipe license data into another tool or script, -f json gives you structured output:

❯ uls WRNX451 -f json
{"unique_system_identifier":4095020,"call_sign":"WRNX451",
"licensee_name":"Whitfield, James R","status":"A",
"radio_service":"ZA","grant_date":"2021-03-15",
"expired_date":"2031-03-15","frn":"0012345678",...}

There's also a built-in REST API (uls serve) if you want to run it as a local service for other applications to query against. In fact, that's exactly what powers the license lookup page on this site—it's just a web frontend talking to uls serve on the backend. Lookups return in under 90 milliseconds.

Why Not Just Use a Website?

You can. QRZ, RadioReference, and the FCC's own search all mostly work. But they all require a network connection, they all have their own UI friction, and none of them let you do the kind of bulk filtering that makes a local database powerful. "Show me every active GMRS licensee in my ZIP code" is not a question most web tools are designed to answer quickly.

There's also an offline angle. If you're operating from somewhere without reliable internet—which, if you're using radios, is not an unusual scenario—having the entire FCC database on your laptop means you still have full lookup capability.

It's also much faster than the FCC website. And if you don't want to install anything, you can use the lookup page on this site.

Getting It

uls is written in Rust and is available on GitHub. Prebuilt binaries are provided for Linux (x86_64 and aarch64), macOS, and Windows. Look under Releases on GitHub. Or cargo install uls-cli if you have a Rust toolchain.

Run uls update -r gmrs to pull down the GMRS database, uls update -r amateur for amateur, or uls update -r all for both. Then run uls --help to see what else you can do.

uls is free and open source, and I tried to break it up into logical reusable components—for example, you could take the code for parsing the public FCC data files and build it into your own application. Pull requests and issues are welcome on GitHub.