US Geographic & Demographics API · Census · NCES

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.

request
curl -s "https://api.olympus.new-odyssey.com/v1/geo-demographics/locations/02139" \
  -H "X-API-Key: $OLYMPUS_API_KEY"
200 OK (abridged)
{
  "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." }
    ]
  }
}
What you get

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.

EndpointWhat it returns
GET/v1/geo-demographics/locations/{zcta}ZCTA profile
GET/v1/geo-demographics/locations/{zcta}/demographicsZCTA demographics
GET/v1/geo-demographics/locations/{zcta}/schoolsPublic schools near a ZCTA
POST/v1/geo-demographics/locations/compareCompare two ZCTAs
GET/v1/geo-demographics/counties/{fips}County profile
GET/v1/geo-demographics/coverageDatasets, vintages and coverage
Compare

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.

request
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"]}'
Know before you build

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.

Full Geographic & Demographics coverage and sources →