GridPin is an open-source geocoder for street addresses that runs entirely on your machine. Each country is one memory-mapped file you download once; forward and reverse geocoding then need no server, no database import, no API key and no rate limit.
Ways to use it:
- Python:
pip install gridpin
- a command-line tool
- DuckDB:
INSTALL gridpin_ext FROM community
- an MCP server for AI agents:
uvx gridpin-mcp
An address the file cannot place comes back empty rather than guessed.
Benchmark. Share of first answers within 150 m of an independent reference coordinate; same queries and same truth for all three engines; empty answers count as misses:
| Query set |
Rows |
GridPin |
Photon |
Nominatim |
| Germany, distorted addresses |
2,000 |
82.1% |
46.9% |
15.8% |
| Germany, clean addresses |
2,000 |
82.8% |
83.2% |
81.2% |
| Spain, distorted addresses |
1,590 |
33.8% |
29.6% |
20.8% |
| Brazil, distorted addresses |
2,376 |
20.7% |
19.8% |
9.6% |
Where it does not win: on clean German addresses the three are level, on Brazilian distorted addresses GridPin and Photon are level, and Photon leads on clean Brazilian addresses and on the other Spanish sets. Method and full counts: https://gridpin.dev/bench
Coverage is a handful of countries so far (list on https://gridpin.dev/); the US is not covered yet. Browser demo, nothing to install: https://gridpin.streamlit.app/
Disclosure: the code, tests, benchmarks and this post were written with AI coding agents; I direct the work and make the decisions. Feedback is welcome, especially addresses it gets wrong.