FreeAPI.watch

Free Geocoding APIs Without an API Key in 2026

 ·  geocoding

Nominatim, plus the surprising fallback options when OSM rate-limits you. Real numbers.

Nominatim (OpenStreetMap) is the strongest free geocoding API without a key in 2026: forward and reverse geocoding, global coverage, no signup required, 1 req/sec rate limit. For most single-developer projects and low-traffic applications, it's all you need.

Google Maps went paid in 2018 (no longer free beyond a $200/month credit). Here's what actually works without spending money.

Nominatim: What You Need to Know

Nominatim powers the search bar on openstreetmap.org and processes millions of queries per day. The public API endpoint is `https://nominatim.openstreetmap.org`. The two endpoints you'll use most:

`/search?q=Berlin&format=json` — forward geocoding: address/place name to coordinates

`/reverse?lat=52.5&lon=13.4&format=json` — reverse geocoding: coordinates to address

The single most important thing about using Nominatim: you MUST set a User-Agent header. Without it, your requests will be blocked. The OSM usage policy requires this so they can identify abusive clients. A User-Agent like `MyApp/1.0 ([email protected])` is sufficient.

The rate limit is approximately 1 request per second. This isn't a hard cap in the HTTP sense — there's no token bucket. It's enforced by IP throttling: exceed 1 req/sec consistently and your IP gets rate-limited or banned. In practice, for a user-facing app where geocoding happens on user action (address input), you'll never come close.

Where Nominatim Falls Short

The quality gap between Nominatim and paid geocoders is most visible for partial addresses, non-English queries, and business name searches. 'Empire State Building' returns good results; 'the pizza place on 5th' does not.

Batch geocoding (converting a CSV of 10,000 addresses) is explicitly prohibited on the public instance — you'd need to run your own Nominatim installation or use a paid API. The public instance is intended for interactive use, not bulk processing.

Autocomplete (address suggestions as you type) isn't directly supported by the standard Nominatim search endpoint — it's designed for complete queries, not partial ones. There are workarounds (using the `/search` endpoint with a trailing space and `limit=5`), but it's not the same as a dedicated autocomplete API.

Other No-Key Geocoding APIs

BigDataCloud Reverse Geocoding (unlimited, no key for client-side endpoints) is worth knowing for the reverse-only case. It's designed for client-side use (browser) but works server-side too. The response includes locality, city, country code, and postcode.

ip-api.com (45 req/min, HTTP only, no key) handles IP-to-location lookups — not address geocoding, but useful if you need to infer a visitor's country/city from their IP address. Note: the free tier is HTTP-only; HTTPS requires a paid plan.

IPinfo (50,000 req/month, no key for basic) is the better IP geolocation option if you need HTTPS and a higher monthly limit.

For anything beyond Nominatim's 1 req/sec: OpenCage (2,500 calls/day, key required, no credit card) is the most natural step up. See /opencage and /nominatim for live status, and /category/geocoding for the full ranked list.

Practical Integration: Bash and Python

The minimum viable Nominatim request in curl:

curl -H "User-Agent: MyApp/1.0 ([email protected])" \
  "https://nominatim.openstreetmap.org/search?q=Eiffel+Tower+Paris&format=json&limit=1"

In Python, using the `requests` library:

import requests
import time

HEADERS = {"User-Agent": "MyApp/1.0 ([email protected])"}

def geocode(query: str) -> dict | None:
    resp = requests.get(
        "https://nominatim.openstreetmap.org/search",
        params={"q": query, "format": "json", "limit": 1},
        headers=HEADERS,
        timeout=10
    )
    resp.raise_for_status()
    results = resp.json()
    return results[0] if results else None

# Rate limit: wait 1 second between calls
result = geocode("Eiffel Tower, Paris")
time.sleep(1)
next_result = geocode("Big Ben, London")

Frequently Asked Questions

Is Nominatim production-safe?

For low-traffic production use (under 1 request/second sustained), yes. The OpenStreetMap Usage Policy explicitly allows it for public applications as long as you set a valid User-Agent and don't hammer the servers. For higher volume, you should run your own Nominatim instance (the software is open-source) or use a paid geocoding API like OpenCage. The public Nominatim instance is not backed by an SLA.

What happens if I exceed Nominatim's rate limit?

Nominatim will start returning HTTP 429 (Too Many Requests). Persistent abuse results in IP bans. The rate limit is enforced at approximately 1 request per second. There is no formal 'burst allowance' — a brief spike above 1 req/sec will typically get absorbed, but sustained over-limit usage triggers throttling quickly.

Can I use Nominatim commercially?

Yes, with conditions. The data is available under the ODbL (Open Database Licence), which requires attribution and that derivative databases remain open. There is no restriction on using Nominatim for a commercial application. The limitation is the rate limit on the public instance — high-volume commercial use requires running your own Nominatim instance or paying for a commercial geocoding API.

← All articles