Build · give it back

A Callbook for Everybody

This is the one I'm proudest of, because it's the clearest example of the whole "give it back" idea actually working.

If you're a ham, you look up callsigns constantly. Who's this new voice on the repeater? Who owns that call I just worked? When does my license expire? The data behind all of it is public — the FCC publishes the entire license database, for free, to anyone. It's the people's data. And yet the experience of actually using it online is often slow, ad-choked, or quietly nudging you toward a paid tier.

That bugged me enough to do something about it. The result is two free, no-ads sites: HamCore, a clean world callbook, and CarrierCore, the deeper cut that spans every radio service with real frequency and location data. Behind them sits a mirror of the full FCC database — roughly 79 million rows in PostgreSQL — that I keep synced daily.

"Just load the FCC data" is a trap

The naive version took an afternoon. The correct version took a lot longer, because the raw FCC files are a swamp, and I found out the hard way — by trying to look myself up and coming back empty.

Search for "Phillis" and it returned a handful of commercial operators, but not KD8MST. Not me. The ham with the callsign, the license, the data all sitting right there in the database. Turns out the field I was searching, the "licensee name," is blank for individuals — for a person, your name lives in a completely separate table you have to reach through a chain of ID numbers. My search had never been wired to follow that chain, so it was silently missing the vast majority of hams. Fixing it took coverage from about a fifth of licensees to nearly all of them.

That was just the first gremlin. A few of my favorites:

The renewal that hides everything. When the FCC renews a license, it issues a brand-new file number — but the technical records (frequencies, locations, antennas) stay keyed to the original callsign. Every one of my lookups joined on file number, which meant that for roughly a third of public-safety licenses, the detail page showed nothing licensed and nowhere in use. I checked a county fire frequency that should have had a dozen coordinated users and got zero. One query rewrite — join on callsign, not file number — and the missing third snapped into view.

The date nobody noticed was stale. My daily sync reported "success" every night for a week while grant dates sat a week out of date. The bug: the update statement simply forgot to include the grant-date column. Everything else refreshed; that one field quietly didn't.

My own GMRS call was invisible. Callsigns ending in 9 — like my GMRS license, WRUK599 — returned nothing. A subtle text-sorting quirk in the database index made the "starts with" search skip right past anything ending in a 9. I only found it because, again, I went looking for myself and wasn't there.

And a satisfying one to close on: after tuning the database and rewriting the searches to lean on proper indexes, a lookup that used to take three-and-a-half seconds dropped to about six milliseconds. Same data, same box — just stopped asking the computer to do the dumb thing.

Why give it away

Because the data was always yours. The FCC doesn't charge for it; I just tried to build the front door it deserved. No accounts required, no "upgrade to see this," and there's a free public API so other people can build on it too. If it saves you thirty seconds on a callsign, or helps you find the new ham down the street, that's the entire point.

There's a line in the project's own README that still sums it up best: built by one ham who got tired of the FCC website. That's rent paid, on a hobby I got for free.

73 — KD8MST