Neighbourhood demographics, with the error bars.
American Community Survey 5-year estimates for every ZIP Code Tabulation Area and county, the public schools nearby, and a comparison endpoint that tells you when a difference is statistically significant.
curl -s "https://api.olympus.new-odyssey.com/v1/geo-demographics/locations/02139" \
-H "X-API-Key: $OLYMPUS_API_KEY"{
"data": {
"geography": {
"type": "zcta",
"id": "02139",
"name": "ZCTA5 02139",
"input_code": "02139",
"matched_by": "exact_zcta_code",
"land_area_sqmi": 1.552,
"primary_county_fips": "25017",
"primary_state_code": "MA"
},
"vintage": { "survey": "ACS 5-year", "period": "2020-2024", "year": 2024 },
"summary": {
"median_household_income": {
"key": "median_household_income",
"unit": "usd",
"value": 134586,
"moe": 8697,
"qualifier": null,
"null_reason": null,
"universe": "Households",
"source": { "table_id": "B19013", "variables": ["B19013_001E"], "moe_variable": "B19013_001M", "derived": false }
}
},
"provenance": {
"dataset_id": "atlas.zcta_demographics",
"source_id": "census.acs5",
"source_version": "acs5-2024:zcta",
"source_date": "2025-09-02",
"validation_status": "passed",
"record_id": "zcta:02139"
}
},
"meta": {
"coverage": { "geography_type": "zcta", "scope": "ACS 5-year ZCTAs in the 50 states, DC and Puerto Rico" },
"notices": [
{ "code": "ZCTA_NOT_USPS_ZIP", "message": "ZCTAs approximate USPS ZIP code areas; they are not ZIP codes." }
]
}
}Twelve metrics, each with its source.
Population, median age, households, median household income, median home value, median gross rent, owner- and renter-occupied share, high school and bachelor's attainment, poverty rate and unemployment rate.
Every metric includes its ACS table and variables, its vintage (e.g. 2020-2024), the published 90% margin of error, and a null_reason when the Census Bureau suppressed the value. Medians in an open-ended interval are returned with a qualifier (for example “250,000 or more”) and are not rounded to a single number.
| Endpoint | What it returns |
|---|---|
| GET/v1/geo-demographics/locations/{zcta} | ZCTA profile |
| GET/v1/geo-demographics/locations/{zcta}/demographics | ZCTA demographics |
| GET/v1/geo-demographics/locations/{zcta}/schools | Public schools near a ZCTA |
| POST/v1/geo-demographics/locations/compare | Compare two ZCTAs |
| GET/v1/geo-demographics/counties/{fips} | County profile |
| GET/v1/geo-demographics/coverage | Datasets, vintages and coverage |
Is the difference real?
POST /v1/geo-demographics/locations/compare returns both values, their difference and significant_at_90, calculated with the Census Bureau's method. It returns null when a margin of error isn't published. Both locations always come from the same release.
curl -s -X POST "https://api.olympus.new-odyssey.com/v1/geo-demographics/locations/compare" \
-H "X-API-Key: $OLYMPUS_API_KEY" \
-H "Content-Type: application/json" \
-d '{"locations":["02139","60614"],"metrics":["median_household_income","median_gross_rent"]}'Limits
ZCTAs are not ZIP codes
A ZCTA is a Census area built from census blocks. Many USPS ZIP codes (PO box, single building, military) have no ZCTA. We match codes exactly and do not apply a ZIP-to-ZCTA crosswalk.
Estimates describe a period
ACS 5-year values describe the whole five-year period, with dollar amounts adjusted to its final year. For small areas the margins of error can be large, so check moe before you rank places.
Schools: directory only
NCES public and public charter schools open in the CCD school year. Distances are straight-line from the ZCTA internal point. No ratings, test scores, rankings or private schools.