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/v1

All endpoints are relative to this base URL. HTTPS is required for all requests.

Sub-50ms Responses
H3 geospatial indexing
56 FIPS Codes
Complete US coverage
Verified Data
Authoritative sources

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_here

Option 2: Query Parameter

?api_key=isp_your_api_key_here
bash
# 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:

HeaderDescription
X-RateLimit-LimitMaximum requests per minute
X-RateLimit-RemainingRemaining requests in current window
X-RateLimit-ResetUnix timestamp when the window resets
PlanRequests/MonthRate LimitAPI Keys
Free10010/min1
Starter5,00060/min2
Pro50,000300/min5
Enterprise500,0001,000/min25

Error Handling

The API uses standard HTTP status codes and returns structured JSON error responses:

json
{
  "error": "rate_limit_exceeded",
  "message": "Rate limit of 60 requests/minute exceeded. Try again in 45 seconds.",
  "retry_after": 45
}
StatusError CodeDescription
400invalid_parametersMissing or invalid request parameters
400invalid_coordinatesLat/lng out of valid range
401authentication_requiredNo API key provided
401invalid_api_keyAPI key is invalid or revoked
403subscription_inactiveSubscription is cancelled or expired
403plan_upgrade_requiredEndpoint requires a higher plan
429rate_limit_exceededToo many requests per minute
429monthly_limit_exceededMonthly request quota exhausted
500internal_errorUnexpected server error
503service_unavailableDatabase temporarily unavailable

Address Lookup

GET/broadband/lookupAll Plans

Look 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

NameTypeRequiredDescription
latfloatYesLatitude (-90 to 90)
lngfloatYesLongitude (-180 to 180)
resolutionintNoH3 resolution (7-9, default: 8)
bash
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

json
{
  "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

POST/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).

bash
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

json
{
  "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

GET/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

NameTypeDescription
state_fipsstring2-digit FIPS code (e.g., "36" for New York)
providerstringProvider name filter
bash
# 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

GET/broadband/providersAll Plans

List all unique broadband providers in the database, optionally filtered by state. Results are sorted by coverage area (number of H3 cells) in descending order.

bash
# 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

GET/speedtest/locationAll Plans

Real-world speed test results aggregated by geographic location. Returns download/upload speeds, latency, jitter, and packet loss metrics with percentile breakdowns.

Parameters
NameTypeDescription
latnumberLatitude (required)
lngnumberLongitude (required)
periodstringTime period: 7d, 30d, 90d (default: 30d)
bash
# 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

GET/performance/providerAll Plans

Network performance metrics broken down by ISP. Compare advertised vs measured speeds, latency, reliability, and speed label compliance across providers.

bash
# 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

GET/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.

bash
# 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

GET/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.

bash
# 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

GET/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.

bash
# 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

GET/towers/searchAll Plans

Cell tower and antenna infrastructure data. Search by location and radius to find nearby towers with operator, technology, frequency band, and structure type details.

bash
# 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

GET/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.

bash
# 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

GET/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.

bash
# 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

GET/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.

bash
# 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

GET/statusNo Auth Required

Check API health, database status, and data statistics. This endpoint does not require authentication.

bash
curl -X GET "https://api.ispdata.io/v1/status"
json
{
  "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.

python
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 requests

Downloads

Import the full API specification into your favorite tools. Both files include all endpoints, parameters, example requests, and response schemas.

Quick Setup

  1. Download the Postman collection above
  2. Open Postman → Import → Upload File
  3. Set the ISPDATA_API_KEY variable to your key
  4. 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.

Ready to get started?

Create a free account and get your API key in under 60 seconds.