Download ZIP Code Data

Download zipcodes.csv

Data License & Attribution

This dataset is derived from two open data sources:

  1. OpenStreetMap — © OpenStreetMap contributors
    License: Open Database License (ODbL) 1.0
    Under the ODbL share-alike requirement, this derivative database is itself released under ODbL 1.0. Any adapted version you publish must also be released under ODbL.
  2. GeoNamesgeonames.org
    License: Creative Commons Attribution 4.0 (CC BY 4.0)
    City names, state names, and ZIP code metadata.
  3. US Census Bureaucensus.gov
    License: US government work, public domain. Does not affect the ODbL status of this database.
    Sources: ACS 5-year estimates (2023) · Gazetteer ZCTA file (2025).

Attribution requirement (ODbL §4.3): Any public use of this data must visibly credit "Data © OpenStreetMap contributors".

Full ODbL 1.0 license text  |  Full CC BY 4.0 license text

Column Schema

ColumnTypeDescription
zipcodestring5-digit US ZIP code (leading zeros preserved)
citystringPrimary city name
statestring2-letter state abbreviation
state_namestringFull state name
countystringCounty name (may be blank)
latfloatCentroid latitude (6 decimal places)
lngfloatCentroid longitude (6 decimal places)
bbox_northfloatBounding box north edge (blank if no OSM boundary)
bbox_southfloatBounding box south edge
bbox_eastfloatBounding box east edge
bbox_westfloatBounding box west edge
populationintegerTotal population (ACS 5-year). Blank if no matching ZCTA (~20% of ZIPs).
land_area_sqmifloatLand area in square miles (Census Gazetteer). Blank if no ZCTA.
median_household_incomeintegerMedian household income in dollars (ACS). Blank if suppressed or no ZCTA.
median_home_valueintegerMedian home value in dollars (ACS). Blank if suppressed or no ZCTA.
median_agefloatMedian age in years (ACS). Blank if suppressed or no ZCTA.
median_gross_rentintegerMedian gross rent in dollars (ACS). Blank if suppressed or no ZCTA.
housing_unitsintegerTotal housing units including vacant (ACS). Blank if no ZCTA.
householdsintegerOccupied housing units (ACS). Blank if no ZCTA.
One integer column per POI category (grocery, coffee, gas, pharmacy, bank, restaurant, fitness, pharmacy): 0 if none found in OSM near this ZIP.
brands_jsonJSONBrand-level POI counts for the long tail (e.g. {"starbucks":3}). Empty object if none.

density (people per sq mi) is derivable from population / land_area_sqmi but is not stored in the CSV.