skillfed

postal

Python bindings to libpostal for fast international address parsing/normalization

postal v1.1.11 84.3K downloads/30d#14,007 on PyPI881
Permissive license MIT License AGING released

What it is and what it does

postal is a Python wrapper around libpostal, a standalone C library for parsing and normalizing street addresses in any language or format worldwide. It provides two main functions: expand_address() generates normalized variations of an address (useful for fuzzy matching), and parse_address() breaks an address into its semantic components (street, city, country, postal code, etc.).

The package is designed for developers building geocoding pipelines, address validation systems, or search indexing that must handle international addresses. Installation requires compiling libpostal from source with system build tools and allocating disk space for linguistic and geographic data. The bindings are CPython-only and support Python 3.5 and later.

Use it for:

  • Normalize and standardize address data from multiple sources before geocoding or database storage
  • Extract address components (street, city, postal code) from unstructured text for form validation or data enrichment
  • Generate address variations for fuzzy matching in search or deduplication workflows
  • Preprocess international addresses in multiple languages for mapping or logistics applications
  • Index addresses in search engines by expanding and normalizing variants

Worth the install?

AI-flagged interpretation of the facts on this page — verify before relying

Python bindings to libpostal, a C library for parsing and normalizing street addresses worldwide, supporting address expansion and component extraction.

Yes, if you need robust international address parsing and can handle the compilation overhead. The high install friction (system C library build, platform-specific setup, several GB data) is a real cost, but the package is stable, permissive-licensed, and solves a hard problem well. Not suitable for environments where you cannot compile C libraries or manage system dependencies. Maintenance is aging but not abandoned; last release was recent.

Install

postal on PyPI

pip

pip install postal

uv

uv add postal

poetry

poetry add postal

Installing postal

Before you install

High install friction: requires compiling the libpostal C library before the Python bindings can work. Needs system build tools (autoconf, automake, libtool, pkg-config) and several GB of disk space for libpostal's data. Platform-specific setup is required (Ubuntu/Debian, CentOS/RHEL, macOS, or Windows with MSYS2). Last release was 289 days ago; maintenance is aging.

License in practice

MIT License (permissive). You can use, modify, and distribute this package freely in commercial or private projects, with minimal restrictions.

Quickstart

# Install libpostal C library first (see platform-specific instructions in docs)
# Then: pip install postal

from postal.expand import expand_address
expand_address('Quatre vingt douze Ave des Champs-Élysées')

from postal.parser import parse_address
parse_address('The Book Club 100-106 Leonard St, Shoreditch, London')

libpostal C library must be compiled and installed system-wide before pip install postal will work. Requires build tools (autoconf, automake, libtool, pkg-config) and several GB of disk space. CPython only; PyPy not supported.

Verify before relying

  • Whether libpostal data files are automatically downloaded during installation or must be manually configured
  • Current state of Windows support and whether MSYS2 setup remains the recommended path
  • Performance characteristics and typical latency for address parsing operations
  • Whether the package works with modern Python versions beyond 3.5 despite unspecified support

Package facts

License MIT License (permissive)
Python support not specified
Install friction high — source build required
Runtime dependencies 1 — six
Maintenance aging — 289 days since the last release
Last repo commit
First released
Downloads 84,331/month — #14,007 on PyPI (30-day window, as of 2026-08-14)
Known vulnerabilities none known (OSV.dev, checked 2026-08-14)

Evidence: postal-1.1.11.tar.gz

Intended Audience :: DevelopersIntended Audience :: Information TechnologyLicense :: OSI Approved :: MIT LicenseOperating System :: MacOS :: MacOS XOperating System :: POSIX :: LinuxProgramming Language :: CProgramming Language :: Python :: 3Programming Language :: Python :: 3.5Topic :: Internet :: WWW/HTTP :: Indexing/SearchTopic :: Scientific/Engineering :: GISTopic :: Software Development :: Libraries :: Python ModulesTopic :: Text Processing :: Linguistic

Tags

address parsingaddress normalizationinternational address parserstreet address extractionaddress standardizationgeocoding preprocessingaddress components
address-parsinginternationalizationc-bindings

More Python Modules packages