ISPData.io ISP Data API
The ISPData.io ISP Data API provides programmatic access to verified broadband provider availability data for the entire United States. Our proprietary database covers over 115 million US broadband serviceable locations across all 50 states, DC, and 5 US territories, refreshed monthly from authoritative federal and industry sources. In addition to core availability data, we provide 9 enrichment datasets including speed tests, consumer complaints, broadband funding, demographics, cell towers, and market analysis.
Base URL
https://api.ispdata.io/v1All endpoints are relative to this base URL. HTTPS is required for all requests.
Authentication
All API requests require authentication via an API key. You can pass your key in one of two ways:
Option 1: HTTP Header (Recommended)
X-API-Key: isp_your_api_key_hereOption 2: Query Parameter
?api_key=isp_your_api_key_here# Using header authentication (recommended) curl -X GET "https://api.ispdata.io/v1/broadband/lookup?lat=40.7128&lng=-74.006" \ -H "X-API-Key: isp_your_api_key_here" # Using query parameter curl -X GET "https://api.ispdata.io/v1/broadband/lookup?lat=40.7128&lng=-74.006&api_key=isp_your_api_key_here"
Security Note: Never expose your API key in client-side code or public repositories. Use environment variables and server-side proxying for production applications.
Rate Limiting
Rate limits are enforced per API key. The limits depend on your subscription plan. Rate limit information is included in response headers:
| Header | Description |
|---|---|
| X-RateLimit-Limit | Maximum requests per minute |
| X-RateLimit-Remaining | Remaining requests in current window |
| X-RateLimit-Reset | Unix timestamp when the window resets |
| Plan | Requests/Month | Rate Limit | API Keys |
|---|---|---|---|
| Free | 100 | 10/min | 1 |
| Starter | 5,000 | 60/min | 2 |
| Pro | 50,000 | 300/min | 5 |
| Enterprise | 500,000 | 1,000/min | 25 |
Error Handling
The API uses standard HTTP status codes and returns structured JSON error responses:
{
"error": "rate_limit_exceeded",
"message": "Rate limit of 60 requests/minute exceeded. Try again in 45 seconds.",
"retry_after": 45
}| Status | Error Code | Description |
|---|---|---|
| 400 | invalid_parameters | Missing or invalid request parameters |
| 400 | invalid_coordinates | Lat/lng out of valid range |
| 401 | authentication_required | No API key provided |
| 401 | invalid_api_key | API key is invalid or revoked |
| 403 | subscription_inactive | Subscription is cancelled or expired |
| 403 | plan_upgrade_required | Endpoint requires a higher plan |
| 429 | rate_limit_exceeded | Too many requests per minute |
| 429 | monthly_limit_exceeded | Monthly request quota exhausted |
| 500 | internal_error | Unexpected server error |
| 503 | service_unavailable | Database temporarily unavailable |
Address Lookup
/broadband/lookupAll PlansLook up broadband providers available at a specific geographic location. Uses H3 geospatial indexing (resolution 8, ~0.74 km² hexagons) with a 1-ring neighbor search for comprehensive coverage matching.
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
| lat | float | Yes | Latitude (-90 to 90) |
| lng | float | Yes | Longitude (-180 to 180) |
| resolution | int | No | H3 resolution (7-9, default: 8) |
curl -X GET "https://api.ispdata.io/v1/broadband/lookup?lat=40.7128&lng=-74.0060" \ -H "X-API-Key: isp_your_api_key_here"
Response
{
"status": "success",
"data": {
"query": {
"lat": 40.7128,
"lng": -74.006,
"h3_cell": "882a100d25fffff",
"h3_resolution": 8
},
"provider_count": 12,
"providers": [
{ "name": "Verizon", "coverage_cells": 7, "state_fips": "36" },
{ "name": "Spectrum", "coverage_cells": 5, "state_fips": "36" },
{ "name": "T-Mobile", "coverage_cells": 7, "state_fips": "36" },
{ "name": "Optimum", "coverage_cells": 4, "state_fips": "36" }
]
},
"meta": {
"response_time_ms": 23,
"data_source": "ISPData.io Verified Database",
"data_vintage": "2025-06-30"
}
}Bulk Lookup
/broadband/bulk-lookupStarter+Look up broadband providers for multiple locations in a single request. Maximum locations per request depends on your plan: Starter (25), Pro (50), Enterprise (100).
curl -X POST "https://api.ispdata.io/v1/broadband/bulk-lookup" \
-H "X-API-Key: isp_your_api_key_here" \
-H "Content-Type: application/json" \
-d '{
"locations": [
{ "lat": 40.7128, "lng": -74.0060, "id": "nyc-office" },
{ "lat": 34.0522, "lng": -118.2437, "id": "la-branch" },
{ "lat": 41.8781, "lng": -87.6298, "id": "chicago-hq" }
]
}'Response
{
"status": "success",
"data": {
"location_count": 3,
"results": [
{
"id": "nyc-office",
"lat": 40.7128,
"lng": -74.006,
"h3_cell": "882a100d25fffff",
"provider_count": 12,
"providers": [
{ "name": "Verizon" },
{ "name": "Spectrum" }
]
},
{
"id": "la-branch",
"lat": 34.0522,
"lng": -118.2437,
"h3_cell": "8829a1072bfffff",
"provider_count": 8,
"providers": [
{ "name": "AT&T" },
{ "name": "Spectrum" }
]
}
]
},
"meta": {
"response_time_ms": 67,
"data_source": "ISPData.io Verified Database",
"data_vintage": "2025-06-30"
}
}Coverage Analysis
/broadband/coveragePro+Get coverage statistics by state and/or provider. Returns the number of unique H3 cells covered, which can be used to estimate geographic coverage area.
Parameters
| Name | Type | Description |
|---|---|---|
| state_fips | string | 2-digit FIPS code (e.g., "36" for New York) |
| provider | string | Provider name filter |
# Get all providers in New York curl -X GET "https://api.ispdata.io/v1/broadband/coverage?state_fips=36" \ -H "X-API-Key: isp_your_api_key_here" # Get coverage for a specific provider in a state curl -X GET "https://api.ispdata.io/v1/broadband/coverage?state_fips=36&provider=Verizon" \ -H "X-API-Key: isp_your_api_key_here" # Get all states summary (no filters) curl -X GET "https://api.ispdata.io/v1/broadband/coverage" \ -H "X-API-Key: isp_your_api_key_here"
Provider List
/broadband/providersAll PlansList all unique broadband providers in the database, optionally filtered by state. Results are sorted by coverage area (number of H3 cells) in descending order.
# List all providers (top 200 by coverage) curl -X GET "https://api.ispdata.io/v1/broadband/providers" \ -H "X-API-Key: isp_your_api_key_here" # List providers in California curl -X GET "https://api.ispdata.io/v1/broadband/providers?state_fips=06" \ -H "X-API-Key: isp_your_api_key_here"
Speed Test Data
/speedtest/locationAll PlansReal-world speed test results aggregated by geographic location. Returns download/upload speeds, latency, jitter, and packet loss metrics with percentile breakdowns.
| Name | Type | Description |
|---|---|---|
| lat | number | Latitude (required) |
| lng | number | Longitude (required) |
| period | string | Time period: 7d, 30d, 90d (default: 30d) |
# Speed test data for Manhattan, NYC curl -X GET "https://api.ispdata.io/v1/speedtest/location?lat=40.7128&lng=-74.0060" \ -H "X-API-Key: isp_your_api_key_here" # Response includes: download_mbps, upload_mbps, latency_ms, jitter_ms, # packet_loss_pct, test_count, and comparison vs national/state averages
Provider Performance
/performance/providerAll PlansNetwork performance metrics broken down by ISP. Compare advertised vs measured speeds, latency, reliability, and speed label compliance across providers.
# Get performance metrics for all providers curl -X GET "https://api.ispdata.io/v1/performance/provider" \ -H "X-API-Key: isp_your_api_key_here" # Filter by provider name curl -X GET "https://api.ispdata.io/v1/performance/provider?provider=Verizon" \ -H "X-API-Key: isp_your_api_key_here" # Filter by state curl -X GET "https://api.ispdata.io/v1/performance/provider?state_fips=36" \ -H "X-API-Key: isp_your_api_key_here"
Consumer Complaints
/complaints/providerStarter+Consumer complaint data aggregated by provider. Includes complaint categories (billing, speed, outages, customer service), year-over-year trends, satisfaction scores, and resolution metrics. Requires Starter plan or higher.
# Get complaint data for all providers curl -X GET "https://api.ispdata.io/v1/complaints/provider" \ -H "X-API-Key: isp_your_api_key_here" # Filter by provider curl -X GET "https://api.ispdata.io/v1/complaints/provider?provider=Spectrum" \ -H "X-API-Key: isp_your_api_key_here" # Filter by state curl -X GET "https://api.ispdata.io/v1/complaints/provider?state_fips=36" \ -H "X-API-Key: isp_your_api_key_here"
Broadband Funding
/funding/areaStarter+Federal broadband infrastructure funding data including BEAD, RDOF, CAF-II, ACP, ReConnect, and E-Rate programs. Returns total allocations, locations targeted, deployment status, and cost-per-location metrics. Requires Starter plan or higher.
# Get all broadband funding programs curl -X GET "https://api.ispdata.io/v1/funding/area" \ -H "X-API-Key: isp_your_api_key_here" # Filter by program curl -X GET "https://api.ispdata.io/v1/funding/area?program=BEAD" \ -H "X-API-Key: isp_your_api_key_here" # Filter by state curl -X GET "https://api.ispdata.io/v1/funding/area?state_fips=36" \ -H "X-API-Key: isp_your_api_key_here"
Internet Access Demographics
/demographics/internet-accessPro+Internet adoption and digital divide metrics by geographic area. Includes household internet subscription rates by technology type, device ownership, and digital divide indicators by income, age, and geography. Requires Pro plan or higher.
# Get national internet access demographics curl -X GET "https://api.ispdata.io/v1/demographics/internet-access" \ -H "X-API-Key: isp_your_api_key_here" # Filter by state curl -X GET "https://api.ispdata.io/v1/demographics/internet-access?state_fips=36" \ -H "X-API-Key: isp_your_api_key_here" # Filter by county curl -X GET "https://api.ispdata.io/v1/demographics/internet-access?state_fips=36&county_fips=36071" \ -H "X-API-Key: isp_your_api_key_here"
Cell Tower Infrastructure
/towers/searchAll PlansCell tower and antenna infrastructure data. Search by location and radius to find nearby towers with operator, technology, frequency band, and structure type details.
# Search towers near Manhattan, NYC (5km radius) curl -X GET "https://api.ispdata.io/v1/towers/search?lat=40.7128&lng=-74.0060" \ -H "X-API-Key: isp_your_api_key_here" # Custom radius (10km) curl -X GET "https://api.ispdata.io/v1/towers/search?lat=40.7128&lng=-74.0060&radius_km=10" \ -H "X-API-Key: isp_your_api_key_here"
E-Rate Program Data
/erate/entitiesPro+E-Rate funded school and library ISP data. Returns entity details, funding amounts by category, connectivity information (bandwidth, provider, technology), and bandwidth goal compliance. Requires Pro plan or higher.
# Get E-Rate entities in New York curl -X GET "https://api.ispdata.io/v1/erate/entities?state_fips=36" \ -H "X-API-Key: isp_your_api_key_here" # Filter by entity type (school or library) curl -X GET "https://api.ispdata.io/v1/erate/entities?state_fips=36&entity_type=school" \ -H "X-API-Key: isp_your_api_key_here" # Filter by ZIP code curl -X GET "https://api.ispdata.io/v1/erate/entities?zip=10001" \ -H "X-API-Key: isp_your_api_key_here"
Market Analysis
/market/analysisPro+Broadband market competition and analysis data. Includes market overview (served/underserved/unserved), competition metrics (HHI index, provider counts), technology breakdown with growth trends, pricing data, and top providers by coverage. Requires Pro plan or higher.
# Get national market analysis curl -X GET "https://api.ispdata.io/v1/market/analysis" \ -H "X-API-Key: isp_your_api_key_here" # Filter by state curl -X GET "https://api.ispdata.io/v1/market/analysis?state_fips=36" \ -H "X-API-Key: isp_your_api_key_here" # Filter by county curl -X GET "https://api.ispdata.io/v1/market/analysis?state_fips=36&county_fips=36071" \ -H "X-API-Key: isp_your_api_key_here"
Internet Adoption & Digital Divide
/adoption/barriersPro+Internet adoption barriers and digital divide analysis. Includes non-adoption reasons, demographic gaps by income/age/education/geography, and affordability program enrollment data. Requires Pro plan or higher.
# Get national adoption and digital divide data curl -X GET "https://api.ispdata.io/v1/adoption/barriers" \ -H "X-API-Key: isp_your_api_key_here" # Filter by state curl -X GET "https://api.ispdata.io/v1/adoption/barriers?state_fips=36" \ -H "X-API-Key: isp_your_api_key_here" # Filter by demographic group curl -X GET "https://api.ispdata.io/v1/adoption/barriers?demographic=income" \ -H "X-API-Key: isp_your_api_key_here"
API Status
/statusNo Auth RequiredCheck API health, database status, and data statistics. This endpoint does not require authentication.
curl -X GET "https://api.ispdata.io/v1/status"
{
"status": "operational",
"version": "1.0.0",
"database": {
"status": "healthy",
"total_records": 11521988,
"states_covered": 56
},
"data_source": "ISPData.io Verified Database",
"data_vintage": "2025-06-30",
"documentation": "/developer/docs"
}Code Examples
Complete, copy-paste-ready examples in popular languages. Each example demonstrates single address lookup, bulk lookup, and error handling.
import requests
import os
from typing import Optional
class ISPDataClient:
"""ISPData.io API client for broadband provider lookups."""
def __init__(self, api_key: Optional[str] = None):
self.api_key = api_key or os.environ["ISPDATA_API_KEY"]
self.base_url = "https://api.ispdata.io/v1"
self.session = requests.Session()
self.session.headers.update({"X-API-Key": self.api_key})
def lookup(self, lat: float, lng: float) -> dict:
"""Look up broadband providers at a specific location."""
resp = self.session.get(
f"{self.base_url}/broadband/lookup",
params={"lat": lat, "lng": lng},
)
resp.raise_for_status()
return resp.json()
def bulk_lookup(self, locations: list[dict]) -> dict:
"""Look up providers for multiple locations at once."""
resp = self.session.post(
f"{self.base_url}/broadband/bulk-lookup",
json={"locations": locations},
)
resp.raise_for_status()
return resp.json()
def coverage(self, state_fips: str, provider: str = None) -> dict:
"""Get coverage analysis for a state or provider."""
params = {"state_fips": state_fips}
if provider:
params["provider"] = provider
resp = self.session.get(
f"{self.base_url}/broadband/coverage", params=params
)
resp.raise_for_status()
return resp.json()
def providers(self, state_fips: str = None) -> dict:
"""List all broadband providers, optionally filtered by state."""
params = {}
if state_fips:
params["state_fips"] = state_fips
resp = self.session.get(
f"{self.base_url}/broadband/providers", params=params
)
resp.raise_for_status()
return resp.json()
def status(self) -> dict:
"""Check API health and database status."""
resp = self.session.get(f"{self.base_url}/status")
resp.raise_for_status()
return resp.json()
# ─── Usage ───
client = ISPDataClient()
# Single address lookup
result = client.lookup(40.7128, -74.0060)
print(f"Found {result['data']['provider_count']} providers in NYC")
for p in result["data"]["providers"]:
print(f" • {p['name']} ({p['coverage_cells']} cells)")
# Bulk lookup (Starter plan+)
locations = [
{"lat": 40.7128, "lng": -74.0060, "id": "nyc"},
{"lat": 34.0522, "lng": -118.2437, "id": "la"},
{"lat": 41.8781, "lng": -87.6298, "id": "chicago"},
]
bulk = client.bulk_lookup(locations)
for loc in bulk["data"]["results"]:
print(f"{loc['id']}: {loc['provider_count']} providers")
# Coverage analysis (Pro plan+)
coverage = client.coverage("36") # New York
print(f"NY has {coverage['data']['provider_count']} providers")Quick Install
pip install requestsDownloads
Import the full API specification into your favorite tools. Both files include all endpoints, parameters, example requests, and response schemas.
OpenAPI 3.0 Spec
Standard OpenAPI 3.0.3 specification. Compatible with Swagger UI, Redoc, Insomnia, and any OpenAPI-compatible tool.
JSONPostman Collection
Pre-configured Postman v2.1 collection with environment variables, example requests, and saved responses.
JSONQuick Setup
- Download the Postman collection above
- Open Postman → Import → Upload File
- Set the
ISPDATA_API_KEYvariable to your key - Start making requests immediately
API Playground
Test every endpoint interactively without writing any code. Select an endpoint, configure parameters, and see live responses directly in your browser.
Open API Playground
Interactive endpoint explorer with live requests, preset locations, cURL generation, and response viewer.