What Is Geocoding?
Geocoding explained — forward (address → coordinate), reverse (coordinate → address), the major providers, match-code confidence, and accuracy by reference data.
By Steve K.. Published . Last updated .
Geocoding is the conversion between addresses and coordinates. Forward geocoding goes address → coordinate (e.g. "1600 Pennsylvania Ave NW" → 38.8977°N, −77.0365°W); reverse geocoding goes coordinate → nearest known address within a search radius.
Geocoding is the bridge between two ways of locating a place: the postal address that humans write on letters and the coordinate that GPS receivers, web maps and spatial databases need to do anything with the location. The Coordinately tools /tools/address-to-coordinates and /tools/coordinates-to-address implement both directions; the underlying coordinates are stored in WGS-84 per /learn/wgs84-explained. Forward and reverse geocoding are foundational to ride-hailing, food delivery, real-estate search, emergency dispatch, and almost every map-based consumer application. This pillar explains how the conversion works, what the major providers offer, the accuracy and confidence model that every production geocoder publishes, and the standardisation steps that turn "1600 Pennsylvania Ave NW" into something the database can match.
Forward vs reverse geocoding
The two directions of geocoding are operationally distinct but use the same underlying reference data.
| Direction | Input | Output | Example query | Common use |
|---|---|---|---|---|
| Forward | Address (or place name) text | One or more candidate coordinates with confidence | "Empire State Building, NYC" → (40.7484, −73.9857), confidence high | Place-search UIs, delivery apps, ride-hailing pickup |
| Reverse | (lat, lon) coordinate (optionally + radius) | Nearest address or addresses | (40.7484, −73.9857) → "20 W 34th St, NYC, NY 10001" | GPS tracking, geofencing labels, "where am I?" |
| Autocomplete | Partial address as user types | Ranked list of completion suggestions | "123 main" → list of "123 Main St" matches by city | Search-box UX, type-ahead |
Forward geocoding is one-to-many in nature: "Springfield" alone matches dozens of cities; even a complete street address can match multiple buildings sharing the address (in different countries, or duplicate ranges within a city). Production geocoders return a ranked list of candidates with confidence scores rather than a single answer.
How forward geocoding works
A modern geocoder runs three stages: address standardisation, candidate lookup against the reference database, and ranking by confidence.
| Stage | What happens | Example |
|---|---|---|
| 1. Normalisation | Capitalise, expand abbreviations, fix common typos, split into components | "1600 Penn ave NW DC" → number=1600, street=Pennsylvania Avenue NW, city=Washington, state=DC, country=USA |
| 2. Tokenisation | Identify which tokens are street numbers, unit, street type, postal code, etc. | Number, predirectional, street name, suffix, postdirectional, unit |
| 3. Candidate lookup | Query the address-coordinate database for matching records | Returns N candidates with raw match scores |
| 4. Ranking | Score candidates by completeness, confidence, language match, population | Best match scored highest; lower-confidence candidates returned for fuzzy queries |
| 5. Coordinate assignment | Use the exact rooftop/parcel coordinate if available; interpolate along street centerline otherwise | Rooftop accurate to <5 m; interpolation accurate to ±20-50 m |
The accuracy ceiling is set by the reference data, not the algorithm. A geocoder backed by parcel-level data (each address mapped to its exact building rooftop) reaches metre-level accuracy — comparable to civilian GPS, per /learn/gps-accuracy-explained. A geocoder falling back to address-range interpolation (the street is divided into linear segments and the address is placed proportionally along the segment) reaches tens-of-metres accuracy. A geocoder with no local data and only place-name information falls back to centroid of the smallest known administrative region — potentially several kilometres off.
Match-code confidence: what the score means
Every production geocoder returns a confidence indicator alongside the
coordinate. Mapbox v6 publishes a match_code.confidence field that
illustrates the convention.
| Confidence | Mapbox criterion | Typical horizontal accuracy | Acceptable for |
|---|---|---|---|
| exact | All address components matched a database record exactly | < 5 m (rooftop / parcel) | Auto-routing without UI confirmation |
| high | All major components match; minor differences (unit, casing) | 5-20 m | Auto-routing with optional UI confirmation |
| medium | Street, city match; number may be approximate (interpolation) | 20-100 m | Show candidate list; require user confirmation |
| low | Partial match; may have fallen back to city/postal centroid | > 100 m, possibly kilometres | Show prominently in UI; do not auto-route |
The Coordinately tools (per architectural decision 19.1) treat anything below "high" as a candidate to surface in the UI rather than auto-select. Auto-selecting a low-confidence match silently can put a ride-share driver at the wrong intersection, a delivery at the wrong building, or an emergency responder at the wrong street — all incidents that have happened in production geocoders without confidence-aware logic.
The major geocoding providers
| Provider | Strengths | Weaknesses | Free tier | Licensing |
|---|---|---|---|---|
| Mapbox Geocoding v6 | Modern API; strong urban global coverage; honest confidence | Response-retention forbidden per ToS; mid-tier in rural areas | 100,000/mo | Per-request commercial |
| Google Maps Geocoding | Best coverage in most regions; rich place-name autocomplete | Most expensive; strict ToS; map-display required for some uses | $200/mo credit (~40K req) | Per-request commercial |
| HERE Geocoding | Strong in Europe and emerging markets; autocomplete-friendly | Smaller ecosystem; less developer-friendly | 250K/mo | Per-request commercial |
| OpenStreetMap Nominatim (community) | Free, open data, no ToS retention limits | Quality varies by region; rate-limited (1 req/sec for nonprofit) | 1 req/sec (nonprofit); paid hosts for higher rates | ODbL (data); MIT (code) |
| MapTiler Geocoding | OSM-based; commercial-grade hosting | Coverage tracks OSM updates | 100K/mo | Per-request commercial |
| Pelias (self-hosted, open source) | Full control; OSM + OpenAddresses + GeoNames + WhosOnFirst | Operations burden; ~50 GB disk for global | Free (self-host) | MIT |
| US Census Geocoder | Free for US; rooftop accuracy via TIGER/Line | US-only; rate limits | Free, public | Public domain |
| SmartyStreets | Best-in-class US address validation | US-focused | 250/mo | Per-request commercial |
The choice depends on coverage area, accuracy needs, licensing constraints (Mapbox response-retention restriction is a hard operational constraint for many use cases), and budget.
Address standardisation: the unsung hero
Most of a geocoder's real work is parsing the input. Human addresses vary widely: capitalisation, abbreviation, punctuation, component order, language — all of which the standardiser must normalise before lookup.
| Raw input | Standardised | Standardisation operations |
|---|---|---|
| "1600 penn ave nw dc" | 1600 Pennsylvania Avenue NW, Washington, DC 20500, USA | Capitalise; expand abbreviations (penn→Pennsylvania, ave→Avenue); infer state/country |
| "123 Main St., Apt. 5" | 123 Main St #5, [implicit city], [implicit country] | Normalise punctuation; normalise unit prefix (Apt.→#); flag missing components |
| "100 Hauptstraße, München" | 100 Hauptstraße, 80331 München, Deutschland | Preserve diacritics; add postal code from city; normalise country name |
| "四川省成都市天府广场" | 天府广场, 锦江区, 成都市, 四川省, 中国 | Tokenise by Chinese administrative hierarchy; normalise component order |
| "GPS: 40.7484,-73.9857" | Coordinate input → reverse-geocode flow | Detect coordinate syntax; bypass forward-geocoder |
The USPS Address Information System (AIS) is the canonical US reference; equivalent national postal authorities exist in most countries. ISO 19112:2019 standardises the concept of "address as geographic identifier" but leaves the actual string format to national standards (which differ widely).
Reverse geocoding: from coordinate to address
Reverse geocoding is conceptually simpler but operationally tricky. The query is "what address is closest to this (lat, lon)?" and the answer depends on what kind of address-objects are stored in the database.
| Reverse-geocode level | Returned object | Use case |
|---|---|---|
| Rooftop | Single building / parcel address | Delivery, ride-share dropoff |
| Address point | Street address (e.g. "20 W 34th St") | Reverse lookup of a GPS fix |
| Street segment | Street range (e.g. "1-99 Main St") | Approximate address from GPS |
| Block | Block face / city block | Coarse "where is this" labelling |
| Neighborhood / district | "Midtown Manhattan" | Search filtering, UI labels |
| City / locality | "New York" | Country-level GPS labelling |
| Administrative region | "NY, USA" | Statistical / census purposes |
| Country | "USA" | Country-level geofencing |
Most production reverse geocoders return multiple levels in a single response, letting the consumer pick the granularity they want. A delivery app picks rooftop or address-point; a weather app picks city; a country-detection feature picks country.
Geocoding accuracy in real numbers
How accurate is geocoding in practice? Independent benchmarks on US urban addresses give the following typical numbers across providers.
| Address type | Typical accuracy (95th percentile) | Why |
|---|---|---|
| Urban rooftop / parcel match | < 10 m | Direct database lookup; building-level data |
| Urban address (interpolated) | 10-30 m | Street centerline + address-range proportional placement |
| Suburban address | 15-50 m | Larger parcels; less dense reference data |
| Rural / unincorporated address | 50 m to several km | Address points often missing; fallback to road centerline or place centroid |
| PO Box | Centroid of postal-code area (km-scale) | No physical address; can only place at postal centroid |
| "City name only" query | Centroid of city (km-scale) | No street info; city-centroid fallback |
| Place-name (POI) query | Variable (depends on POI data quality) | Often a marker placed at the POI's historical centroid |
| International (non-US, non-EU) | Highly variable; rural can be tens of km off | Reference data gaps in emerging markets |
The "geocoding gap" between urban and rural addresses is one of the quieter inequalities in location services: a downtown ride-share in New York or London gets under 10 m accuracy; a delivery to a rural address in rural Africa or parts of India gets several-km accuracy — sometimes none at all, where the address itself isn't in the geocoder's database.
Rate limits and operational considerations
| Concern | Mitigation | Why it matters |
|---|---|---|
| Rate limits | Use a paid tier; cache aggressively where allowed | Free tiers throttle at ~1-100 req/sec; production load needs higher |
| Caching restrictions | Read provider ToS carefully; Mapbox forbids retention | Mapbox per-request SSR is compatible with their ToS; caching is not |
| Ambiguous queries | Return candidates, not single answer | Auto-selecting low-confidence matches causes real-world delivery / dispatch errors |
| Language / locale | Pass user locale to API; some providers default to English | Non-English place names may not match without explicit locale |
| Bounding-box bias | Use viewport-bias parameter when available | "Springfield" alone matches dozens; biasing toward user's view gives better candidates |
| Postal-code only queries | Treat as area, not point | A postal-code centroid can be miles from any actual address |
| Data freshness | Track provider update cadence (typically quarterly) | New buildings, renamed streets, new postal codes take weeks-months to land |
The most common production bug is silently auto-selecting a low-confidence match. The fix is to always check the confidence and surface the candidate list to the user when confidence drops below "high." The /learn/forward-vs-reverse-geocoding support article covers this UX in depth.
Common misconceptions
Related
- Forward vs Reverse Geocoding— The two directions in detail (when shipped)
- How Geocoding Works— The internal pipeline of a geocoding system (when shipped)
- Address to Coordinates— Live forward-geocoding tool
- Coordinates to Address— Live reverse-geocoding tool
- Methodology— How content is sourced and verified
Frequently asked questions
What is geocoding?
Geocoding is the conversion between a human-readable address (or place name) and geographic coordinates (latitude, longitude). It comes in two directions: forward geocoding takes an address like '1600 Pennsylvania Ave, Washington DC' and returns coordinates (~38.8977°N, 77.0365°W); reverse geocoding takes coordinates and returns an address. Both rely on large datasets of address-to-coordinate mappings, typically derived from government sources (TIGER/Line in the US), crowdsourced data (OpenStreetMap), or commercial address layers.
What is the difference between forward and reverse geocoding?
Forward (address → coordinates) is what you do when you search 'pizza near Times Square' or type an address into navigation software. Reverse (coordinates → address) is what you do when you tap a point on a map and the app tells you the nearest street address. Forward is harder because addresses are messy and have many synonyms; reverse is more deterministic because the input is precise. Most geocoding APIs offer both. See /learn/forward-vs-reverse-geocoding for the deeper treatment.
How accurate is geocoding?
Accuracy depends on the input data and the geocoder. A rooftop geocode (the building's footprint is in the database) is typically ~5 m accurate. A parcel geocode (the property lot is known but not the building) is ~10–20 m. A street-segment-interpolated geocode (the address number is interpolated along a street's address range) is ~20–50 m. A ZIP-code-centroid geocode (no street-level data, just the postal code) is ~1–5 km. The accuracy tier is usually reported by the geocoder; high-quality applications use the tier to filter or weight results.
What is TIGER/Line?
Topologically Integrated Geographic Encoding and Referencing (TIGER) is the US Census Bureau's foundational geographic dataset. TIGER/Line files include every named street in the US with its address ranges, every census-defined feature (water, parks, administrative boundaries), and the spatial topology connecting them. It's been published since 1990 and is the primary input to almost every US geocoder, including the commercial ones. The data is freely downloadable from the Census Bureau and updated regularly.
Which geocoding service should I use?
Depends on the use case. Google Maps Platform has the broadest coverage but expensive paid pricing. Mapbox is competitive on pricing with strong global coverage; OpenStreetMap Nominatim is free but lower-quality outside major metros. HERE has strong commercial data; OpenCage aggregates several sources. Self-hosted Nominatim is free but operationally complex. For small-scale or hobby projects, Nominatim's free public service or Mapbox's free tier is the practical answer. For business-critical large-scale applications, Google or HERE with a paid plan provides the highest data quality.
Is geocoding free?
Free tiers exist on most providers. Mapbox: 100,000 requests/month free. Google Maps Geocoding: $200/month credit (~40K requests). HERE: 250K/month free. OpenStreetMap Nominatim: free for nonprofit use at 1 req/sec rate limit. The US Census Geocoder is unlimited and free for US addresses. Self-hosted Nominatim or Pelias is free in license cost but requires server operations. For commercial applications above the free tier, expect $0.50-$5 per 1,000 requests.
How do I geocode an address?
Send the address as a query string to a geocoding API and parse the JSON response for the (lat, lon) coordinate plus a match-code confidence score. Example with Mapbox: GET https://api.mapbox.com/search/geocode/v6/forward?q=1600+Pennsylvania+Ave+NW&access_token=YOUR_TOKEN. The Coordinately /tools/address-to-coordinates tool wraps Mapbox v6 with confidence-aware result display and surfaces multiple candidates when match confidence is low.
Can I cache geocoding results?
Depends on the provider's terms. Mapbox's ToS *forbids* response retention — each query must be fresh, no caching to a database. Google permits ~30-day caching but only for personalised responses tied to a specific user query. HERE allows caching tied to the address that requested it. OpenStreetMap Nominatim allows redistribution under the Open Database License. Always read the provider's ToS before caching; per-request server-side rendering is the safer default.
Sources
- OGC — OGC Geocoding standards · https://www.ogc.org/standards/ · Accessed .
- US Census — TIGER/Line — primary US geocoding dataset · https://www.census.gov/geographies/mapping-files/time-series/geo/tiger-line-file.html · Accessed .
- Mapbox — Mapbox Geocoding API — documentation · https://docs.mapbox.com/api/search/geocoding/ · Accessed .
- Google — Google Maps Platform — Geocoding API · https://developers.google.com/maps/documentation/geocoding/overview · Accessed .
- OSM — OpenStreetMap Nominatim — open-source geocoding · https://nominatim.org/ · Accessed .
Cite this article
APA format:
Steve K. (2026). What Is Geocoding?. Coordinately. https://coordinately.org/learn/what-is-geocoding
BibTeX:
@misc{coordinately_whatisgeocoding_2026,
author = {K., Steve},
title = {What Is Geocoding?},
year = {2026},
publisher = {Coordinately},
url = {https://coordinately.org/learn/what-is-geocoding},
note = {Accessed: 2026-06-05}
}