Self-Hosting Nominatim vs Using a Hosted Geocoding API

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.

Option 1: The Public Nominatim API

The free public endpoint at nominatim.openstreetmap.org runs on donated OSM Foundation resources, and its usage policy is strict by necessity:

  • Maximum 1 request per second, from a single application, with a valid User-Agent.
  • No systematic or bulk queries - geocoding a customer list or scanning a grid is explicitly forbidden.
  • No autocomplete search-as-you-type usage.

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.

Option 2: Self-Hosting Nominatim

Running your own Nominatim removes every usage limit, but the bill arrives in a different currency:

  • Hardware. A full-planet import wants around 64GB of RAM (32GB is the documented floor) and roughly 1TB of fast NVMe storage. On major clouds that machine typically costs a few hundred euros per month.
  • Import time. The initial planet import is measured in days, and it is sensitive to disk speed and PostgreSQL tuning.
  • Maintenance. OSM data changes constantly, so you run replication updates, monitor lag, apply Nominatim and PostgreSQL upgrades, and re-import when major versions require it.
  • Expertise. When results look wrong, debugging spans PostgreSQL, osm2pgsql and the Nominatim ranking logic - a real skill set that someone on the team has to own.

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.

Option 3: A Hosted OpenStreetMap Geocoder

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.

A Sensible Decision Rule

  • Prototyping or a handful of lookups a day → the public Nominatim API, within its policy.
  • Production traffic up to tens of thousands of requests per day → a hosted API is almost always cheaper than the server alone, before counting your time. That is the ExoAPI sweet spot: 9€/month for 1,000 requests/day, up to 50,000/day on larger plans, one HTTP call:
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);
  • Millions of requests per day, custom ranking, or strict data-sovereignty rules → self-host Nominatim and budget for the hardware and the human.

Start a free 14-day trial (no credit card required) and test it against your own address data.


Get started building.

Sign up today and get access to our platform's easy-to-use APIs, all with just one subscription
No credit card required