API & MCP
The same data, without the page.
A public, read-only JSON API and a Model Context Protocol server. No key, no sign-up. Both are regenerated with every weekly build and both serve exactly what the pages show.
JSON API
The API is a set of static files under https://carrierdepth.com/api/v1/, served from the edge with Access-Control-Allow-Origin: *, so it can be called from a browser, a script or a notebook.
| Method | Path | Returns |
|---|---|---|
| GET | /api/v1/index.json | Build date, counts and links to every other endpoint. |
| GET | /api/v1/counties.json | Every published county: FIPS, name, state, path and tier totals per carrier. |
| GET | /api/v1/county/{state}/{county}.json | The full county record: totals, NR bands and every licence block. |
| GET | /api/v1/county/{state}/{county}.csv | The licence-block table as CSV. |
| GET | /api/v1/bands.json | The US band plan, NR and LTE band definitions used by the decoder. |
| GET | /api/v1/changes.json | Open FCC applications to assign or transfer licences, newest first, with the counties each may affect. |
# Who holds C-band in Wake County?
curl -s https://carrierdepth.com/api/v1/county/nc/wake.json \
| jq '.blocks[] | select(.fccBand == "C-band") | {block, holder, mhz}'
{state} is the lower-case postal abbreviation and {county} the slug shown in the page URL, so /county/nc/wake has its data at /api/v1/county/nc/wake.json.
County record
One record per county. totals and nrBands cover the five national operators; blocks lists every licence and lease on record; plan resolves the band plan to one holder per slice of frequency.
{
"schema": "carrierdepth.county/2",
"generated": "2026-10-04",
"county": { "fips": "37183", "name": "Wake County", "state": "NC", "path": "/county/nc/wake" },
"totals": [ { "id": "vz", "name": "Verizon", "low": 71.68, "mid": 70, "high": 200, "mmwave": 1850, "sub6": 341.68 } ],
"nrBands": [ { "id": "n77", "total": 340, "carriers": { "vz": 160, "att": 140, "tmo": 40 } } ],
"blocks": [ {
"i": 0, "band": "600", "fccBand": "600 MHz", "block": "A", "tier": "low", "mhz": 10,
"segments": [ { "lo": 663, "hi": 668, "dir": "UL" }, { "lo": 617, "hi": 622, "dir": "DL" } ],
"operator": "tmo", "holder": "T-Mobile", "licensee": "T-Mobile License LLC",
"kind": "license", "leaseType": null, "callSigns": ["WRCP893"],
"market": "PEA045", "marketName": "Raleigh, NC", "areaType": "PEA", "tags": [], "nr": ["n71"]
} ],
"plan": [ { "band": "600", "lo": 617, "hi": 622, "dir": "DL", "row": 0 } ]
}
operator is vz, att, tmo, dish, spacex or other. kind is license or lease. plan[].row is an index into blocks. Frequencies are MHz. The example is abbreviated.
Bulk data
Everything on the site in a handful of files, rebuilt with each weekly FCC update. No key, no sign-up, free for commercial use under CC BY 4.0.
| File | Format | Contents |
|---|---|---|
| /data/bulk/records.csv.gz | CSV, gzip | Every licence and lease record in every county: band, block, frequencies, MHz, holder, licensee, lease type, call signs and market. One row per county and record. |
| /data/bulk/licences.csv.gz | CSV, gzip | One row per licence or lease area: holder, licensee, MHz, the counties it covers wholly and partly, 2020 population inside it and MHz-POPs. |
| /data/bulk/areas/{band}.json.gz | JSON, gzip | Exact licence areas per band, including partitions inside a county and BRS/EBS service areas as GeoJSON polygons. Bands: 600, 700L, 700U, SMR800, SMR800R, CELL, AWS, PCS, PCSG, AWSH, AWS4, WCS, BRS, 345, CBRS, CBAND, MMW24, MMW28, MMW37, MMW39, MMW47. Format and limits. |
| /data/bulk/county-totals.csv | CSV | One row per county: MHz held by each of the five national operators in each layer. |
| /data/bulk/counties.geojson | GeoJSON | County boundaries with the same totals attached, ready for QGIS, ArcGIS or a web map. |
| /data/spectrum.db.gz | SQLite, gzip | The database the site is built from: every record, the county each covers, and county outlines. Manifest with date and checksum. |
| /api/v1/county/{state}/{county}.csv | CSV | The same records for a single county. |
# every record in the country, about 10 MB compressed
curl -sO https://carrierdepth.com/data/bulk/records.csv.gz && gunzip records.csv.gz
MCP server
The Model Context Protocol lets an AI assistant call tools on a remote server. carrierdepth runs a stateless, read-only MCP server over Streamable HTTP at:
https://carrierdepth.com/mcp
Add that URL as a custom connector in any MCP-capable client. There is no authentication. The server exposes five tools:
| Tool | Arguments | Does |
|---|---|---|
| find_county | query | Finds counties by name, "name, ST", FIPS code or ZIP code and says which are published. |
| get_county_spectrum | fips, detail? | Carrier totals by tier and by NR band; with detail: "blocks", every licence and lease record. |
| decode_channel | kind, value, fips? | Converts an NR-ARFCN, EARFCN or MHz value to frequency and bands, and the licensee in a county. |
| list_changes | type?, carrier?, state?, fips?, limit? | Open FCC applications to assign or transfer licences. |
| get_band_plan | band? | The US band plan: blocks, frequencies and NR band mapping. |
# Call a tool directly with JSON-RPC
curl -s https://carrierdepth.com/mcp -H 'content-type: application/json' -d '{
"jsonrpc": "2.0", "id": 1, "method": "tools/call",
"params": { "name": "decode_channel",
"arguments": { "kind": "nrarfcn", "value": 648672, "fips": "37183" } }
}'
Every county result carries the date of the FCC data it was built from and a notice that a licence is not proof of deployment. Application results say how each was tied to licences, because the FCC's public file often does not list call signs.
Terms of use
- Free and open. The compiled data is offered under CC BY 4.0. Credit "carrierdepth.com" with a link. The underlying FCC records are in the public domain.
- Be reasonable. Files change once a week. Cache them; do not poll.
- No warranty. This is a reference, not a legal record. For anything that matters, confirm against the FCC's Universal Licensing System.
- Stable paths.
/api/v1/will not change shape. Breaking changes get a new version.