#5959th of 60 in Data and scraping for AI

libpostal

C library for parsing and normalizing street addresses worldwide

Stars
4.9k
License
MIT
Last commit
Dec 2025
Last release
May 2018
Language
C
Stars, last 29 weeks+165
21 Apr 2026: 4,758 stars28 Apr 2026: 4,764 stars5 May 2026: 4,770 stars12 May 2026: 4,778 stars19 May 2026: 4,782 stars26 May 2026: 4,789 stars2 Jun 2026: 4,790 stars9 Jun 2026: 4,798 stars16 Jun 2026: 4,803 stars23 Jun 2026: 4,808 stars30 Jun 2026: 4,815 stars7 Jul 2026: 4,821 stars14 Jul 2026: 4,829 stars21 Jul 2026: 4,837 stars28 Jul 2026: 4,841 stars4 Aug 2026: 4,850 stars11 Aug 2026: 4,854 stars18 Aug 2026: 4,858 stars25 Aug 2026: 4,866 stars1 Sept 2026: 4,868 stars8 Sept 2026: 4,872 stars15 Sept 2026: 4,876 stars22 Sept 2026: 4,882 stars29 Sept 2026: 4,887 stars6 Oct 2026: 4,895 stars13 Oct 2026: 4,901 stars20 Oct 2026: 4,909 stars27 Oct 2026: 4,913 stars3 Nov 2026: 4,920 stars10 Nov 2026: 4,923 stars

4,758 on 21 Apr 20264,923 on 10 Nov 2026

From GitHub's daily star counts.

Checked on GitHub.

Overview

libpostal is a C library that parses free-form street addresses into components and normalizes them for matching and full-text indexing. The parser is a Conditional Random Field model trained on over 1 billion addresses from OpenStreetMap and OpenAddresses. It is not a geocoder, but works as a preprocessing step for one. Bindings exist for Python, Ruby, Go, Java, PHP and NodeJS.

Who it is for: Developers adding address parsing to geocoding and data pipelines

Strengths

  • Trained on over 1 billion addresses covering every inhabited country
  • Pure C core with officially supported bindings for six languages
  • Runs fully on CPU, offline, with pkg-config support
  • Optional Senzing model reports 4.3% better parsing on its test set

Weaknesses

  • Model data needs a few GB of disk (about 1.8GB default, 2.2GB Senzing)
  • Last tagged release is from 2018, though commits continue
  • Not a geocoder; it only parses and normalizes address strings
  • Source build needs autotools; Windows requires MSys2/MinGW; M1 needs --disable-sse2

What it needs

  • no GPU
  • Needs autoconf, automake, libtool, pkg-config, curl
  • Models: Conditional Random Field address parser, Senzing alternative model

What changed

  1. “Every function, struct, constant, etc. defined in the public header (libpostal.h) now uses a "libpostal" prefix . This affects all bindings that call the C API. The bindings that are part of this Git…”

From the release notes. No flag means the note does not say so, not that the upgrade is safe.

Also in Data and scraping for AI

See all 60
Also in Data and scraping for AI
RankProjectScore
1doclingPython library that converts PDFs, Office files and more into structured text70.5k stars+1,801 (+2.6%) in 30 daysMIT92 out of 100
2mineruParses PDFs, images and Office files into Markdown and structured JSON Live demo ↗ (opens in a new tab)83.6k stars+2,160 (+2.7%) in 30 dayscustom license91 out of 100
3opendataloader-pdfPDF parser that outputs Markdown, JSON with bounding boxes, and Tagged PDF30.3k stars+705 (+2.4%) in 30 daysApache-2.091 out of 100
#4agent-reachCLI that gives coding agents read access to login-gated and Chinese web platforms111.3k stars+14,960 (+16%) in 30 daysMIT89 out of 100
#5markitdownPython library and CLI that converts office files, PDFs and audio to Markdown195.1k stars+5,652 (+3.0%) in 30 daysMIT87 out of 100