Find any address,
while your users type.
Search for addresses and places worldwide, suggest them as people type, and turn a point on the map into an address. On OpenStreetMap data, with the API of Photon and the API of Nominatim, so the libraries you already use work with it.
- 100'000 requests a month in every plan
- Results may be stored
- Servers in the EU
curl 'https://api.overpass.ch/v1/YOUR_KEY/geocode/api?q=kapellbr' { "features": [{ "geometry": { "coordinates": [8.3077, 47.0518] }, "properties": { "name": "Kapellbrücke", "city": "Luzern", "postcode": "6002", "osm_key": "man_made", "osm_value": "bridge" } }, …] }
Try it
Type into the box, or click the map to find the address of a point. Every answer comes live from our servers, with the request you would send.
- Results show here.
– –
Data © OpenStreetMap contributors (ODbL). Map: Protomaps, OpenStreetMap.
Requests to try
Each one runs in the box above. Change it from there: type something else, remove a filter, or switch between the Photon and the Nominatim API.
Search
Addresses, places and postcodes, also while the user types.
Narrow it down
Near a point, inside a box, one kind of place, one language.
Reverse geocoding
From a point on the map to an address, a street or a town.
Nominatim compatible
The same data in the format of the Nominatim API, for code written for it.
Search for your app, on open data
Addresses and places
Addresses with house numbers, streets, towns, postcodes, shops, stations, peaks, huts and everything else with a name in OpenStreetMap. Typing mistakes and missing umlauts are forgiven.
Search as you type
Answers in a fraction of a second, fast enough to suggest places with every keystroke. Partial words match: kapellbr finds the Kapellbrücke.
Reverse geocoding
From a point to the nearest address, the nearest street, or the town, county, state and country it lies in.
Two APIs you know
The Photon API for autocomplete, and the Nominatim API with the same fields as the public Nominatim. geopy, Leaflet geocoders and your own scripts work after changing the base URL.
Keep your results
Store the coordinates in your database and show them on any map. Only the OpenStreetMap credit is required.
Simple counting
One answered request counts once, whatever it returns. Status requests and errors are free. Geocoding has its own allowance and never uses up Overpass requests or map tiles.
Use it from your code
Create a key in your dashboard. For a search box in a web page, use a key of the type "Maps only" and enter your website as an allowed referer: it works for map tiles and geocoding and nothing else.
const API = "https://api.overpass.ch/v1/YOUR_KEY/geocode"; const input = document.querySelector("#search"); let timer, latest = 0; input.addEventListener("input", () => { clearTimeout(timer); timer = setTimeout(async () => { // wait until the user pauses const q = input.value.trim(); if (q.length < 3) return; const id = ++latest; const res = await fetch(`${API}/api?q=${encodeURIComponent(q)}&limit=5`); const { features } = await res.json(); if (id !== latest) return; // a newer answer is on its way for (const f of features) { const p = f.properties; console.log(p.name ?? p.street, p.postcode, p.city, f.geometry.coordinates); } }, 250); });
<!-- Leaflet with leaflet-control-geocoder --> <script> L.Control.geocoder({ geocoder: L.Control.Geocoder.photon({ serviceUrl: "https://api.overpass.ch/v1/YOUR_KEY/geocode/api/", reverseUrl: "https://api.overpass.ch/v1/YOUR_KEY/geocode/reverse/", }), }).addTo(map); </script>
from geopy.geocoders import Nominatim, Photon
KEY = "YOUR_KEY"
nominatim = Nominatim(domain=f"api.overpass.ch/v1/{KEY}/nominatim", user_agent="my-app")
place = nominatim.geocode("Bundesplatz 3, Bern", addressdetails=True)
print(place.address, place.latitude, place.longitude)
photon = Photon(domain=f"api.overpass.ch/v1/{KEY}/geocode", user_agent="my-app")
print(photon.reverse("47.3769, 8.5417"))
# Photon: search, structured search, reverse curl 'https://api.overpass.ch/v1/YOUR_KEY/geocode/api?q=Bundesplatz%203%2C%20Bern&limit=3' curl 'https://api.overpass.ch/v1/YOUR_KEY/geocode/structured?street=Rue%20du%20Rh%C3%B4ne&housenumber=42&city=Gen%C3%A8ve' curl 'https://api.overpass.ch/v1/YOUR_KEY/geocode/reverse?lat=46.9465&lon=7.4443' # Nominatim: search and reverse, format json, jsonv2 or geojson curl 'https://api.overpass.ch/v1/YOUR_KEY/nominatim/search?q=Rheinfall&format=jsonv2' curl 'https://api.overpass.ch/v1/YOUR_KEY/nominatim/reverse?lat=46.9465&lon=7.4443&format=jsonv2'
All endpoints, parameters and error codes are in the documentation.
Geocoding plans
Every account includes 100'000 geocoding requests a month. The Geocoding plans have more. They are a subscription of their own, next to your Overpass plan, and work with the keys you have.
Geocoding Free
- Geocoding requests / month100'000
- Requests / minute300
- No commercial use
- Search, autocomplete and reverse geocoding
- Photon and Nominatim compatible API
- Results may be stored
- OpenStreetMap data, updated weekly
- No e-mail support
Geocoding Small
- Geocoding requests / month1 million
- Requests / minute1'500
- Commercial use
- Search, autocomplete and reverse geocoding
- Photon and Nominatim compatible API
- Results may be stored
- OpenStreetMap data, updated weekly
- E-mail support
Geocoding Medium
- Geocoding requests / month5 million
- Requests / minute3'000
- Commercial use
- Search, autocomplete and reverse geocoding
- Photon and Nominatim compatible API
- Results may be stored
- OpenStreetMap data, updated weekly
- Priority e-mail support
Geocoding Large
- Geocoding requests / month20 million
- Requests / minute6'000
- Commercial use
- Search, autocomplete and reverse geocoding
- Photon and Nominatim compatible API
- Results may be stored
- OpenStreetMap data, updated weekly
- Priority support
1 million requests a month elsewhere
| Provider | For 1 million requests a month | Notes |
|---|---|---|
| overpass.ch Geocoding Small | $25 | OpenStreetMap data, Photon and Nominatim API. Results may be stored. Hosted in the EU. |
| OpenCage | USD 125 | Small: 30,000 requests a day (soft limit). |
| Geoapify | USD 179 | API 50: 50,000 credits a day, one per geocoding request. |
| LocationIQ | USD 200 | Startup: 60,000 requests a day. |
| Mapbox | about USD 675 | 100,000 free, then USD 0.75 per 1,000. These results may not be stored; storable ones cost USD 5 per 1,000. |
Prices as listed by the providers on 24 October 2026. Plans with a daily limit need about 33,000 requests a day for 1 million a month.
What to expect
- House numbers come from OpenStreetMap. Most of Europe has them; in the US, the UK and many countries outside Europe some streets have none, and a search then finds the street.
- There is no address interpolation: a number between two mapped houses is not guessed.
- The data is updated every week.
- Names come in English, German, French, Italian and the local language.
- The Nominatim API has the fields most clients read.
/lookup,/details, the XML format and polygon output are not available, and results are ranked as Photon ranks them.
Questions
Is there a free geocoding API?
Yes. Every account includes 100'000 geocoding requests a month, together with Overpass, elevation and map tiles, for evaluation and for personal, educational and non-profit projects. Commercial use needs a paid plan.
Can I use it instead of the public Nominatim?
Yes. The public Nominatim allows one request per second and no autocomplete. Point your client at https://api.overpass.ch/v1/YOUR_KEY/nominatim instead of https://nominatim.openstreetmap.org; the search and reverse requests and answers keep their format.
How many requests does a search box use?
One per request you send. Wait about 250 ms after the last keystroke before sending, and start at three letters: a typical search then uses 3 to 6 requests.
May I store the results?
Yes, in your own database and for as long as you like. The data comes from OpenStreetMap under the Open Database Licence, so show “© OpenStreetMap contributors” where you use it.
What happens when the allowance is used up?
Requests get HTTP 429 until the next month starts or you upgrade, and we send an e-mail at 80% and at 100%. We never bill overage.
Get your key in under a minute
Free plan, no credit card. The same key works for geocoding, map tiles, Overpass and elevation.