Free US ZIP code database
Every US ZIP code — all 41,711 of them, including PO-box-only and military codes — with its town, state, county and FIPS code, coordinates, population and telephone area codes. One row per ZIP code, as CSV, JSON or SQLite. Free for any use, commercial included, under CC BY 4.0. Data release 2026-10-12.
CSV
UTF-8, comma separated, header row. Opens in Excel, Google Sheets and Numbers.
Download · 5.1 MB us-zip-codes-2026-10-12.csv
SHA-256 20cdde4d27abacb0…
JSON
An array of objects, one per ZIP code. Lists are arrays, empty values null.
Download · 15.2 MB us-zip-codes-2026-10-12.json
SHA-256 be7dcf5fc2fd61d3…
SQLite
A ready-to-query database: table zips, indexed by state, county and city, with the field dictionary and licence inside.
Download · 8.0 MB us-zip-codes-2026-10-12.sqlite
SHA-256 0b579a2a537aaab4…
Always the newest release, at addresses that do not change:
https://zipcodes.pro/download/us-zip-codes.csv, https://zipcodes.pro/download/us-zip-codes.json, https://zipcodes.pro/download/us-zip-codes.sqlite.
Also here: LICENSE.txt,
FIELDS.csv (the field dictionary),
SOURCES.csv and
checksums. Files are served with open
CORS, so a browser app can fetch them directly.
What the rows look like
| zip | city | state | county_name | lat | lng | population | area_codes |
|---|---|---|---|---|---|---|---|
| 10001 | New York | NY | New York County | 40.750649 | -73.997298 | 30511 | 212|646|917|332 |
| 60629 | Chicago | IL | Cook County | 41.775414 | -87.711487 | 108324 | 773|312|872 |
| 30024 | Suwanee | GA | Gwinnett County | 34.063485 | -84.0911 | 88067 | 470|678|943|770 |
| 00601 | Adjuntas | PR | Adjuntas Municipio | 18.180555 | -66.749961 | 16669 | 939|787 |
| 99950 | Ketchikan | AK | Ketchikan Gateway Borough | 55.3422 | -131.6478 | 907 | |
| 96201 | APO AP | AP |
A blank is a value no source publishes for that ZIP code, never a zero: a ZIP code that only serves PO boxes has no residents counted, and a military code has no county or fixed location.
Fields
| Column | Type | Filled | Meaning |
|---|---|---|---|
zip | text | 41,711 | Five-digit ZIP code, zero padded (00601 stays 00601). Never empty. |
city | text | 41,711 | The town the mail is addressed to (GeoNames' name for the ZIP code). |
state | text | 41,711 | Two-letter USPS code. Military codes are AA, AE or AP, read from the ZIP prefix as USPS sorts them. |
state_name | text | 41,711 | State, territory or military region name. |
type | text | 41,711 | standard (has a census tabulation area, so street delivery), po_box, unique, military, or unknown (a PO-box-only or single-organisation ZIP that public data cannot tell apart). |
county_fips | text | 41,171 | Five-digit FIPS code of the county holding most of the ZIP's land. Empty for military codes and a few territory ZIPs. |
county_name | text | 41,171 | Name of county_fips. |
county_fips_all | text | 41,171 | Every county the ZIP touches, largest share first, separated by |. A ZIP code can cross county lines. |
lat | number | 41,202 | Latitude, WGS84. A Census internal point for ZIPs with a tabulation area (always inside it), GeoNames otherwise. Empty for military codes. |
lng | number | 41,202 | Longitude, WGS84. As lat. |
coord_source | text | 41,202 | census (Gazetteer internal point) or geonames. |
is_zcta | 0/1 | 41,711 | 1 if the Census Bureau tabulates the ZIP as a ZIP Code Tabulation Area. If 0, population and areas are empty by construction. |
parent_zcta | text | 7,325 | For a ZIP with no tabulation area, the ZCTA its point falls inside. Its figures describe that area, not this ZIP. |
population | integer | 33,772 | American Community Survey 5-year estimate for the ZCTA. Empty means not tabulated, never zero. |
land_sqmi | number | 33,791 | Land area of the ZCTA in square miles (Census Gazetteer). |
water_sqmi | number | 33,791 | Water area of the ZCTA in square miles. |
density_per_sqmi | number | 33,772 | population / land_sqmi. |
area_codes | text | 39,128 | Telephone area codes of the town, most numbers first, separated by |. From NANPA's rate centres, by town, not by ZIP. Empty where the town has no matched rate centre. |
"Filled" counts the rows with a value, out of 41,711. In the JSON,
county_fips_all and area_codes are arrays; in the CSV
and SQLite they are separated by |. ZIP codes are text, so 00601
keeps its leading zeros; when opening the CSV in Excel, import the
zip column as text.
Licence and credit
The database is licensed under the Creative Commons Attribution 4.0 International licence. Copy it, ship it inside your product, modify it, sell what you build with it. The one condition is credit. Please use:
ZIP code data from zipcodes.pro (https://zipcodes.pro/download), CC BY 4.0. Includes U.S. Census Bureau data (public domain) and GeoNames (CC BY 4.0).
On a web page or in a README, a link is the credit we ask for:
ZIP code data from <a href="https://zipcodes.pro/download">zipcodes.pro</a> (<a href="https://creativecommons.org/licenses/by/4.0/">CC BY 4.0</a>)
Census Bureau files are public domain. GeoNames, which names the towns, is CC BY 4.0 as well, and the credit above covers it. NANPA publishes its numbering records without licence terms; they are cited as the source of the area codes.
Sources
| Source | Vintage | Licence | Retrieved |
|---|---|---|---|
| Census Gazetteer ZCTA file | 2024 Gazetteer | Public domain (U.S. Census Bureau) | 2026-10-12 |
| Census 2020 ZCTA-to-County relationship file | 2020 relationship file | Public domain (U.S. Census Bureau) | 2026-10-12 |
| Census Gazetteer county file | 2024 Gazetteer | Public domain (U.S. Census Bureau) | 2026-10-12 |
| Census 2020 Gazetteer county file | 2020 Gazetteer | Public domain (U.S. Census Bureau) | 2026-10-12 |
| Census American Community Survey 5-year estimates | ACS 5-year 2024 | Public domain (U.S. Census Bureau) | 2026-10-12 |
| GeoNames US postal codes | rolling daily export | CC BY 4.0 | 2026-10-12 |
| GeoNames postal codes (PR, VI, GU, AS, MP, MH, FM, PW) | rolling daily export | CC BY 4.0 | 2026-10-12 |
| NANPA NPA (area code) database | file of 2026-10-10 | Public numbering records (NANPA, under FCC contract); no licence terms stated | 2026-10-12 |
| NANPA Central Office Code assignments (all states, utilized) | file of 2026-10-10 | Public numbering records (NANPA, under FCC contract); no licence terms stated | 2026-10-12 |
Using it
# Python / pandas: keep the ZIP codes as text
import pandas as pd
zips = pd.read_csv("https://zipcodes.pro/download/us-zip-codes.csv", dtype={"zip": str, "county_fips": str, "parent_zcta": str})
# SQLite
curl -O https://zipcodes.pro/download/us-zip-codes.sqlite
sqlite3 us-zip-codes.sqlite "SELECT zip, city, county_name FROM zips WHERE state = 'VT' LIMIT 5"
# JavaScript
const zips = await fetch("https://zipcodes.pro/download/us-zip-codes.json").then((r) => r.json()); What is not in it
- Time zones. Ours are looked up in OpenStreetMap-derived boundaries, licensed ODbL, which cannot be relicensed as CC BY. They are on every ZIP code page and in the paid editions.
- Demographics beyond population, business counts, metro areas, nearby ZIP codes and boundaries. Those are in the Core and Complete editions, with monthly updates.
- USPS delivery details. ZIP+4, carrier routes and the USPS list of acceptable city names come only from USPS-licensed data, which no free source carries.
Updates
The files are rebuilt with every data release, from the same database that answers every page on this site, so a row here and the page for that ZIP code always agree. File names carry the release date, so a link to one release keeps pointing at it; the names without a date follow the newest. Found something wrong? Email [email protected] with the ZIP code and the field.
Need to look up a list rather than download everything? The bulk lookup tool appends city, county and coordinates to a pasted list, and the API answers one ZIP code at a time.