Nominatim is the open-source geocoder behind openstreetmap.org, and it is excellent software. Since both Nominatim and ExoAPI's geocoding API are built on OpenStreetMap data, the comparison here is not about data quality - it is about who runs the servers. This page lays out what self-hosting actually involves so you can make that call with open eyes.
The free public endpoint at nominatim.openstreetmap.org runs on donated OSM Foundation resources, and its usage policy is strict by necessity:
It is a fantastic resource for prototypes and occasional lookups, and the right thing to do is respect those limits. It is not an option for production application traffic.
Running your own Nominatim removes every usage limit, but the bill arrives in a different currency:
Self-hosting shines at very high volumes (millions of requests per day), for data-sovereignty requirements, or when you need to customize the ranking and import filters. For a country-level extract instead of the full planet, the hardware bar also drops substantially.
ExoAPI runs the OpenStreetMap-based infrastructure - imports, regular data refreshes, scaling, monitoring - and sells the result as a flat-priced API:
| Public Nominatim API | Self-hosted Nominatim | ExoAPI Geocoding | |
|---|---|---|---|
| Cost | Free | Server (~100-300€+/month) + your time | From 9€/month for 1,000 requests/day (~30,000/month) |
| Rate limits | 1 request/second, no bulk | None | Daily quota by plan, up to 50,000/day |
| Bulk geocoding | Forbidden | Yes | Yes, within your daily quota |
| Setup time | None | Days | Minutes |
| Ongoing maintenance | None | Yours | None |
| Storing results | Yes (ODbL attribution) | Yes (ODbL attribution) | Yes (ODbL attribution) |
| Data freshness | Continuous | As often as you replicate | Regular refreshes |
Because everything in this table is OpenStreetMap data under the ODbL, you can store and reuse the results in all three setups - the open-data licence is the same; only the operational model differs.
import { ExoAPI } from "@flower-digital/exoapi-sdk";
const exoapi = new ExoAPI({ apiKey: "<your-api-key>" });
const res = await exoapi.geocoding({
address: "221B Baker Street, London, United Kingdom",
});
console.log(res.lat, res.lon, res.postalCode, res.city);
Start a free 14-day trial (no credit card required) and test it against your own address data.