API Documentation
Broadband Map's API lets you look up internet providers and cell signal strength at any US location specified by latitude and longitude coordinates.
Data is available at the level of cells in the H3 hexagonal grid system. Accordingly, results at nearby coordinates within the same cell will be identical.1
An API key is required. Plans (including a free demo tier) are on the API page.
Authentication
Pass your API key in the Authorization header:
curl -H "Authorization: Bearer YOUR_API_KEY" \
"https://broadbandmap.com/api/v1/location/internet?lat=40.758&lng=-73.985"
An X-Api-Key: YOUR_API_KEY header works too. Keys are accepted in headers only.
Requests without a valid key return 401.
Internet Providers at a Location
GET /api/v1/location/internet?lat={lat}&lng={lng}
Returns internet providers available at the given coordinates.
Parameters
| Name | Required | Description |
|---|---|---|
lat | Yes | Latitude, -90 to 90 |
lng | Yes | Longitude, -180 to 180 |
service_type | No | residential (default) or business |
Example Request
curl "https://broadbandmap.com/api/v1/location/internet?lat=40.758&lng=-73.985"
Example Response
{
"lat": 40.758,
"lng": -73.985,
"h3_hex": "882a100d67fffff",
"h3_resolution": 8,
"service_type": "residential",
"count": 3,
"providers": [
{
"name": "Verizon",
"technology": "Fiber",
"max_download_mbps": 2300,
"max_upload_mbps": 2300
},
{
"name": "Spectrum",
"technology": "Cable",
"max_download_mbps": 1000,
"max_upload_mbps": 1000
},
{
"name": "T-Mobile",
"technology": "Fixed Wireless",
"max_download_mbps": 100,
"max_upload_mbps": 20
}
]
}
Technology Values
The technology field takes one of: Fiber, Cable, DSL, Fixed Wireless, GSO Satellite, LEO Satellite, Other. New technology values and response fields may be added over time.
Speed Values
Speed values are usually the maximum advertised speeds ISPs report to the FCC. However, there's a quirk in the FCC reporting rules. Services below 25/3 Mbps aren't reported with their real speeds. They're bucketed into two tiers, so these speed combinations resemble codes rather than actual speeds:
| Reported speeds | Meaning |
|---|---|
0 down / 0 up | Service exists, but it's slower than 10 Mbps down or 1 Mbps up |
10 down / 1 up | At least 10/1 Mbps but short of 25/3 Mbps Speed may be higher in one direction (e.g. a 50/2 Mbps service reports as 10/1) |
A provider with "max_download_mbps": 0 offers real, slow service. Due to the FCC's reporting rules, it's left ambiguous how slow these services are.
Cell Signal Strength at a Location
GET /api/v1/location/cell?lat={lat}&lng={lng}
Returns cell coverage data for networks at the given coordinates. Signal strength is returned in the form of both an expected dBm and a word-based, human-readable signal level. The technology field takes one of 4G LTE, 5G NR, or 3G.
Parameters
| Name | Required | Description |
|---|---|---|
lat | Yes | Latitude, -90 to 90 |
lng | Yes | Longitude, -180 to 180 |
network | No | Filter to one network. Options: att, verizon, t-mobile, gci, cellcom, c-spire |
tech | No | Filter by generation: 4g, 5g |
Example Request
curl "https://broadbandmap.com/api/v1/location/cell?lat=40.758&lng=-73.985"
Example Response
{
"lat": 40.758,
"lng": -73.985,
"h3_hex": "892a100d67bffff",
"h3_resolution": 9,
"count": 6,
"coverage": [
{
"network": "AT&T",
"network_slug": "att",
"technology": "4G LTE",
"rsrp_dbm": -102.5,
"signal_level": "Fair"
},
{
"network": "AT&T",
"network_slug": "att",
"technology": "5G NR",
"rsrp_dbm": -102.5,
"signal_level": "Fair"
},
{
"network": "T-Mobile",
"network_slug": "t-mobile",
"technology": "4G LTE",
"rsrp_dbm": -91.8,
"signal_level": "Good"
},
{
"network": "T-Mobile",
"network_slug": "t-mobile",
"technology": "5G NR",
"rsrp_dbm": -88.8,
"signal_level": "Strong"
},
{
"network": "Verizon",
"network_slug": "verizon",
"technology": "4G LTE",
"rsrp_dbm": -106.1,
"signal_level": "Fair"
},
{
"network": "Verizon",
"network_slug": "verizon",
"technology": "5G NR",
"rsrp_dbm": -106.1,
"signal_level": "Fair"
}
]
}
Usage at a Glance
GET /api/v1/usage
Returns the plan type associated with a key and that key's current usage. Calls to this endpoint don't count towards usage quotas.
Example Response
{
"plan": "starter",
"key_status": "active",
"customer_status": "active",
"month_start": "2026-06-01",
"monthly_limit": 1000,
"monthly_used": 132,
"monthly_remaining": 868
}
Quotas & Errors
Only successful (2xx) responses count towards API plans' usage quotas. Errors and rate-limited responses are free. Quotas reset on the first of each calendar month (UTC). When a quota is exhausted, requests return 429 until usage allowances reset. Free demo keys also have a daily cap, with the same 429 behavior.
On the standard API plans, there are no overage charges. Rather than getting a surprise bill, users that exhaust quotas hit a hard stop unless they upgrade plans. Usage alert emails go out at 80% and 100% of monthly quotas.
By default, keys have a burst limit of 10 requests per second. This limit may be relaxed on request. Requests beyond the burst limit don't count towards quotas and return 429 with a burst_limit_exceeded code. If you encounter this code, the Retry-After header tells you how long to wait.
Rate Limit Headers
Responses to keyed requests include your monthly quota state:
X-RateLimit-Limit: 1000
X-RateLimit-Remaining: 868
Error Codes
Each error response includes a human-readable error message and a stable machine-readable code. Codes are intended to be stable, message wording is more prone to changes.
{
"error": "Monthly API request limit exceeded. Upgrade your plan for a higher limit: https://broadbandmap.com/api/",
"code": "monthly_quota_exceeded"
}
| Code | HTTP status | Meaning |
|---|---|---|
missing_key | 401 | No API key in the request headers |
invalid_key | 401 | Key isn't recognized |
key_inactive | 403 | Key was revoked or the subscription isn't active |
invalid_params | 400 | Bad or missing query parameters |
monthly_quota_exceeded | 429 | Monthly plan quota used up |
daily_quota_exceeded | 429 | Daily cap reached (demo keys) |
daily_ip_quota_exceeded | 429 | Per-IP daily cap reached (shared keys) |
burst_limit_exceeded | 429 | Over 10 requests/second — slow down and retry |
rate_limited | 429 | Anonymous rate limit (shouldn't appear on keyed requests) |
method_not_allowed | 405 | Only GET is supported |
server_error | 500 | Something broke on this end |
OpenAPI Spec
A machine-readable OpenAPI 3.1 specification is available for download: v1.yaml
Data
The FCC's Broadband Data Collection (BDC) program provides the foundation for Broadband Map's cell coverage and internet availability data. However, Broadband Map's API doesn't serve the raw BDC data. The approach to processing and transformation varies by dataset.
- Internet availability data is cleaned, corrected, restructured, and lightly supplemented. ISPs report their service areas to the FCC roughly every six months.
- Cell coverage is more heavily transformed. The FCC publishes network-reported signal strength predictions based on radio-frequency modeling, and these tend to be overly optimistic. Broadband Map uses crowdsourced real-world measurements to get a general sense of how well each network's modeled coverage corresponds to on-the-ground coverage.
Detailed logs of known limitations are available for internet availability and cell coverage.
While BroadbandMap.com uses FCC data, it is not endorsed by the FCC or a product of the FCC.
Changelog
June 2026
- Introduced API key requirement. Both free demo keys and paid keys are available from the API page.
- Added
GET /api/v1/usagefor checking quota state. - Added
X-RateLimit-Limit/X-RateLimit-Remainingheaders and stable errorcodevalues. - Added a burst limit of 10 requests per second per key (
burst_limit_exceeded). - Removed
technology_codeandprovider_idfrom responses. With the post-Alpha API, thetechnologystring is the supported tech identifier.
February 2026
- Alpha release with internet and cell lookup endpoints.
1. H3 cells vary somewhat in size by latitude. Internet availability uses resolution-8 cells, which average about 0.74 km² (0.29 mi²); cell coverage uses resolution-9 cells, which average about 0.11 km² (0.04 mi²).
For internet availability, a provider is listed if it's expected to serve at least one address within the cell, and speed values are the highest reported within it. Accordingly, a provider listed in a given cell may not serve every address in the cell, and speeds at some addresses may fall short of the reported max speed for that cell. ↩