Source: U.S. Census ACS 2022 · GeoNames postal data

Data & methodology

Every number on ZipLocal Guide traces back to a public, government-produced or open dataset. We don't publish proprietary "scores" or weighted indexes — we summarize cited figures and let you draw your own conclusions.

Geographic backbone

The list of ZIP codes, the city and state each ZIP belongs to, the county, and the centroid latitude/longitude come from the GeoNames postal data dump for the United States. GeoNames is a Creative Commons-licensed open data project that mirrors and consolidates official postal data. Their U.S. file currently contains around 41,500 active ZIP codes covering the 50 states, D.C., and U.S. territories. Our GeoNames-derived ZIP list does not currently include Puerto Rico ZIP codes in the 00601–00987 range (see "Exact join method" below for why that matters for the new 2023 section).

For each ZIP, we use the GeoNames-provided centroid as an approximate point location. Because ZIP codes are mail-routing constructs, not census-defined polygons, this point is an approximation, not a property boundary.

Core demographics & cost-of-living figures (2018–2022 ACS)

Population, median household income, median home value, median gross rent, median age, count of unemployed residents, and count of bachelor's-degree holders all come from the U.S. Census Bureau American Community Survey 5-Year Estimates (2018–2022), queried at the ZIP Code Tabulation Area (ZCTA) level via the Census API.

Specifically, we pull these ACS variables: B01003_001E (total population), B19013_001E (median household income), B25077_001E (median value of owner-occupied housing units), B25064_001E (median gross rent), B23025_005E (unemployed civilian labor force), B15003_022E (bachelor's degree count age 25+), and B01002_001E (median age). These seven figures are what the "Population / Median income / Median home value / Median rent" tiles, and the surrounding prose, on every ZIP page describe. They are still the 2018–2022 release; see "Why we didn't refresh the core figures yet" below.

The ACS publishes margins of error alongside its point estimates; for readability we display only the point estimate. For ZIPs with very small populations the underlying margins of error can be substantial, and small-area ACS figures should be treated as ballpark indicators rather than precise measurements.

New: race, ethnicity, poverty, commuting & housing occupancy (2019–2023 ACS)

Many ZIP profile pages now also show a race & ethnicity breakdown, a poverty-status figure, a commute-time breakdown, and a housing-occupancy breakdown. These come from the same ACS family as the core figures above, but from a newer release, pulled via the Census Bureau's keyless, no-API-key, bulk table-based Summary File (a static download, not the key-gated api.census.gov query endpoint):

www2.census.gov/programs-surveys/acs/summary_file/2023/table-based-SF/data/5YRData/ — American Community Survey 2019–2023 5-Year Estimates, table-based Summary File format.

Tables used, exactly as published by the Census Bureau (no combining figures across tables):

  • B03002 — Hispanic or Latino Origin by Race
  • B17001 — Poverty Status in the Past 12 Months by Sex by Age
  • B08303 — Travel Time to Work
  • B25002 — Occupancy Status

License / attribution: ACS Summary File data is a work of the U.S. federal government and is public domain in the United States; no license fee or registration is required for this bulk-file route. Attribution: "U.S. Census Bureau, American Community Survey 2019–2023 5-Year Estimates."

Exact join method

The Summary File's geography lookup (Geos20235YR.txt) lists a GEO_ID of the form 860Z200US + the 5-digit ZCTA code for every ZIP Code Tabulation Area (SUMLEVEL 860) — 33,774 ZCTA rows nationwide. We built an exact map of GEO_ID → 5-digit ZCTA from that file, then joined each of the four data tables above to that map on GEO_ID — an exact string match, never a name or fuzzy match. That join produced usable rows (present and non-blank in all four tables) for 33,772 ZCTAs.

We then matched those 33,772 ZCTAs to our 40,979 existing ZIP profile pages by 5-digit ZIP code. 33,640 matched an existing page and received the new section; 132 of the 33,772 ZCTAs (all in the 00601–00987 Puerto Rico range) have no corresponding ZIP page on this site at all — our GeoNames-derived ZIP list doesn't currently include that range, a pre-existing gap unrelated to this pass — so there was no page to add them to, and per our page budget for this pass we did not create new pages. We did not guess, estimate, or borrow a neighboring ZCTA's figures for any page.

Result: 33,640 of our 40,979 ZIP pages (about 82%) received the new section; the remaining 7,339 pages were left completely unchanged (7,207 of those are ZIPs with no ZCTA at all, the same category described below under "ZIP vs. ZCTA"; 132 are the Puerto Rico ZCTAs described above that have data but no page on this site).

Fields added

  • Race & ethnicity: total population in the table's universe (B03002_001); Hispanic or Latino, any race (B03002_012); and, for the Not-Hispanic-or-Latino population, White alone, Black or African American alone, American Indian and Alaska Native alone, Asian alone, Native Hawaiian and Other Pacific Islander alone, Some other race alone, and Two or more races (B03002_003 through _009) — each shown as a raw count and as a percentage of that row's own B03002_001 total.
  • Poverty: population for whom poverty status is determined, and the count below the poverty line in the past 12 months (B17001_001, _002), shown as a count and as a percentage of the same row's total.
  • Commuting: total workers 16+ who did not work from home (B08303_001), broken into the Census Bureau's own twelve travel-time brackets (B08303_002 through _013), each shown as a count and as a percentage of that row's own total.
  • Housing occupancy: total housing units, occupied units, and vacant units (B25002_001, _002, _003), each shown as a count and as a percentage of that row's own total.

All percentages on this new section are calculated by us, but only ever as one cell in a table divided by that same table's own total cell for the same ZCTA — never a figure blended across two different tables or two different ZIPs. Where a ZCTA's relevant total is zero, we show the raw count (also zero) and omit the percentage rather than showing a divide-by-zero artifact. Across the 33,640 augmented pages, this happened for roughly 590–1,020 pages depending on the table (a handful of very-low-population ZCTAs).

What we deliberately did not compute

We did not compute an "average commute time." Table B08303 only publishes counts of workers inside time brackets (for example, "30 to 34 minutes," or the open-ended "90 or more minutes"). Turning that into a single average requires assuming a specific minute value inside every bracket — including the open-ended one — which is an estimate we are not willing to invent. We publish the Census Bureau's own bracket counts and percentages instead.

Why we didn't refresh the core figures yet

We also fetched the 2019–2023 bulk tables for the five core figures (B01003, B19013, B25077, B25064, B01002) during this pass, and could have swapped them in. We chose not to, in this build, because two other figures that already appear in the same per-ZIP paragraphs — the bachelor's-degree percentage and the unemployment estimate — come from tables (B15003, B23025) that were not part of this pull and would have stayed on the 2018–2022 vintage. Updating five of seven interleaved figures in the same sentences, while leaving two on an older vintage without saying so page-by-page, risked a misleading result. We left the original five figures and their "(2018–2022)" labeling exactly as published, and added the new figures as a separate, clearly and independently dated section instead. A same-vintage refresh of all seven figures together is a candidate for a future, dedicated pass.

Fields withheld

Nothing was withheld from this pull on privacy grounds — B03002, B17001, B08303, and B25002 are all ZCTA-level aggregate tables (population and housing-unit counts and brackets), the smallest grain the Census Bureau publishes them at, and none of the four tables contains any figure keyed to a named individual, a household, or a street address. (A separate, unrelated build-policy note about institutional/facility datasets tied to named individuals does not apply to this pull — there is no such data here.)

ZIP vs. ZCTA

Strictly speaking, a USPS ZIP Code is a mail-delivery route and a Census ZCTA is a polygon approximating where that ZIP's deliveries are concentrated. The two lists overlap heavily but are not identical: a small number of mail-only ZIPs (post-office boxes, single buildings) have no corresponding ZCTA and therefore no Census demographic figures. On those pages you'll see geographic information but blank or em-dashed demographic fields, and no race/ethnicity, poverty, commuting, or occupancy section.

Aggregation

City and state pages on ZipLocal Guide are mechanical roll-ups of the underlying ZIP-level data: total population is summed; medians are reported as the average of ZIP-level medians, weighted equally rather than by population. This is faster to compute than a true population-weighted median but is also a rougher approximation. We flag a more rigorous methodology as a future improvement. City and state pages do not yet roll up the new race/ethnicity, poverty, commuting, or occupancy figures — those currently exist only on the individual ZIP pages.

What we don't claim

  • We do not publish school ratings, crime indexes, or "best places" rankings.
  • We do not project property values forward or estimate appreciation.
  • We do not provide individual-level data of any kind. ACS releases are aggregate by design and protected by Census disclosure-avoidance rules.
  • The poverty and commuting figures are Census survey estimates about a geographic area, not a claim about any specific person or address in it.

Refresh cadence

The Census Bureau publishes a new ACS 5-Year release each December. We aim to refresh our underlying tables within 60 days of each new release. The data vintage shown on the homepage reflects the most recent release we've ingested for the core figures described above.

Corrections

Spotted a figure that looks wrong? See Contact for how to send us the page URL, the field you believe is wrong, what you believe the correct value is, and a source.