
# OpenCage Documentation

> OpenCage provides a geocoding API for forward and reverse geocoding, powered by open data. Convert addresses to coordinates and coordinates to addresses.

- [Geocoding API Documentation](https://opencagedata.com/api.md)
- [Geosearch / Location Autosuggest](https://opencagedata.com/geosearch.md)

## Pricing

- [OpenCage pricing](https://opencagedata.com/pricing.md)

## General background

- [About OpenCage](https://opencagedata.com/about.md)
- [Frequently Asked Questions](https://opencagedata.com/faq.md)
- [Data Protection / GDPR Compliance](https://opencagedata.com/gdpr.md)
- [Terms and Conditions](https://opencagedata.com/terms.md)
- [Security Policy](https://opencagedata.com/security-policy.md)

## Geocoding Tutorials

- [Bruno](https://opencagedata.com/tutorials/geocode-in-bruno.md)
- [Clay](https://opencagedata.com/tutorials/geocode-in-clay.md)
- [Command Line Interface (CLI)](https://opencagedata.com/tutorials/geocode-commandline.md)
- [Excel](https://opencagedata.com/tutorials/geocode-in-excel.md)
- [Google Docs](https://opencagedata.com/tutorials/geocode-in-googledocs.md)
- [Java](https://opencagedata.com/tutorials/geocode-in-java.md)
- [Javascript](https://opencagedata.com/tutorials/geocode-in-javascript.md)
- [jq](https://opencagedata.com/tutorials/using-jq-to-work-with-API-response.md)
- [jQuery](https://opencagedata.com/tutorials/geocode-in-jquery.md)
- [Insomnia](https://opencagedata.com/tutorials/geocode-in-insomnia.md)
- [Leaflet: Geocoding](https://opencagedata.com/tutorials/geocode-in-leaflet.md)
- [MATLAB](https://opencagedata.com/tutorials/geocode-in-matlab.md)
- [MCP](https://opencagedata.com/tutorials/geocode-inside-an-llm-via-mcp.md)
- [Node.js](https://opencagedata.com/tutorials/geocode-in-nodejs.md)
- [Perl](https://opencagedata.com/tutorials/geocode-in-perl.md)
- [PHP](https://opencagedata.com/tutorials/geocode-in-php.md)
- [Postman](https://opencagedata.com/tutorials/geocode-in-postman.md)
- [PowerShell](https://opencagedata.com/tutorials/geocode-in-powershell.md)
- [Python](https://opencagedata.com/tutorials/geocode-in-python.md)
- [QGIS](https://opencagedata.com/tutorials/geocode-in-qgis.md)
- [R](https://opencagedata.com/tutorials/geocode-in-r.md)
- [Ruby](https://opencagedata.com/tutorials/geocode-in-ruby.md)
- [Rust](https://opencagedata.com/tutorials/geocode-in-rust.md)
- [curl, wget, httpie](https://opencagedata.com/tutorials/geocode-in-shell-scripts.md)
- [Stata](https://opencagedata.com/tutorials/geocode-in-stata.md)
- [Spreadsheet / CSV upload](https://opencagedata.com/tutorials/geocode-a-spreadsheet.md)

## Geocoding SDKs

- [AngularJS](https://www.npmjs.com/package/@digiphilo/opencage-angular)
- [AWS Lambda](https://github.com/tsamaya/aws-lambda-opencage-geocoder)
- [bash](https://github.com/geonot/opencage-shell)
- [C](https://github.com/sgsfak/c-ocgeo)
- [C++](https://github.com/karnival/cpp-opencage-geocoder)
- [Clojure](https://clojars.org/clj-ocgeo)
- [Cloudflare Workers](https://github.com/tsamaya/opencage-geocoder-cfworker)
- [ColdFusion (CFML)](https://github.com/GaryStanton/OpenCageCFC)
- [Dart](https://pub.dartlang.org/packages/opencage_geocoder)
- [Datasette](https://datasette.io/plugins/datasette-enrichments-opencage)
- [Elixir](https://github.com/dsantosmerino/open-cagex)
- [Erlang](https://github.com/uxeon/erlgeo)
- [GatsbyJS](https://github.com/andrewl/gatsby-transformer-opencage-geocoder)
- [Go](https://github.com/alexliesenfeld/opencage)
- [Google Apps Script](https://github.com/geonot/opencage-gas)
- [Haskell](https://hackage.haskell.org/package/GeocoderOpenCage)
- [iOS / Swift](https://github.com/workingDog/OpenCageSwift)
- [Java](https://github.com/OpenCageData/jopencage)
- [Julia](https://github.com/geonot/OpenCage.jl)
- [Kotlin / Android](https://github.com/jillesvangurp/kotlin-opencage-client)
- [Leaflet Maps](https://github.com/opencagedata/leaflet-opencage-geocoding)
- [Lua](https://luarocks.org/modules/nmdguerreiro/lua-opencage-geocoder)
- [MATLAB](https://github.com/OpenCageData/opencage-matlab)
- [MCP](https://github.com/OpenCageData/opencage-geocoding-mcp)
- [.NET](https://github.com/gingemonster/dotnet-opencage-geocode)
- [Neo4j](https://github.com/neo4j-contrib/neo4j-apoc-procedures)
- [Node.js](https://github.com/tsamaya/opencage-api-client)
- [OCaml](https://ocaml.org/p/opencage/latest)
- [OpenLayers](https://github.com/jonataswalker/ol-geocoder)
- [Perl](https://metacpan.org/pod/Geo::Coder::OpenCage)
- [PHP](https://github.com/opencagedata/php-opencage-geocode)
- [PostgreSQL](https://github.com/sgsfak/ocgeo_fdw)
- [PowerShell](https://www.powershellgallery.com/packages/OpenCage/0.2.0)
- [Python](https://pypi.org/project/opencage/)
- [QGIS](https://plugins.qgis.org/plugins/opencage_geocoder/)
- [R](https://docs.ropensci.org/opencage/)
- [Racket](https://pkgs.racket-lang.org/package/opencage)
- [Raku](https://github.com/tadzik/Geo-Coder-OpenCage)
- [ReactJS](https://github.com/tsamaya/react-leaflet-opencage)
- [React Native](https://github.com/tsamaya/opencage-react-native)
- [Ruby](https://github.com/opencagedata/ruby-opencage-geocoder)
- [Rust](https://crates.io/crates/geocoding)
- [Scala](https://github.com/opencagedata/scala-opencage-geocoder)
- [SQLite](https://github.com/eyeseast/geocode-sqlite)
- [Stata](https://econpapers.repec.org/software/bocbocode/S458155.htm)
- [Svelte](https://www.npmjs.com/package/@digiphilo/opencage-svelte)
- [Typescript](https://github.com/tsamaya/opencage-react-native)
- [Vue](https://www.npmjs.com/package/@digiphilo/opencage-vue)
- [Zig](https://github.com/geonot/zig-opencage)

## Geocoding Guides

- [Geocoding vs Geosearch](https://opencagedata.com/guides/the-difference-between-geocoding-and-geosearch.md)
- [What is Geosearch?](https://opencagedata.com/guides/what-is-geosearch.md)
- [Why is geosearch needed?](https://opencagedata.com/guides/why-is-geosearch-needed.md)
- [Consumer expectations for location search](https://opencagedata.com/guides/geosearch-consumer-expectations.md)
- [Geosearch: Technical Considerations](https://opencagedata.com/guides/geosearch-technical-considerations.md)
- [Comparing and testing geocoding services](https://opencagedata.com/guides/how-to-compare-and-test-geocoding-services.md)
- [Formatting your geocoding query](https://opencagedata.com/guides/how-to-format-your-geocoding-query.md)
- [Speed up your geocoding](https://opencagedata.com/guides/how-to-geocode-more-quickly.md)
- [Geocoding large datasets](https://opencagedata.com/guides/how-to-geocode-large-datasets.md)
- [Geocoding accuracy](https://opencagedata.com/guides/how-to-think-about-geocoding-accuracy.md)
- [Using OpenCage together with other geocoders](https://opencagedata.com/guides/using-opencage-together-with-other-geocoding-services.md)
- [Migrating from Google Maps](https://opencagedata.com/guides/how-to-switch-from-google-maps-geocoding.md)
- [Migrating from Nominatim](https://opencagedata.com/guides/how-to-switch-from-nominatim.md)
- [Limit API results to a certain country or region](https://opencagedata.com/guides/how-to-limit-geocoding-results.md)
- [Geocoding and postal codes](https://opencagedata.com/guides/how-to-think-about-postcodes-and-geocoding.md)
- [Permanent location identifiers](https://opencagedata.com/guides/permanent-location-ids.md)
- [Formatting Addresses](https://opencagedata.com/guides/formatting-addresses.md)
- [Formatting your spreadsheet](https://opencagedata.com/guides/how-to-prepare-your-spreadsheet-for-geocoding.md)
- [Putting results on a map](https://opencagedata.com/guides/how-to-display-geocoding-results-on-a-map.md)
- [Browser Geolocation](https://opencagedata.com/guides/how-to-determine-user-location-via-browser-geolocation.md)
- [IP Geolocation](https://opencagedata.com/guides/how-ip-geolocation-differs-from-geocoding.md)
- [Show an imprecise location](https://opencagedata.com/guides/how-to-preserve-privacy-by-showing-only-an-imprecise-location.md)
- [Writing an SDK or integration for the OpenCage Geocoding API](https://opencagedata.com/guides/how-to-write-an-sdk-for-the-opencage-api.md)
- [Convert image GPS coordinates into location information](https://opencagedata.com/guides/how-to-geocode-images.md)
- [Convert coordinates to country](https://opencagedata.com/guides/how-to-determine-which-country-coordinates-are-in.md)
- [Convert locations to NUTS codes](https://opencagedata.com/guides/how-to-find-the-nuts-codes-for-an-address-or-coordinates.md)
- [Convert locations to time zone](https://opencagedata.com/guides/how-to-find-the-time-zone-for-an-address-or-coordinates.md)
- [Determine the ISO codes for a location](https://opencagedata.com/guides/how-to-determine-the-iso-codes-for-a-location.md)
- [Determine the county for an address](https://opencagedata.com/guides/how-to-determine-which-county-an-address-is-in.md)
- [Get the information for a UN/LOCODE](https://opencagedata.com/guides/lookup-a-unlocode.md)
- [Replacing your geocoding API key](https://opencagedata.com/guides/how-to-create-a-new-api-key.md)
- [Protect your API key](https://opencagedata.com/guides/how-to-protect-your-api-key.md)
