Demographics
ip, zip, lat+lng, city+state, or address.
Endpoint:GET /api/v1/demographics
Query
Exactly one starter. Omit all to use the caller IP.
| Name | Required | Description |
|---|---|---|
ip | One of | Public IPv4 or IPv6. Omit all parameters to use the caller. |
zip | One of | 5-digit U.S. ZIP. Tract-weighted mix. |
lat, lng | One of | Decimal degrees. ZCTA if the point is inside one, else place or county. lon accepted. |
city, state | One of | U.S. place. state is a two-letter code or full name. |
address | One of | U.S. street address. Geocoded to rooftop geography. |
Request
curl "https://speckinsights.netlify.app/api/v1/demographics?ip=8.8.8.8" \ -H "Authorization: Bearer sk_live_YOUR_KEY"
curl "https://speckinsights.netlify.app/api/v1/demographics?zip=94043" \ -H "Authorization: Bearer sk_live_YOUR_KEY"
curl "https://speckinsights.netlify.app/api/v1/demographics?lat=37.4056&lng=-122.0775" \ -H "Authorization: Bearer sk_live_YOUR_KEY"
curl "https://speckinsights.netlify.app/api/v1/demographics?city=Mountain%20View&state=CA" \ -H "Authorization: Bearer sk_live_YOUR_KEY"
curl "https://speckinsights.netlify.app/api/v1/demographics?address=680%20Folsom%20Street%2C%20San%20Francisco%2C%20CA%2094107" \ -H "Authorization: Bearer sk_live_YOUR_KEY"
Response
Non-U.S. IPs return geo. demographics is null. Missing values are null.
| Field | Returns |
|---|---|
ip | The public address that was resolved, or null. |
geo | City, region, country, ZIP/postal code, coordinates, timezone, ISP. |
demographics | ACS payload, or null. |
jobs | LODES jobs, industry, commute, or null. See jobs. |
vulnerability | CDC/ATSDR SVI (0–1) when a tract is known. |
health | CDC PLACES: diabetes, smoking, mental distress, uninsured. Tract when known; else ZCTA. |
risk | FEMA National Risk Index. Tract only. |
notes | Why a block is missing, if it is. |
resolution | input, geography (tracts, tract, zcta, place, or county), geography_id, tract, and confidence. IP and ZIP prefer a weighted tract mix. |
Fields
ACS 5-year. ACS 1-year overlay for places/counties 65,000+. PEP for county/place population when present. demographics.sources lists vintages.
| Group | Fields |
|---|---|
| Sources | acs5, optional acs1, optional pep for population.total |
| Population | Total, median age, households |
| Income | Median household, per capita, poverty rate |
| Education | Share with bachelor’s or higher |
| Housing | Units, owner occupancy, median value and rent |
| Labor | Labor force, unemployment |
| Race / ethnicity | Race categories plus Hispanic/Latino |
Enrichment
vulnerability, health, and risk are extra fields on the same GET. A miss or timeout leaves ACS in place and may add a notes line.
| Starter | Vulnerability | Health | Risk |
|---|---|---|---|
address, lat+lng | Tract SVI | Tract PLACES, ZCTA fallback | Tract NRI |
ip, zip | Only if that ZIP is a single tract | ZCTA PLACES | Only if that ZIP is a single tract |
city+state | null | null | null |
Example
{
"ip": "8.8.8.8",
"geo": {
"ip": "8.8.8.8",
"city": "Mountain View",
"region": "California",
"region_code": "CA",
"country": "United States",
"country_code": "US",
"postal_code": "94043",
"latitude": 37.4056,
"longitude": -122.0775,
"timezone": "America/Los_Angeles",
"isp": "Google LLC",
"org": "Google Public DNS"
},
"demographics": {
"zipcode": "94043",
"geography": "tracts",
"geography_id": "94043",
"name": "ZIP 94043 (4 tracts)",
"vintage": "2024",
"sources": {
"acs5": {
"vintage": "2024"
}
},
"population": {
"total": 31442,
"median_age": 35.2,
"households": 13210
},
"income": {
"median_household": 161250,
"per_capita": 89210,
"poverty_rate": 6.4
},
"education": {
"bachelors_or_higher_pct": 72.1
},
"labor": {
"labor_force": 19840,
"unemployment_rate": 3.8
},
"housing": {
"units": 14102,
"owner_occupied_pct": 42.5,
"median_home_value": 1850000,
"median_gross_rent": 2850
},
"race_ethnicity": {
"white": 48.2,
"black": 2.1,
"american_indian": 0.4,
"asian": 33.6,
"pacific_islander": 0.3,
"other": 6.8,
"two_or_more": 8.6,
"hispanic_or_latino": 18.9
}
},
"vulnerability": null,
"health": {
"geography": "zcta",
"geography_id": "94043",
"vintage": "2025",
"source": "cdc_places",
"diabetes_pct": 6.8,
"smoking_pct": 7.1,
"mental_health_pct": 13.2,
"uninsured_pct": 4.9
},
"risk": null,
"jobs": {
"zipcode": "94043",
"geography": "zcta",
"geography_id": "94043",
"name": "94043, CA",
"vintage": "2023",
"workplace": {
"jobs": 84210,
"age": {
"under_30": 22140,
"age_30_54": 49280,
"age_55_plus": 12790
},
"earnings": {
"low": 6840,
"mid": 14820,
"high": 62550
},
"industry": {
"agriculture": 40,
"mining": 10,
"utilities": 180,
"construction": 1420,
"manufacturing": 4100,
"wholesale": 1680,
"retail": 3920,
"transportation": 2110,
"information": 24680,
"finance": 1890,
"real_estate": 980,
"professional": 22140,
"management": 2640,
"administrative": 3870,
"education": 2140,
"health_care": 4680,
"arts": 720,
"accommodation_food": 4120,
"other_services": 1420,
"public_admin": 1470
},
"firm_size": {
"private_jobs": 78120,
"employees_0_19": 8420,
"employees_20_49": 7360,
"employees_50_249": 14880,
"employees_250_499": 6120,
"employees_500_plus": 41340
}
},
"residence": {
"jobs": 19840,
"age": {
"under_30": 5120,
"age_30_54": 11680,
"age_55_plus": 3040
},
"earnings": {
"low": 1680,
"mid": 4120,
"high": 14040
},
"industry": {
"agriculture": 20,
"mining": 0,
"utilities": 80,
"construction": 540,
"manufacturing": 1680,
"wholesale": 420,
"retail": 1240,
"transportation": 480,
"information": 4120,
"finance": 860,
"real_estate": 310,
"professional": 5240,
"management": 420,
"administrative": 780,
"education": 980,
"health_care": 1420,
"arts": 210,
"accommodation_food": 980,
"other_services": 360,
"public_admin": 700
},
"firm_size": null
},
"daytime_index": 4.24,
"commute": {
"into": [
{
"geography": "zcta",
"geography_id": "94040",
"name": "94040, CA",
"jobs": 4120,
"share": 4.9
},
{
"geography": "zcta",
"geography_id": "94041",
"name": "94041, CA",
"jobs": 3680,
"share": 4.4
},
{
"geography": "zcta",
"geography_id": "94087",
"name": "94087, CA",
"jobs": 2910,
"share": 3.5
}
],
"out": [
{
"geography": "zcta",
"geography_id": "94043",
"name": "94043, CA",
"jobs": 6240,
"share": 31.5
},
{
"geography": "zcta",
"geography_id": "94041",
"name": "94041, CA",
"jobs": 1880,
"share": 9.5
},
{
"geography": "zcta",
"geography_id": "94301",
"name": "94301, CA",
"jobs": 1420,
"share": 7.2
}
]
}
},
"notes": [],
"resolution": {
"input": "ip",
"geography": "tracts",
"geography_id": "94043",
"tract": null,
"confidence": "medium"
}
}Example. Values vary by starter.
Address or coordinates at tract. 680 Folsom Street, San Francisco — tract 06075061503:
{
"vulnerability": {
"geography": "tract",
"geography_id": "06075061503",
"vintage": "2022",
"source": "cdc_atsdr_svi",
"overall": 0.4602,
"themes": {
"socioeconomic": 0.3443,
"household": 0.0344,
"minority_status": 0.7318,
"housing_transport": 0.9331
}
},
"health": {
"geography": "tract",
"geography_id": "06075061503",
"vintage": "2025",
"source": "cdc_places",
"diabetes_pct": 4.6,
"smoking_pct": 6.2,
"mental_health_pct": 14,
"uninsured_pct": 4.4
},
"risk": {
"geography": "tract",
"geography_id": "06075061503",
"vintage": "2025.1.20",
"source": "fema_nri",
"risk_score": 91.6,
"risk_rating": "Relatively High"
},
"resolution": {
"input": "address",
"geography": "zcta",
"geography_id": "94107",
"tract": "06075061503",
"confidence": "high"
}
}