OpenStreetMap Nominatim drop-in replacement
The public Nominatim instance asks for at most one request per second and no heavy use. osm.mygeocode.com speaks the same search and reverse interface, in JSON, JSONv2 and GeoJSON formats, with a quota you can actually plan around.
Change one hostname
| Original host |
|
|---|---|
| Use instead | osm.mygeocode.com |
| Key parameter | None on the original, and none needed here either: any address gets 2,500 requests a day without one. For credit, packages and a usage history add key=... to the query or send the X-API-Key header. |
curl "https://nominatim.openstreetmap.org/search?q=Brandenburg+Gate+Berlin&format=json&addressdetails=1"curl "https://osm.mygeocode.com/search?q=Brandenburg+Gate+Berlin&format=json&addressdetails=1"Why people move
The public Nominatim server is a shared resource with a strict usage policy. Running your own is a full-time job. This is the same interface without either problem.
Same free allowance, key or not. Requests to osm.mygeocode.com count toward the same 2,500 free requests a day your address, or your key, gets on our own endpoints. Above that, prepaid credit at €0.0001 per request, or €50 a month for an Unlimited key. Signing up takes a name and an email address, and no card.
Endpoints
| Path on osm.mygeocode.com | What it does | Backed by |
|---|---|---|
/search?q=...&format=json | Free-form search | Forward geocoding |
/search?street=...&city=...&country=...&format=json | Structured search | Forward geocoding |
/reverse?lat=...&lon=...&format=json | Reverse | Reverse geocoding |
Example response
This is what the request above returns. Field names, nesting and types follow Nominatim (OSM). Only the data behind them is ours.
[
{
"place_id": 1691459985,
"licence": "Data by My Geocode, https://www.mygeocode.com/terms/",
"osm_type": "node",
"osm_id": 3893494686,
"lat": "52.5162679",
"lon": "13.3776921",
"class": "tourism",
"type": "attraction",
"place_rank": 30,
"importance": 0.9,
"addresstype": "tourism",
"name": "Brandenburg Gate",
"display_name": "Brandenburg Gate, State of Berlin, Germany",
"address": {
"tourism": "Brandenburg Gate",
"state": "State of Berlin",
"country": "Germany",
"country_code": "de"
},
"boundingbox": ["52.5142688", "52.5182711", "13.3756907", "13.3796911"]
}
]Details and differences
Nominatim has no key, and none is needed here either for the first 2,500 requests a day. For credit, packages and a usage history, add key=... to the query or send the X-API-Key header.
Copyright lines, licence names, terms and privacy links in the response are ours rather than the original provider’s. Everything else keeps the original shape.
/searchanswers jsonv2 by default and/reverseanswers XML, matching Nominatim’s own defaults.- The
xml,json,jsonv2,geojsonandgeocodejsonformats are all served. - The licence line and the XML attribution attribute are ours.
- No batch endpoint, because the original has none. For bulk work use
POST /v1/forwardor/v1/reverseonapi.mygeocode.com(up to 100 per call, one request each). extratags=1adds the population and Wikidata id where we know them, andnamedetails=1the place’s names by language, in JSON and in XML.polygon_geojson,polygon_text,polygon_kmlandpolygon_svgreturn the outline of a country, region or city from open administrative boundaries, one per request as Nominatim allows.entrances=1answersnull: no entrance data is held.
If your client depends on a field or behaviour that is not listed here, tell us. Compatibility gaps get fixed quickly because they are usually small.
Other drop-in hosts
- Google Maps
- Bing Maps
- HERE
- Mapbox
- Geocode.Farm
- OpenCage
- LocationIQ
- Geoapify
- TomTom
- MapQuest
- Geocodio
- PositionStack
- ip-api
- ipinfo
- ipstack
- Open-Elevation
How the drop-ins work, the overview, and the JavaScript library drop-ins.