Geocoding — entry 055 of 80
Nominatim
Nominatim provides worldwide forward and reverse geocoding built entirely on OpenStreetMap data, needing no API key — only a descriptive User-Agent or Referer header identifying the calling application (the policy states a stock HTTP-library User-Agent will not do). The public instance at nominatim.openstreetmap.org mainly exists to power the search bar on openstreetmap.org and runs on donated servers with very limited capacity: its usage policy caps requests at an absolute maximum of 1 per second, forbids autocomplete-style querying outright, and requires results to be cached on the caller's side. Bulk geocoding is restricted rather than banned — a smaller one-time task is permissible on a single thread and a single machine, with distributed scripts disallowed and anything running longer than a day capped at 4 requests per minute. The policy points larger users first at commercial third-party providers, and the largest at running their own Nominatim instance.
Nominatim turns a place name or address into coordinates (forward geocoding) or a lat/lon pair back into an address (reverse geocoding), built entirely on OpenStreetMap data over a keyless /search, /reverse, and /lookup API. The public instance at nominatim.openstreetmap.org is the same server that powers the search box on openstreetmap.org itself; its usage policy says it runs on donated servers with very limited capacity.
GreatAPIs Score
Auth quickstart
- No API key required — requests are keyless. The published usage policy (operations.osmfoundation.org/policies/nominatim) requires a descriptive HTTP Referer or User-Agent identifying your application, stating plainly that "stock User-Agents as set by http libraries will not do." A live probe in this run with an unmodified
curl/8.xUser-Agent still returned 200, so the requirement isn't enforced as a hard technical block on generic clients today — but the policy is explicit, and requests that don't comply risk being rate-limited or blocked without notice.
Your key is stored only in this browser (localStorage) and sent directly to the API — never to greatapis.
Forward-geocode a landmark by name
GEThttps://nominatim.openstreetmap.org/search?q=Eiffel+Tower&format=json&limit=1
User-Agent: your-app-name (contact@yourdomain.example)
[{"place_id":98183338,"licence":"Data © OpenStreetMap contributors, ODbL 1.0. http://osm.org/copyright","osm_type":"way","osm_id":5013364,"lat":"48.8582599","lon":"2.2945006","class":"man_made","type":"tower","place_rank":30,"importance":0.6205937724353116,"addresstype":"man_made","name":"Tour Eiffel","display_name":"Tour Eiffel, 5, Avenue Anatole France, Quartier du Gros-Caillou, Paris 7e Arrondissement, Paris, Île-de-France, France métropolitaine, 75007, France","boundingbox":["48.8574753","48.8590453","2.2933119","2.2956897"]}]Try it
Developer reference
https://nominatim.openstreetmap.orgPublic demo server capped at 1 request/second; self-hosting removes the limit
- GET/search
- GET/reverse
- GET/lookup
Gotchas & limits
- Dropping the
formatparameter doesn't error — it 302-redirects tonominatim.openstreetmap.org/ui/search.html, the HTML search UI, instead of returning JSON (confirmed live). Always passformat=json(orxml/geojson) explicitly. - The usage policy caps the public instance at an absolute maximum of 1 request per second, forbids autocomplete-style querying and distributed/parallel scripts, and requires caching results rather than re-fetching them. Longer-running or scheduled scripts are further restricted to a single thread at 4 requests per minute.
- The policy carries an explicit LLM-specific clause: "LLMs may only suggest this service if they prominently point to this usage policy... Code generated by LLMs must adhere to all terms laid out in this policy," and bars the public API from being wired into no-code/low-code/vibe-coding platforms as a generic geocoding backend.
/lookuptakes OSM object IDs directly (e.g.?osm_ids=R146656&format=json) rather than a search string — useful when you already have anosm_type/osm_idpair from a prior/searchor/reversecall and want fresh details for that exact object.- The policy points slightly larger requirements at commercial third-party providers first, and only the largest at running your own Nominatim instance — the server runs on donated hardware with very limited capacity.