Hit 429 on public Nominatim? Use your own server

Your script sleeps a second between addresses and still gets 429 Too Many Requests or a block. The public server is shared and says so; the fix is a server of your own, not a longer sleep.

Run it yourself Server, Docker Python Websites, help desks

What you have

What the public server asks, read November 10, 2026 on the Nominatim usage policy: an absolute maximum of 1 request per second, a User-Agent that names your application, and no bulk geocoding of large amounts of data. A geopy script that keeps to it, pointed at a local server instead:

geocode.pyfile
from geopy.geocoders import Nominatim

# before: Nominatim(user_agent="my-app") with RateLimiter(min_delay_seconds=1)
geo = Nominatim(user_agent="my-app", domain="127.0.0.1:8080", scheme="http")

for line in ["233 S Wacker Dr, Chicago, IL 60606",
             "1600 Pennsylvania Ave NW, Washington, DC 20500",
             "350 Fifth Avenue, New York, NY 10118"]:
    place = geo.geocode(line)
    print(place.latitude, place.longitude, place.address)

Steps

1. Start the server for the country of your addresses; it answers /search, /reverse and /status the way Nominatim does:

terminalCLI
$ gridpin serve usa.bin --port 8080
terminalCLI
$ curl -s "http://127.0.0.1:8080/status?format=json"
{"data_updated":"2026-09-23.1","database_version":"2026-09-23.1","message":"OK","software_version":"gridpin 0.8.0","status":0}

2. Run the script with the host changed and the delay removed:

terminalCLI
$ python3 geocode.py
41.878658 -87.6358684 233 South WACKER Drive, Chicago, 60606
38.8976751 -77.036547 1600 PENNSYLVANIA Avenue Northwest, Washington, 20500
40.7488827 -73.9860301 350 5 Ave, Times Square, 10118

3. There is no rate limit to hit: two hundred requests in a row, every one answered:

terminalCLI
$ for i in $(seq 200); do curl -s -o /dev/null -w "%{http_code}\n" "http://127.0.0.1:8080/search?q=233+S+Wacker+Dr,+Chicago&format=json"; done | sort | uniq -c
 200 200

What you get

The same Location objects as before, from your machine. Any client that lets you set the Nominatim URL works the same way: seven clients, one line each; trackers such as Traccar: fleet tracking.

Why it works

The server reads the country file into memory once and answers each request in the process, so the only limit is your machine. It speaks the Nominatim formats (json, jsonv2, geojson) on the same paths, so clients do not notice the change of host.

Limits

  • Addresses of the countries GridPin has files for, one country per server; Nominatim also finds shops, parks and places by name worldwide.
  • Only the parameters clients commonly send are read; see the server page for the list.
  • GridPin is not affiliated with the OpenStreetMap Foundation; its server is not Nominatim.

All its keys: command reference. The function: local server.