Broadband Serviceability API
Which internet providers actually reach a specific U.S. street address, and at what advertised speeds. Free, no API key, no registration, CORS open. Answers come from FCC Broadband Data Collection filings, resolved to the census block containing the address.
Call it right now
Every link below is a complete, working request. Open one to see a real response.
- Dense urban, many providers https://findbetterinternet.com/wp-json/fbi/v1/serviceability?address1=350%20Fifth%20Avenue&city=New%20York&state=NY&zip=10118 Empire State Building. Returned 12 providers, fastest Verizon Fiber.
- Mid-size metro https://findbetterinternet.com/wp-json/fbi/v1/serviceability?address1=301%20West%202nd%20Street&city=Austin&state=TX&zip=78701 Austin City Hall. Cable-led market rather than fiber-led.
- Competitive fiber market https://findbetterinternet.com/wp-json/fbi/v1/serviceability?address1=1000%20Fourth%20Avenue&city=Seattle&state=WA&zip=98104 Seattle Central Library.
- Small market, regional carriers https://findbetterinternet.com/wp-json/fbi/v1/serviceability?address1=121%20North%20Rouse%20Avenue&city=Bozeman&state=MT&zip=59715 Regional fiber (Montana Opticom, Blackfoot) rather than a national brand.
- Matched address, no filings https://findbetterinternet.com/wp-json/fbi/v1/serviceability?address1=233%20South%20Wacker%20Drive&city=Chicago&state=IL&zip=60606 Willis Tower. A 200 with provider_count 0 -- the block matched, but no carrier filed residential service for it. Handle this, it is not an error.
Endpoint
GET https://findbetterinternet.com/wp-json/fbi/v1/serviceability
This is the only endpoint that returns per-address results, and it is the one described in the OpenAPI document.
A shorter path at https://findbetterinternet.com/api/serviceability is answered, but it returns
a pointer to this endpoint rather than data. The CDN in front of this site caches that path
without its query string, so any address-specific response served there would be frozen to
whichever address was requested first. The pointer is constant, so caching it is harmless.
Parameters
| Name | Required | Format | Example |
|---|---|---|---|
address1 | yes | Street address, up to 120 characters. | 350 Fifth Avenue |
city | yes | City name, up to 80 characters. | New York |
state | yes | Two-letter state code, either case. | NY |
zip | yes | Five digits. | 10118 |
Response
{
"query": {
"address1": "<string, echoed back>",
"city": "<string>",
"state": "<2-letter, lowercased>",
"zip": "<5-digit string>"
},
"matched_address": "<string, USPS-normalised, or null>",
"census_block": {
"block_geoid": "<15-digit census block GEOID>",
"coordinates": { "x": <longitude>, "y": <latitude> }
},
"providers": [
{
"provider_id": <integer, FCC provider id>,
"brand_name": "<string>",
"technology": "<Fiber | Cable | Copper | Licensed Fixed Wireless | NGSO Satellite | GSO Satellite>",
"technology_id": <integer, FCC technology code>,
"max_advertised_download_speed": <integer, Mbps>,
"max_advertised_upload_speed": <integer, Mbps>,
"low_latency": "<'1' when the carrier reports low latency, else '0'>",
"percentile_score": <float, our own ranking of this offer>
}
],
"provider_count": <integer>,
"cached": <boolean>,
"source": {
"dataset": "<string, provenance>",
"note": "<string, the advertised-speed caveat>",
"attribution": "FindBetterInternet.com",
"docs": "<url>"
}
}
providers is sorted by advertised download speed, fastest first. An address can
legitimately return provider_count: 0 with HTTP 200 — the block matched, but no
carrier filed service for it. Treat that as data, not as an error.
Errors
Errors are JSON with code, message and data.status.
| Status | Meaning |
|---|---|
400 | Missing or malformed parameters. All four are required; state must be 2 letters, zip 5 digits. |
404 | The address could not be matched to a census block -- a typo, a new build, or a PO box. This is an ordinary result, not a fault. |
429 | Rate limit exceeded (60 requests per hour per IP). |
503 | The lookup is unavailable or the upstream did not answer. Retry later. |
Rate limits and caching
60 requests per hour per IP. Responses are cached for 30 days, because the underlying FCC data is republished roughly twice a year — repeat lookups for the same address are fast and cheap. If you need bulk or commercial access, get in touch rather than working around the limit.
What the numbers mean
Speeds are provider-advertised maxima at census-block level. They are what carriers filed with the FCC, not measured throughput, and not a guarantee for any individual unit or apartment. Please represent them that way to end users — the gap between filed and delivered speed is the single most common way this dataset gets misreported.
Addresses are geocoded with the U.S. Census Bureau geocoder, then serviceability is read at the resulting block. Full detail on sources, aggregation and known limitations: our methodology.
Other machine interfaces
| Interface | URL |
|---|---|
| OpenAPI 3.1 description | https://findbetterinternet.com/openapi.json |
MCP server (streamable-http, no auth, tool check_serviceability) | https://findbetterinternet.com/wp-json/fbi/v1/mcp |
| Agent guide with national statistics | https://findbetterinternet.com/llms.txt |
| Machine-readable index of all of the above | https://findbetterinternet.com/ai-catalog.json |