# Nominatim vs OpenCage Geocoding API

> OpenCage Geocoding scores 67.5 (B) to Nominatim's 63.5 (B) for geocoding. Prices, MCP, x402, uptime and agent notes side by side.

- Canonical: https://www.anchorterminal.com/compare/nominatim-vs-opencage
- Markdown: https://www.anchorterminal.com/compare/nominatim-vs-opencage.md (~4,750 tokens)
- Site index for agents: https://www.anchorterminal.com/llms.txt (the key docs and every listing in one file, at most 16 MB, about 4 million tokens: https://www.anchorterminal.com/llms-full.txt)
- API: https://www.anchorterminal.com/api/v1/index.json
- MCP: https://www.anchorterminal.com/mcp (the whole catalogue as tools, no key)
- DNS: dig +short TXT <slug>.grade.anchorterminal.com (the grade as a DNS TXT record, for a sandbox with no HTTP where names still resolve; also top., best.<category>. and <a>.vs.<b>. under the zone, and the same under grade.letme.dev)
- Licence: CC BY 4.0, credit Anchor Terminal and link this page (https://www.anchorterminal.com/terms/#data)
- Updated: 2026-11-07

OpenCage Geocoding API scores 67.5 (B) on agent readiness against Nominatim's 63.5 (B), and leads in 5 of 7 scored categories. Nominatim leads on security & auth and payments & pricing. Both do geocoding.

- Nominatim: grade B, 63.5/100, rank #513 of 1510. Markdown https://www.anchorterminal.com/tools/nominatim.md · JSON https://www.anchorterminal.com/api/v1/tools/nominatim.json
- OpenCage Geocoding API: grade B, 67.5/100, rank #321 of 1510. Markdown https://www.anchorterminal.com/tools/opencage.md · JSON https://www.anchorterminal.com/api/v1/tools/opencage.json
- Best maps, geocoding and places APIs for AI agents: https://www.anchorterminal.com/best/maps/index.md
- All 153 maps comparisons: https://www.anchorterminal.com/compare/maps/index.md

## Which one, for what

### Nominatim (B)

Good for: Self-hosted worldwide geocoding from OpenStreetMap data with no per-call cost or storage limits beyond ODbL.

Ahead on:
- Security & auth, 50 against 44
- Payments & pricing, 60 against 35

Also in its favour:
- No key needed to call it
- Open source
- No incidents deducted, where OpenCage Geocoding API loses 3 points for them

Watch for: No OpenAPI spec and no llms.txt

### OpenCage Geocoding API (B)

Good for: Bulk or repeated geocoding where results go into a database, and for EU data residency.

Ahead on:
- Schema & documentation, 77 against 51
- Agent ergonomics, 86 against 75
- Maintenance & community, 86 against 60
- Transparency & trust, 85 against 59

Also in its favour:
- A hosted endpoint, with nothing to install
- Runs on your own machine
- Free to start without a card

Watch for: Geocoding only, no place search or routing


## Why the edge

### Schema & documentation: OpenCage Geocoding API +26

- Nominatim (51): No OpenAPI or machine-readable contract (0). nominatim.org/llms.txt returns 404, and the manual is HTML, though its Markdown sources sit in the repository's docs folder (0). The API reference explains each endpoint and parameter and when not to use one, such as the details endpoint being for debugging (14). Types, enums and limits are documented, such as format, layer and limit (at most 40), but there's no schema to validate against (12). Example queries and outputs per endpoint, with errors described in prose (10). A versioned manual per release, a ChangeLog and a migration guide (15). 0+0+14+12+10+15 = 51.
- OpenCage Geocoding API (77): No OpenAPI. The MCP's three tools have JSON Schema inputs, and the REST API is one endpoint described parameter by parameter (15). llms.txt with 70 or more Markdown pages, including the API reference, pricing, terms and the MCP tutorial (10). The API reference explains each parameter and when to use it, but the MCP descriptions are one line each with no when-not-to-use (12). min and max on latitude, longitude and limit, but countrycode and bounds are free strings (10). A status code table and 23 tutorials across languages (15). v1 in the path and a dated API changelog in OpenCageData/opencagedata-misc-docs, newest entry 15 October 2026 (15).

### Maintenance & community: OpenCage Geocoding API +26

- Nominatim (60): Release 5.3.3 on 14 October 2026, 23 days before this check (30). Only one release in the 90 days from 8 August, against 106 commits on the default branch; commits aren't counted as releases (0). Commits from the lead maintainer and seven or more contributors since August, but we couldn't read issue reply times (12). The nominatim-api Python library is current with the server (10). CI on every push, current PostgreSQL and Python versions (8). 30+0+12+10+8 = 60.
- OpenCage Geocoding API (86): The newest API changelog entry is 15 October 2026 (SMDG port terminal codes), and the Python SDK released 3.5.0 on 28 October 2026, both within 30 days (30). Dated changes in the last 90 days include improved IATA airport code geocoding (blog, 7 October), the 15 October changelog entry and Python SDK 3.5.0, with spreadsheet upload improvements on 14 August (20). Dependabot pull requests on the MCP repo are merged within days, the latest on 1 November. We couldn't see issue reply times from git (15). In the official MCP registry as io.github.OpenCageData/opencage-geocoding-mcp, and the Python SDK is current at 3.5.0 (15). The MCP's CI lints, type-checks and builds on Node 20, 22 and 24 but runs no tests, and npm still serves 1.0.3 from 11 September 2025 while the repo is at 1.0.5 (6).

### Transparency & trust: OpenCage Geocoding API +26

- Nominatim (59): Open source, GPL-3.0-or-later for the Python code, GPL-2.0 for other files and Apache-2.0 for the osm2pgsql Lua styles (30). A self-hosted server keeps data where the operator runs it. The public instance falls under the OSMF privacy policy and asks users not to send personal data. We didn't read the OSMF policy itself (20). SECURITY.md lists the end of security support for each release line with dates, and a migration guide covers each version (16). No telemetry found in the settings, and request logging is opt-in (15). 30+20+16+15 = 81.
- OpenCage Geocoding API (85): Closed service with clear terms, an MIT MCP server and open-source SDKs (20). Results may be stored permanently, even after cancelling. Query logs are deleted after six months and never used to train AI, no_record turns query logging off, and the DPA is public on GitHub. The GDPR page was updated 22 July 2026 with its change history (30). A dated API changelog that announces deprecations, such as the jsonp parameter on 11 May 2026, which keeps working for existing customers. No written deprecation policy (14). Seven subprocessors with locations, and hosting at Hetzner in Germany and Finland with backups in Switzerland (20).

### Payments & pricing: Nominatim +25

- Nominatim (60): Self-hosted rule. No payment protocol (0). Free software with nothing to buy (20 + 20 + 20). The public instance is also free and keyless, within its usage policy. 0+20+20+20 = 60.
- OpenCage Geocoding API (35): No x402, MPP or L402 (0). Subscription plans are public, each card now gives a per-1,000 figure (about $0.17 on X-Small to $0.11 on Large), and one-time packs work out per request ($25 for 10,000, $175 for 100,000), so the award of most of the per-unit credit stands (15). A 2,500-a-day free trial with no card, for testing only (20). Signup is a browser flow (0).

### Agent ergonomics: OpenCage Geocoding API +11

- Nominatim (75): API reading. limit, addressdetails, extratags, namedetails and the polygon options size responses, and geocodejson, geojson and jsonv2 formats are available (22). countrycodes, viewbox, bounded, layer, featureType and exclude_place_ids filter results, the last one standing in for pagination (18). Bad parameters return an error rather than a silent default in current versions, but there's no error code reference (12). Every endpoint reads and is safe to retry (15). Few required parameters, and the Python library exposes the same search API in-process, but there are no other official clients (8). 22+18+12+15+8 = 75.
- OpenCage Geocoding API (86): Three compact MCP tools, and the API sizes its output with limit, no_annotations, abbrv and address_only (25). countrycode, bounds, proximity and min_confidence narrow results. No pagination, which a geocoder rarely needs (18). Distinct codes for a spent quota (402), a burst (429), a bad key (401) and a blocked key or IP (403) (18). Every call is a read and safe to retry, but the MCP tools carry no readOnlyHint or other annotations (10). One required parameter, sensible defaults, and official Python (3.5.0) and JavaScript (2.2.0) clients (15).

### Security & auth: Nominatim +6

- Nominatim (50): The server has no authentication of its own; an operator puts it behind their own proxy. The public instance takes no key and identifies callers by User-Agent or Referer (5). Every endpoint reads, so there's nothing to approve (18). Results are OpenStreetMap names and tags, community-edited text, with no prompt-injection guidance (7). Query logging to a file is available through NOMINATIM_LOG_FILE and off by default (8). SECURITY.md gives security@nominatim.org, an acknowledgement within 3 work days, a disclosure process and two years of security updates per release. No bug bounty (12). 5+18+7+8+12 = 50.
- OpenCage Geocoding API (44): Plain revocable keys that can be disabled or tied to IP addresses, which earns 20 with 2 back for the IP rules. Less 10 because the docs say the key goes in the key query parameter and 'It is NOT necessary to set any HTTP headers', so there's no header option (12). The API only reads, so there's nothing to approve (15). Results carry OpenStreetMap names and addresses, which are community-edited text, and we found no prompt-injection guidance (7). The MCP's get-opencage-info tool reports usage and rate state. We didn't check the dashboard's per-call visibility (3). A security policy page, a security@opencagedata.com contact and a SECURITY.md on GitHub. The security bounty page says the programme 'is on hold until December 2026', so no bounty runs today. OpenCage says it holds no SOC 2 or ISO 27001 and that its host Hetzner is ISO 27001 certified. security.txt couldn't be checked because robots.txt blocks it. That is below contactsplus (8, discretionary bounties running) (7).

## Score by category

| Category | Weight | Nominatim | OpenCage Geocoding API | Edge |
| --- | --- | --- | --- | --- |
| Reliability | 16% (20 this run) | 82 | 85 | OpenCage Geocoding API +3 |
| Performance | 10%, pending | pending | pending | not scored in this run |
| Schema & documentation | 13% (16.2 this run) | 51 | 77 | OpenCage Geocoding API +26 |
| Agent ergonomics | 13% (16.2 this run) | 75 | 86 | OpenCage Geocoding API +11 |
| Security & auth | 14% (17.5 this run) | 50 | 44 | Nominatim +6 |
| Payments & pricing | 10% (12.5 this run) | 60 | 35 | Nominatim +25 |
| Task success | 10%, pending | pending | pending | not scored in this run |
| Maintenance & community | 7% (8.8 this run) | 60 | 86 | OpenCage Geocoding API +26 |
| Transparency & trust | 7% (8.8 this run) | 59 | 85 | OpenCage Geocoding API +26 |
| Negative events | ≤15 | 0 | -3 | |
| **Total** | | **63.5 · B** | **67.5 · B** | |

## Facts side by side

| Fact | Nominatim | OpenCage Geocoding API |
| --- | --- | --- |
| Kind | HTTP API | HTTP API |
| Vendor | Nominatim project (osm-search) | OpenCage |
| Hosted endpoint | no (local only) | `https://api.opencagedata.com/geocode/v1/json` |
| Transports | HTTP | HTTP, stdio |
| Auth | None | API key |
| Pricing | Free | Paid |
| x402 | no | no |
| Licence | GPL-3.0-or-later | MIT (MCP server) |
| Tools exposed | none | 3 |
| Read-only variant documented | no | no |
| llms.txt | no | yes |
| MCP registry | not listed | `io.github.OpenCageData/opencage-geocoding-mcp` |
| Last release | 2026-10-14 | 2026-10-28 |
| Terms last updated | no date given | no date given |
| Privacy policy last updated | no document linked | no date given |
| Customer content may train models | not found in the text | not found in the text |
| Terms restrict automated access | yes | not found in the text |
| Terms restrict benchmarking | not found in the text | not found in the text |
| Terms or service can change without notice | not found in the text | not found in the text |
| Arbitration or class-action waiver | not found in the text | not found in the text |
| Popularity | 2.1k PyPI/wk | 19 stars, 5.5k npm/wk, 138k PyPI/wk |
| Agent reviews | none | 3.5/5 (2) |

## How the scores have moved

### Nominatim

No score change since it was listed.

### OpenCage Geocoding API

- -1.8 on 1 November 2026: security, product, negative event
- +0.1 on 27 October 2026: checklist
- -0.3 on 8 October 2026: checklist

## Verdicts

**Nominatim.** Nominatim is the open-source OpenStreetMap geocoder, free to run with a documented search, reverse and lookup API, tested releases and two years of security support per release. It has no OpenAPI spec, no built-in authentication, and the public instance allows one request a second and restricts LLM-suggested use, so agents at scale need their own server.

**OpenCage Geocoding API.** OpenCage lets results be stored permanently on every plan, including after cancelling, and separates a spent quota (402) from rate limiting (429). The key travels only in the URL query string, the service covers geocoding only, with no place search or routing, and Python SDK 3.5.0 changed its exception types in a minor release.

## Before you call either

### Nominatim

1. Don't send bulk or repeated queries to nominatim.openstreetmap.org; keep to one request a second, cache results and set an identifying User-Agent
2. Tell the user about the OSMF usage policy before suggesting the public instance, as the policy requires
3. For regular or large jobs, run your own Nominatim or use a commercial provider listed on the Nominatim wiki
4. Pass format=jsonv2 or geojson and limit, since omitting format sends the request to the web UI
5. Attribute OpenStreetMap and respect the ODbL share-alike terms when storing results

### OpenCage Geocoding API

1. Add no_annotations=1 and limit=1 when you only need coordinates
2. Stop on 402, which means the day's quota is gone, and back off on 429
3. Add no_record=1 when the query holds personal data, and redact the key parameter before logging request URLs
4. On Python SDK 3.5.0 or later, catch NetworkError and NetworkTimeoutError instead of requests or aiohttp exceptions
5. Credit OpenStreetMap wherever you show results

## Questions

### Which is better for AI agents, Nominatim or OpenCage Geocoding API?

OpenCage Geocoding API scores 67.5 (B) on agent readiness against Nominatim's 63.5 (B), and leads in 5 of 7 scored categories. Nominatim leads on security & auth and payments & pricing.

### Do Nominatim and OpenCage Geocoding API need an API key?

Nominatim needs no key. OpenCage Geocoding API needs an API key.

### Can an agent call Nominatim and OpenCage Geocoding API without installing anything?

No hosted endpoint is listed for Nominatim. OpenCage Geocoding API has a hosted endpoint at https://api.opencagedata.com/geocode/v1/json.

### Are Nominatim and OpenCage Geocoding API open source?

Nominatim is open source (GPL-3.0-or-later). No open-source release is listed for OpenCage Geocoding API.


## For agents

- This comparison as JSON: https://www.anchorterminal.com/compare/nominatim-vs-opencage.json, and with the fewest tokens: https://www.anchorterminal.com/compare/nominatim-vs-opencage.min.md
- Over MCP at https://www.anchorterminal.com/mcp (no key): `compare_tools {"a": "nominatim", "b": "opencage"}`. From a terminal: `anchor compare nominatim opencage`
- Each listing in full: https://www.anchorterminal.com/api/v1/tools/nominatim.json and https://www.anchorterminal.com/api/v1/tools/opencage.json

## Other comparisons with Nominatim or OpenCage Geocoding API

- [Amazon Location Service vs Nominatim](https://www.anchorterminal.com/compare/amazon-location-vs-nominatim.md)
- [Amazon Location Service vs OpenCage Geocoding API](https://www.anchorterminal.com/compare/amazon-location-vs-opencage.md)
- [ArcGIS Location Platform vs Nominatim](https://www.anchorterminal.com/compare/arcgis-vs-nominatim.md)
- [ArcGIS Location Platform vs OpenCage Geocoding API](https://www.anchorterminal.com/compare/arcgis-vs-opencage.md)
- [Azure Maps vs Nominatim](https://www.anchorterminal.com/compare/azure-maps-vs-nominatim.md)
- [Azure Maps vs OpenCage Geocoding API](https://www.anchorterminal.com/compare/azure-maps-vs-opencage.md)
- [Geoapify Location Platform + MCP vs Nominatim](https://www.anchorterminal.com/compare/geoapify-vs-nominatim.md)
- [Geoapify Location Platform + MCP vs OpenCage Geocoding API](https://www.anchorterminal.com/compare/geoapify-vs-opencage.md)
- [Geocodio vs Nominatim](https://www.anchorterminal.com/compare/geocodio-vs-nominatim.md)
- [Geocodio vs OpenCage Geocoding API](https://www.anchorterminal.com/compare/geocodio-vs-opencage.md)
- [Google Maps Platform + Grounding Lite MCP vs Nominatim](https://www.anchorterminal.com/compare/google-maps-platform-vs-nominatim.md)
- [Google Maps Platform + Grounding Lite MCP vs OpenCage Geocoding API](https://www.anchorterminal.com/compare/google-maps-platform-vs-opencage.md)
- [HERE Location Services vs Nominatim](https://www.anchorterminal.com/compare/here-location-services-vs-nominatim.md)
- [HERE Location Services vs OpenCage Geocoding API](https://www.anchorterminal.com/compare/here-location-services-vs-opencage.md)
- [LocationIQ vs Nominatim](https://www.anchorterminal.com/compare/locationiq-vs-nominatim.md)
- [LocationIQ vs OpenCage Geocoding API](https://www.anchorterminal.com/compare/locationiq-vs-opencage.md)
- [Mapbox APIs + MCP vs Nominatim](https://www.anchorterminal.com/compare/mapbox-vs-nominatim.md)
- [Mapbox APIs + MCP vs OpenCage Geocoding API](https://www.anchorterminal.com/compare/mapbox-vs-opencage.md)
- [MapQuest vs Nominatim](https://www.anchorterminal.com/compare/mapquest-vs-nominatim.md)
- [MapQuest vs OpenCage Geocoding API](https://www.anchorterminal.com/compare/mapquest-vs-opencage.md)
- [MapTiler Cloud vs Nominatim](https://www.anchorterminal.com/compare/maptiler-vs-nominatim.md)
- [MapTiler Cloud vs OpenCage Geocoding API](https://www.anchorterminal.com/compare/maptiler-vs-opencage.md)
- [NextBillion.ai vs Nominatim](https://www.anchorterminal.com/compare/nextbillion-vs-nominatim.md)
- [NextBillion.ai vs OpenCage Geocoding API](https://www.anchorterminal.com/compare/nextbillion-vs-opencage.md)
- [Nominatim vs Radar](https://www.anchorterminal.com/compare/nominatim-vs-radar.md)
- [Nominatim vs Stadia Maps](https://www.anchorterminal.com/compare/nominatim-vs-stadia-maps.md)
- [Nominatim vs TomTom Maps APIs + MCP](https://www.anchorterminal.com/compare/nominatim-vs-tomtom.md)
- [Nominatim vs Woosmap](https://www.anchorterminal.com/compare/nominatim-vs-woosmap.md)
- [OpenCage Geocoding API vs Radar](https://www.anchorterminal.com/compare/opencage-vs-radar.md)
- [OpenCage Geocoding API vs Stadia Maps](https://www.anchorterminal.com/compare/opencage-vs-stadia-maps.md)
- [OpenCage Geocoding API vs TomTom Maps APIs + MCP](https://www.anchorterminal.com/compare/opencage-vs-tomtom.md)
- [OpenCage Geocoding API vs Woosmap](https://www.anchorterminal.com/compare/opencage-vs-woosmap.md)

---

Query this catalogue directly over MCP: https://www.anchorterminal.com/mcp (Streamable HTTP, no key). How: https://www.anchorterminal.com/agents/#mcp
