zipcodes
Query U.S. state zipcodes without SQLite.
Decision gist · record as of 2026-08-14
Yes. Zipcodes is actively maintained, has no security vulnerabilities, carries a permissive MIT license, and solves a common task (U.S. zipcode lookup) with zero runtime dependencies and fast, embedded data. The medium install friction (compiled extension) is offset by prebuilt wheels for all major platforms and Python 3.9+. Install it if you need reliable, offline zipcode queries.AI-flagged interpretation of the facts on this page — verify before relying
Before you install
- Requires Python 3.9+.
- Installing from source requires a Rust toolchain.
- Medium install friction due to compiled Rust extension, but prebuilt wheels cover Linux (x86_64, aarch64, musl), macOS, and Windows.
License · maintenance · safety
MIT (permissive) — MIT license permits commercial and private use with minimal restrictions.
last release 2026-06-14 (61 days) · last repo commit 2026-06-15 · 81 stars
0 known vulnerabilities (OSV.dev, 2026-08-14) · 734,301 downloads/mo, #5,198 on PyPI
Alternatives
Verify before relying
pip install zipcodes
import zipcodes
# Validate a zipcode
if zipcodes.is_real('77429'):
result = zipcodes.matching('77429')[0]
print(result['city'], result['state'])
# Filter by location
zips = zipcodes.filter_by(city='Cypress', state='TX')- Whether the monthly data refresh cycle is reliable in practice and whether stale data poses a risk for time-sensitive applications.
- Performance characteristics for large-scale filtering operations (e.g., filter_by across all 40,000+ zipcodes).
What it is and what it does
Zipcodes is a Python library for querying U.S. zipcode data with the full dataset embedded in the package itself. Since version 2.0, it is implemented in Rust and compiled into a native extension, making imports nearly instant and queries significantly faster than the pure-Python 1.x version. The library provides functions to validate zipcodes, match exact codes, search by prefix, and filter by city, state, county, timezone, or coordinates. Each zipcode record includes metadata like area codes, GPS coordinates, timezone, county, and delivery status.
The package has no runtime dependencies and requires no external database or network access—all data is decompressed lazily on first query. The embedded dataset is refreshed automatically every month from three sources: unitedstateszipcodes.org, GeoNames, and USPS ZIP Locale Detail. Installation is straightforward on modern platforms via prebuilt wheels; source builds require a Rust toolchain.
Use it for
- Validate user-submitted zipcodes in forms or APIs without making network calls.
- Look up city, state, county, and timezone information for a given zipcode.
- Filter zipcodes by location (city, state, county) or geographic bounds (coordinates).
- Find zipcodes matching a prefix pattern for autocomplete or search features.
- Embed zipcode data in offline or air-gapped applications without external dependencies.
Worth the install?
AI-flagged interpretation of the facts on this page. Verify before relying on it.
Yes.
Zipcodes is actively maintained, has no security vulnerabilities, carries a permissive MIT license, and solves a common task (U.S. zipcode lookup) with zero runtime dependencies and fast, embedded data. The medium install friction (compiled extension) is offset by prebuilt wheels for all major platforms and Python 3.9+. Install it if you need reliable, offline zipcode queries.
Install
zipcodes on PyPI
Before you install
Medium install friction due to compiled Rust extension, but prebuilt wheels cover Linux (x86_64, aarch64, musl), macOS, and Windows. Active maintenance with monthly data refreshes; last release 61 days ago.
Requires Python 3.9+. Installing from source requires a Rust toolchain.
License in practice
MIT license permits commercial and private use with minimal restrictions.
Quickstart
pip install zipcodes
import zipcodes
# Validate a zipcode
if zipcodes.is_real('77429'):
result = zipcodes.matching('77429')[0]
print(result['city'], result['state'])
# Filter by location
zips = zipcodes.filter_by(city='Cypress', state='TX')
Verify before relying
- Whether the monthly data refresh cycle is reliable in practice and whether stale data poses a risk for time-sensitive applications.
- Performance characteristics for large-scale filtering operations (e.g., filter_by across all 40,000+ zipcodes).
Package facts
| License | MIT permissive |
| Python support | Supports the current Python release >=3.9 |
| Install friction | Medium. Platform-specific wheel |
| Runtime dependencies | None |
| Maintenance | Actively maintained 61 days since the last release |
| Last repo commit | |
| First released | |
| Downloads | 734,301 / month, #5,198 on PyPI 30-day window, as of 2026-08-14 |
| Known vulnerabilities | None known OSV.dev, checked 2026-08-14 |
| Classifiers | Development Status :: 5 - Production/StableIntended Audience :: DevelopersProgramming Language :: Python :: 3.10Programming Language :: Python :: 3.11Programming Language :: Python :: 3.12Programming Language :: Python :: 3.13Programming Language :: Python :: 3.14Programming Language :: Python :: 3.9Programming Language :: Rust |
Evidence: zipcodes-3.0.0-cp39-abi3-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl; zipcodes-3.0.0-cp39-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl; zipcodes-3.0.0-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl; zipcodes-3.0.0-cp39-abi3-musllinux_1_2_x86_64.whl; zipcodes-3.0.0-cp39-abi3-win_amd64.whl
Tags
Let your AI agent find packages like this
Example. Real query, live index.
You found this page by searching. An agent finds it by wishing: SkillFed indexes 14,416 PyPI packages by what they can do, searchable in plain language.
wish › “zipcode validation”
- zipcodesQuery and validate U.S. zipcodes with embedded data—no external…
- uszipcodeProvides programmable access to a database of 42,724 US zipcodes with…
- pydantic_corepydantic-core provides the high-performance validation and…
Give your agent the search over MCP, or paste the wish link into any chat.
More Utilities packages
Converts domain names between Unicode and ASCII-compatible encoding (Punycode) according to IDNA 2008 and Unicode Technical Standard 46, with security validation and broader script coverage than the standard library.
Install it if you work with internationalized domain names, need to validate domains, or use HTTP clients that depend on it transitively.
Detects and normalizes text encoding from unknown or ambiguous sources, supporting all IANA character sets that Python's core library provides codecs for, with the ability to register custom codecs.
Setuptools is a Python build backend and package management tool that handles building, distributing, and installing Python packages, including support for C/C++ extension modules.
Pluggy provides a plugin system that lets you define hook specifications and register implementations to be called in sequence, enabling extensible Python applications without tight coupling.
Install it if you're building an extensible application or framework.
Pygments is a syntax highlighter that colorizes source code and text in over 500 languages and formats, outputting to HTML, LaTeX, RTF, SVG, images, or ANSI terminal sequences.
Install it if you need to display or transform source code.
Six provides utility functions to write Python code that runs on both Python 2.7 and Python 3.3+, smoothing over language differences between the two versions.
See also pyzipcode · uszipcode · reverse-geocode · censusgeocode · us · pypostalcode · pgeocode · reverse_geocoder · random-address · phonenumbers