openvenues/libpostal logo

openvenues/libpostal

Free

A C library for parsing/normalizing street addresses around the world. Powered by statistical NLP and open geo data.

FreeFree tier
Type
Open Source
Company
openvenues

About openvenues/libpostal

libpostal is a C library for parsing and normalizing street addresses around the world using statistical natural language processing (NLP) and open geographic data. It is designed to convert free-form human-readable addresses into clean, normalized forms suitable for machine comparison and full-text indexing. While not a full geocoder itself, libpostal serves as a preprocessing step to make geocoding applications smarter, simpler, and more consistent internationally. The core library is written in pure C and has officially supported language bindings for Python, Ruby, Go, Java, PHP, and NodeJS. It is open source and freely available on GitHub under the openvenues organization.

Key Features

Parses street addresses from around the world using statistical NLP
Normalizes free-form addresses into clean, comparable forms
Powered by open geographic data (e.g., OpenStreetMap)
Written in pure C for performance
Official language bindings for Python, Ruby, Go, Java, PHP, and NodeJS
Supports multiple languages and local address conventions
Can be used as a preprocessing step for any geocoding application
Open source with a permissive license

Pros & Cons

Pros
  • Free and open source under a permissive license
  • Handles addresses from many countries and languages
  • Uses statistical NLP for robust parsing of varied formats
  • Well-documented with official bindings for multiple programming languages
  • Improves consistency in geocoding pipelines
  • Active community and sponsorship support
Cons
  • Not a standalone geocoder – requires integration with other services
  • Installation requires compilation from source (C library) and dependencies
  • Requires significant memory and disk space for training data
  • Limited to address text processing; no geographic coordinate output
  • May have less support for very rare address formats

Best For

Preprocessing addresses for geocoding and reverse geocodingImproving place search and map applicationsTransportation and on-demand/delivery service address handlingIndexing and querying location data in full-text search enginesAutomated check-in and review location standardizationInternational address validation and normalizationNatural language understanding of location-based strings

FAQ

What is libpostal?
libpostal is a C library that parses and normalizes street addresses from around the world using statistical NLP and open data.
Is libpostal a geocoder?
No, libpostal is not a full geocoder. It is a preprocessing step that converts free-form addresses into normalized forms, which can then be used to improve geocoding applications.
Which languages are supported?
libpostal supports addresses in many languages. The GitHub repository includes flags representing many countries, indicating broad international support.
What programming languages have official bindings?
Official bindings are available for Python, Ruby, Go, Java, PHP, and NodeJS.
How do I install libpostal?
Installation requires prerequisites like curl, autoconf, automake, libtool, pkg-config on Linux. On macOS, it can be installed via MacPorts or Homebrew.
Can I contribute to libpostal?
Yes, the project is open source and contributions are welcome via the GitHub repository.