Skip to main content

OpenCage Geocoding Module for Python

A Python module to access the OpenCage Geocoding API.

Build Status / Code Quality / etc

PyPI version Downloads Versions GitHub contributors Build Status Mastodon Follow

Tutorials

You can find a comprehensive tutorial for using this module on the OpenCage site.

There are two brief video tutorials on YouTube, one covering forward geocoding, one covering reverse geocoding.

Working with AI / Agent Skill

There is an Agent Skill for working with the OpenCage Geocoding API which includes a reference file for developing in Python using this module.

Usage

Supports Python 3.9 or newer. Starting opencage version 3.0 depends on asyncio package.

Install the module:

pip install opencage

Load the module:

from opencage.geocoder import OpenCageGeocode

Create an instance of the geocoder module, passing a valid OpenCage Data Geocoder API key as a parameter to the geocoder modules's constructor:

key = 'your-api-key-here'
geocoder = OpenCageGeocode(key)

Pass a string containing the query or address to be geocoded to the modules' geocode method:

query = '82 Clerkenwell Road, London'
results = geocoder.geocode(query)

You can add additional parameters:

results = geocoder.geocode('London', no_annotations=1, language='es')

For example you can use the proximity parameter to provide the geocoder with a hint:

results = geocoder.geocode('London', proximity='42.828576, -81.406643')
print(results[0]['formatted'])
# u'London, ON N6A 3M8, Canada'

Reverse geocoding

Turn a lat/long into an address with the reverse_geocode method:

result = geocoder.reverse_geocode(51.51024, -0.10303)

Sessions

You can reuse your HTTP connection for multiple requests by using a with block. This can help performance when making a lot of requests:

queries = ['82 Clerkenwell Road, London', ...]
with OpenCageGeocode(key) as geocoder:
    # Queries reuse the same HTTP connection
    results = [geocoder.geocode(query) for query in queries]

Asyncronous requests

You can run requests in parallel with the geocode_async and reverse_geocode_async method which have the same parameters and response as their synronous counterparts. You will need at least Python 3.8 and the asyncio and aiohttp packages installed.

async with OpenCageGeocode(key) as geocoder:
    results = await geocoder.geocode_async(address)

Non-SSL API use

If you have trouble accesing the OpenCage API with https, e.g. issues with OpenSSL libraries in your enviroment, then you can set the 'http' protocol instead. Please understand that the connection to the OpenCage API will no longer be encrypted.

geocoder = OpenCageGeocode('your-api-key', 'http')

Exceptions

If anything goes wrong, then an exception will be raised:

  • InvalidInputError for non-unicode query strings
  • NotAuthorizedError if API key is missing, invalid syntax or disabled
  • ForbiddenError API key is blocked or suspended
  • RateLimitExceededError if you go past your rate limit
  • UnknownError if there's some problem with the API (bad results, 500 status code, etc)

Command-line batch geocoding

The opencage CLI now lives in its own package. See opencage-cli — install with pip install opencage-cli.

This software is copyright OpenCage GmbH. Please see LICENSE.txt

Who is OpenCage GmbH?

We run a worldwide geocoding API and geosearch service based on open data. Learn more about us.

We also run Geomob, a series of regular meetups for location based service creators, where we do our best to highlight geoinnovation. If you like geo stuff, you will probably enjoy the Geomob podcast.

Release files for opencage 3.4.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for opencage 3.4.0
File Size Uploaded
opencage-3.4.0.tar.gz 16.4 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for opencage 3.4.0
File Interpreter ABI Platform
opencage-3.4.0-py3-none-any.whl Python 3 none any Details

Total release size: 26.3 kB

Release files / opencage-3.4.0.tar.gz

Download URL opencage-3.4.0.tar.gz
Size 16.4 kB
Tags Source
SHA-256 checksum
How to use checksums
2e73e376e785558ce31b048d46f7a922b9e0af4c01cc51b86d9887e8a7a72165
BLAKE2b-256 checksum
How to use checksums
e176576bd462eb138d74577ffc7ad0157e5432a3933c4381e7fffcd4b63450bf
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.14.5

Release files / opencage-3.4.0-py3-none-any.whl

Download URL opencage-3.4.0-py3-none-any.whl
Size 9.9 kB
Tags Python 3
SHA-256 checksum
How to use checksums
daf30a871295318356bb0c25d792903157395593fe97a2c180be045e8878628d
BLAKE2b-256 checksum
How to use checksums
d3816b5c674ae71d6032c9399e7bb56957a4f5fa182a77a80f83f707346d5b8f
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.14.5

Release history Release notifications | RSS feed

This release

3.4.0 This release

2 release files

3.3.2

2 release files

3.3.1

2 release files

3.3.0

2 release files

3.2.0

2 release files

3.1.0

2 release files

3.0.4

2 release files

3.0.3

2 release files

3.0.2

2 release files

3.0.1

2 release files

3.0.0

2 release files

2.4.0

2 release files

2.3.1

2 release files

2.3.0

2 release files

2.2.0

2 release files

2.1.1

2 release files

2.1.0

2 release files

2.0.0

2 release files

1.2.2

2 release files

1.2.1

2 release files

1.2

2 release files

1.1.6

2 release files

1.1.4

1 release file

1.1.3

1 release file

1.1.2

1.1.1

1 release file

1.1.0

1 release file

1.0.1

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page