[{"data":1,"prerenderedAt":726},["ShallowReactive",2],{"footer-learn-links":3,"site-prefooter-cta":16,"learn-\u002Flearn\u002Fbest-geocoding-api\u002F":24,"related-learn-\u002Flearn\u002Fbest-geocoding-api\u002F":699,"learn-org-author":715},[4,7,10,13],{"title":5,"path":6},"What Is the Best Geocoding API?","\u002Flearn\u002Fbest-geocoding-api",{"title":8,"path":9},"What Is the Best Routing API?","\u002Flearn\u002Fbest-routing-api",{"title":11,"path":12},"What Is a GDPR-Compliant Mapping API?","\u002Flearn\u002Fgdpr-compliant-mapping-api",{"title":14,"path":15},"What Is Satellite Imagery Resolution?","\u002Flearn\u002Fsatellite-imagery-resolution",{"id":17,"extension":18,"heading":19,"meta":20,"stem":21,"text":22,"__hash__":23},"site\u002Fsite\u002Fprefooter-cta.yml","yml","Business Outcomes That Fuel Your Growth",{},"site\u002Fprefooter-cta","With Stadia Maps, you build the solutions that matter. Logistics platforms provide accurate ETAs, fleet management apps reduce fuel costs, and emergency dispatch systems improve response times.","XztWiZDFyAC0XCoeYLLQrcyaVmP8uvGWALRS354c9I4",{"id":25,"title":5,"author":26,"body":27,"category":595,"description":683,"extension":684,"head":685,"image":687,"imageAlt":688,"keywords":689,"meta":690,"modified":689,"navigation":691,"path":6,"published":692,"rawbody":693,"schemaOrg":689,"seo":694,"stem":695,"term":696,"termDescription":697,"__hash__":698},"learn\u002Flearn\u002Fbest-geocoding-api.md","Stadia Maps Team",{"type":28,"value":29,"toc":666},"minimark",[30,34,38,41,53,58,77,81,84,96,102,108,114,120,126,130,191,203,206,213,217,226,283,291,297,307,311,314,395,403,407,410,426,438,450,456,460,463,466,486,489,498,502,508,514,520,529,540,546,550,554,559,562,592,596,662],[31,32,5],"h1",{"id":33},"what-is-the-best-geocoding-api",[35,36,37],"p",{},"There is no single best geocoding API. The right one depends on whether you need to store results, how much you geocode at once, which countries you operate in, and what your privacy obligations are.",[35,39,40],{},"That framing matters because most comparisons stop at accuracy and price per request. Those are rarely what breaks a project. The things that break projects are storage restrictions discovered at scale, batch limits that turn a one-hour job into a three-day job, display terms that lock your results to one vendor's map, and data you cannot inspect or correct.",[35,42,43,44,52],{},"This page walks through the dimensions worth evaluating, and what the ",[45,46,51],"a",{"href":47,"rel":48,"target":50},"https:\u002F\u002Fstadiamaps.com\u002Fproducts\u002Fgeocoding-search\u002Fgeocoding\u002F",[49],"external","_blank","Stadia Maps Geocoding API"," does on each.",[54,55,57],"h2",{"id":56},"key-takeaways","Key Takeaways",[59,60,61,65,68,71,74],"ul",{},[62,63,64],"li",{},"Storage rights are easy to overlook and expensive to discover late. Per Stadia Maps' published analysis, Mapbox, AWS, and ESRI often charge 6x to 8x the standard query price to store a result.",[62,66,67],{},"Batch capacity varies widely. Google lacks a dedicated bulk geocoding API, Mapbox limits requests to 1,000 queries, and Stadia Maps processes 5,000 per request.",[62,69,70],{},"Data provenance is inspectable on some providers and opaque on others. Stadia Maps documents five open sources and returns fix-it URLs so records can be corrected.",[62,72,73],{},"Display restrictions matter. Google generally prevents displaying its geocoding results on another provider's map.",[62,75,76],{},"Stadia Maps geocoding data refreshes at least monthly, draws on a dataset of over one billion locations globally, and does not track end users.",[54,78,80],{"id":79},"what-should-you-evaluate-in-a-geocoding-api","What Should You Evaluate in a Geocoding API?",[35,82,83],{},"Six dimensions, roughly in order of how often they cause problems after launch.",[35,85,86,90,91,95],{},[87,88,89],"strong",{},"1. Storage and caching rights."," Can you write a returned coordinate to your database and keep it? This is a licensing question, not a technical one, and it is where cost models break. On Stadia Maps, temporary storage is allowed on all plans and permanent storage requires Standard or above with no surcharge. The ",[45,92,94],{"href":93},"\u002Fterms-of-service\u002F","Terms of Service"," contain the full terms.",[35,97,98,101],{},[87,99,100],{},"2. Batch capacity."," If you need to geocode a hundred thousand addresses, the per-request limit determines whether that is a script that runs over lunch or a pipeline you have to babysit.",[35,103,104,107],{},[87,105,106],{},"3. Data sources and transparency."," Where do the addresses come from, how often are they refreshed, and can you correct an error you find?",[35,109,110,113],{},[87,111,112],{},"4. Display and portability terms."," Some providers restrict where their results can be shown. That constrains your architecture later, not now.",[35,115,116,119],{},[87,117,118],{},"5. International accuracy."," Address formats, scripts, and data density vary enormously by country. A provider that is excellent in North America may be weak where you are expanding next.",[35,121,122,125],{},[87,123,124],{},"6. Privacy posture."," Whether the provider collects end-user data, and whether that is compatible with your compliance obligations.",[54,127,129],{"id":128},"geocoding-api-comparison-storage-batch-and-portability","Geocoding API Comparison: Storage, Batch, and Portability",[131,132,133,148],"table",{},[134,135,136],"thead",{},[137,138,139,142,145],"tr",{},[140,141],"th",{},[140,143,144],{},"Storing results long-term",[140,146,147],{},"Bulk batch limit",[149,150,151,165,178],"tbody",{},[137,152,153,159,162],{},[154,155,156],"td",{},[87,157,158],{},"Stadia Maps",[154,160,161],{},"Included on Standard and above, no surcharge",[154,163,164],{},"5,000 per request",[137,166,167,172,175],{},[154,168,169],{},[87,170,171],{},"Google",[154,173,174],{},"Generally forbidden outside a specific end-user session",[154,176,177],{},"No dedicated bulk API",[137,179,180,185,188],{},[154,181,182],{},[87,183,184],{},"Mapbox",[154,186,187],{},"Often 6x to 8x standard query cost",[154,189,190],{},"1,000 per request",[35,192,193,194,198,199,202],{},"The competitor figures come from Stadia Maps' published analysis in ",[45,195,197],{"href":196},"\u002Fblog\u002Fwhy-is-your-geocoding-bill-higher-than-it-should-be\u002F","The Hidden Cost of Search",", which places AWS and ESRI in the same 6x to 8x storage band as Mapbox. The Stadia Maps storage terms are in ",[45,200,201],{"href":93},"Section 8 of the Terms of Service",", which requires an active Standard, Professional, or Enterprise subscription to permanently store geocoding results.",[35,204,205],{},"Provider terms change, and each vendor's are their own. Verify against current documentation before deciding.",[35,207,208,209,212],{},"One more term worth checking that is harder to tabulate: ",[87,210,211],{},"display rights",". The same analysis notes that Google often prevents displaying its geocoding results on a map from another provider. Storage rights and display rights are separate clauses, and either one can create lock-in.",[54,214,216],{"id":215},"where-does-geocoding-data-come-from","Where Does Geocoding Data Come From?",[35,218,219,220,225],{},"A geocoder is only as good as the data underneath it, and most providers treat that data as a trade secret. The ",[45,221,224],{"href":222,"rel":223,"target":50},"https:\u002F\u002Fdocs.stadiamaps.com\u002Fgeocoding-search-autocomplete\u002Fsources\u002F",[49],"Stadia Maps sources documentation"," lists all five, and every result carries attribution back to its origin:",[59,227,228,238,253,263,273],{},[62,229,230,237],{},[87,231,232],{},[45,233,236],{"href":234,"rel":235,"target":50},"https:\u002F\u002Fwww.openstreetmap.org\u002F",[49],"OpenStreetMap"," for global roads, addresses, and points of interest",[62,239,240,247,248,252],{},[87,241,242],{},[45,243,246],{"href":244,"rel":245,"target":50},"https:\u002F\u002Fopenaddresses.io\u002F",[49],"OpenAddresses"," for authoritative government address data. Stadia Maps is a ",[45,249,251],{"href":250},"\u002Fattribution\u002F","corporate sponsor"," of the project",[62,254,255,262],{},[87,256,257],{},[45,258,261],{"href":259,"rel":260,"target":50},"https:\u002F\u002Fwhosonfirst.org\u002F",[49],"Who's On First"," for the administrative place hierarchy",[62,264,265,272],{},[87,266,267],{},[45,268,271],{"href":269,"rel":270,"target":50},"https:\u002F\u002Fwww.geonames.org\u002F",[49],"GeoNames"," for populated places and natural features",[62,274,275,282],{},[87,276,277],{},[45,278,281],{"href":279,"rel":280,"target":50},"https:\u002F\u002Fdocs.foursquare.com\u002Fdata-products\u002Fdocs\u002Ffsq-places-open-source",[49],"Foursquare Open Source Places"," for business and venue data",[35,284,285,286,290],{},"Two consequences of building on open data, both from ",[45,287,289],{"href":288},"\u002Fblog\u002Fopen-data-geocoding-global-search\u002F","The Open Data Superpower",":",[35,292,293,296],{},[87,294,295],{},"You can fix errors."," Stadia Maps includes \"fix-it\" URLs for many records directly in API responses, pointing to datasets that accept contributions. Reporting a bad address to a proprietary provider is, in that post's words, \"shouting into a void.\"",[35,298,299,302,303,306],{},[87,300,301],{},"Updates are continuous rather than periodic."," Legacy providers rely on data captured during periodic drive-bys, which can remain unverified for years. Stadia Maps refreshes geocoding data ",[87,304,305],{},"at least monthly",".",[54,308,310],{"id":309},"which-geocoding-endpoint-do-you-actually-need","Which Geocoding Endpoint Do You Actually Need?",[35,312,313],{},"\"Geocoding API\" covers several distinct operations. Picking the wrong one produces bad results or unnecessary cost.",[59,315,316,326,340,371,385],{},[62,317,318,325],{},[87,319,320],{},[45,321,324],{"href":322,"rel":323,"target":50},"https:\u002F\u002Fdocs.stadiamaps.com\u002Fgeocoding-search-autocomplete\u002Fsearch\u002F",[49],"Forward geocoding"," turns a complete address or place name into coordinates. Best accuracy on complete input, and it uses approximation to locate addresses that are not mapped directly.",[62,327,328,335,336],{},[87,329,330],{},[45,331,334],{"href":332,"rel":333,"target":50},"https:\u002F\u002Fdocs.stadiamaps.com\u002Fgeocoding-search-autocomplete\u002Fautocomplete\u002F",[49],"Autocomplete search"," is tuned for speed on partial input. Use it while the user is typing, then hand off to forward geocoding when they finish. See ",[45,337,339],{"href":338},"\u002Flearn\u002Faddress-autocomplete\u002F","What Is Address Autocomplete?",[62,341,342,349,350,354,355,354,358,354,361,354,364,354,367,370],{},[87,343,344],{},[45,345,348],{"href":346,"rel":347,"target":50},"https:\u002F\u002Fdocs.stadiamaps.com\u002Fgeocoding-search-autocomplete\u002Fstructured-search\u002F",[49],"Structured geocoding"," takes pre-parsed components (",[351,352,353],"code",{},"house_number",", ",[351,356,357],{},"street",[351,359,360],{},"city",[351,362,363],{},"region",[351,365,366],{},"postalcode",[351,368,369],{},"country","). Removes string-parsing guesswork, and improves international accuracy.",[62,372,373,380,381],{},[87,374,375],{},[45,376,379],{"href":377,"rel":378,"target":50},"https:\u002F\u002Fdocs.stadiamaps.com\u002Fgeocoding-search-autocomplete\u002Freverse-search\u002F",[49],"Reverse geocoding"," turns coordinates into a place. See ",[45,382,384],{"href":383},"\u002Flearn\u002Freverse-geocoding\u002F","What Is Reverse Geocoding?",[62,386,387,394],{},[87,388,389],{},[45,390,393],{"href":391,"rel":392,"target":50},"https:\u002F\u002Fdocs.stadiamaps.com\u002Fgeocoding-search-autocomplete\u002Fbulk-geocoding-search\u002F",[49],"Bulk geocoding"," handles up to 5,000 queries in one request for pipeline work.",[35,396,397,398,402],{},"On the ",[45,399,401],{"href":400},"\u002Fpricing\u002F","Stadia Maps credit system",", forward, structured, and reverse geocoding each cost 20 credits per request, and autocomplete v2 costs 1 credit per request. Bulk geocoding is billed per query inside the batch at the same rate as an individual request, so batching costs no more than calling the endpoints directly.",[54,404,406],{"id":405},"how-do-you-test-a-geocoding-api","How Do You Test a Geocoding API?",[35,408,409],{},"The fastest way to compare providers is to run your own hardest addresses through each. Here is a forward geocoding request against Stadia Maps:",[411,412,417],"pre",{"className":413,"code":414,"language":415,"meta":416,"style":416},"language-http shiki shiki-themes github-light","GET https:\u002F\u002Fapi.stadiamaps.com\u002Fgeocoding\u002Fv1\u002Fsearch?text=P%C3%B5hja+pst+27\n","http","",[351,418,419],{"__ignoreMap":416},[420,421,424],"span",{"class":422,"line":423},"line",1,[420,425,414],{},[35,427,428,429,432,433,437],{},"The response is a GeoJSON ",[351,430,431],{},"FeatureCollection",". Each feature carries coordinates, parsed address components, the matched layer, a confidence score, and source attribution. That last part matters for evaluation: you can see ",[434,435,436],"em",{},"which"," dataset produced the answer.",[35,439,440,441,445,446,449],{},"For runnable examples in TypeScript, Python, Kotlin, Swift, PHP, or cURL, see the ",[45,442,444],{"href":322,"rel":443,"target":50},[49],"forward geocoding documentation",". An EU endpoint is available at ",[351,447,448],{},"api-eu.stadiamaps.com"," to keep traffic within the EU.",[35,451,452,455],{},[87,453,454],{},"Build your test set carefully."," Do not evaluate on well-formed addresses in major US cities, where every provider performs well. Test the cases that will actually hurt: apartment and unit numbers, addresses in the countries you are expanding into, non-Latin scripts, new construction, rural routes, and deliberately misspelled input.",[54,457,459],{"id":458},"how-good-is-international-geocoding","How Good Is International Geocoding?",[35,461,462],{},"It varies by provider and by country, and any vendor claiming uniform global accuracy is overselling.",[35,464,465],{},"What Stadia Maps documents on this:",[59,467,468,474,480],{},[62,469,470,473],{},[87,471,472],{},"Multilingual search"," across all primary data layers, including administrative areas and points of interest. Searching a Korean city by its English name is the kind of case this is built to handle.",[62,475,476,479],{},[87,477,478],{},"Localized address templates"," developed through an open-source collaboration, so results respect how addresses are actually written in each country.",[62,481,482,485],{},[87,483,484],{},"A stated limitation."," Per The Open Data Superpower, Stadia Maps is \"continuing to refine partial matches in specific East Asian scripts.\"",[35,487,488],{},"That last item is the kind of thing worth looking for in any vendor's documentation. A provider willing to name where it is still improving is easier to plan around than one that claims everything works.",[35,490,491,492,497],{},"Read the ",[45,493,496],{"href":494,"rel":495,"target":50},"https:\u002F\u002Fdocs.stadiamaps.com\u002Fgeocoding-search-autocomplete\u002Fdetermining-result-quality\u002F",[49],"Determining Result Quality"," documentation before you build. Confidence scores and layer types are how you detect a weak match in production rather than shipping it to a user.",[54,499,501],{"id":500},"when-is-stadia-maps-the-right-choice","When Is Stadia Maps the Right Choice?",[35,503,504,507],{},[87,505,506],{},"You are geocoding once and storing the result."," Permanent storage is included on Standard and above with no surcharge and no per-user re-validation. If your data is stable and access is repeated, this is a significant cost difference between providers.",[35,509,510,513],{},[87,511,512],{},"You are processing addresses in bulk."," 5,000 queries per request, with no extra credits or fees for batch mode.",[35,515,516,519],{},[87,517,518],{},"You need to inspect or correct the data."," Five documented sources, per-result attribution, and fix-it URLs in responses.",[35,521,522,525,526],{},[87,523,524],{},"You have privacy or residency requirements."," No end-user tracking, query-based rather than session-based search, and an EU endpoint for keeping traffic in-region. See ",[45,527,11],{"href":528},"\u002Flearn\u002Fgdpr-compliant-mapping-api\u002F",[35,530,531,534,535,539],{},[87,532,533],{},"You need to self-host."," The geocoding engine is available for ",[45,536,538],{"href":537},"\u002Fproducts\u002Fon-prem-embedded\u002F","on-premises deployment"," for teams with strict security or latency requirements.",[35,541,542,545],{},[87,543,544],{},"Where you should look elsewhere:"," if your application depends on a proprietary business listing dataset that only one vendor has, no amount of open data will replace it. Evaluate on your own hardest addresses before committing either way.",[547,548],"faq-section",{":faqs":549},"[{\"question\":\"What is a geocoding API?\",\"answer\":\"A geocoding API is an HTTP service that converts addresses and place names into geographic coordinates, and converts coordinates back into places. Most providers offer several variants: forward geocoding for complete input, autocomplete for partial input, structured geocoding for pre-parsed address components, reverse geocoding for coordinates, and bulk endpoints for batch processing.\"},{\"question\":\"What should you evaluate when choosing a geocoding API?\",\"answer\":\"Storage and caching rights, batch capacity, data source transparency and refresh frequency, display and portability terms, international accuracy in the countries you operate in, and privacy posture. Accuracy and price per request matter, but storage terms and batch limits are what most often cause problems after launch.\"},{\"question\":\"Which geocoding API allows you to store results?\",\"answer\":\"Stadia Maps includes permanent storage on Standard, Professional, and Enterprise plans with no surcharge. Per Stadia Maps' published analysis, Mapbox, AWS, and ESRI often charge 6x to 8x the standard query cost to store a result, and Google generally forbids caching outside a specific end-user session.\"},{\"question\":\"Which geocoding API has the highest batch limit?\",\"answer\":\"Stadia Maps processes 5,000 queries per bulk request with no extra credits or fees. Per Stadia Maps' analysis, Mapbox limits bulk requests to 1,000 queries and Google lacks a dedicated bulk geocoding API.\"},{\"question\":\"What data sources does Stadia Maps geocoding use?\",\"answer\":\"Five documented open sources: OpenStreetMap for global roads and points of interest, OpenAddresses for authoritative government address data, Who's On First for administrative places, GeoNames for populated places and natural features, and Foursquare Open Source Places for businesses and venues. Every result carries attribution back to its source.\"},{\"question\":\"How often is geocoding data updated?\",\"answer\":\"Stadia Maps refreshes its geocoding data at least monthly to stay aligned with its map and routing services. Because the underlying data is open, Stadia Maps also includes fix-it URLs in many API responses, pointing to datasets that accept community corrections.\"},{\"question\":\"How much does geocoding cost on Stadia Maps?\",\"answer\":\"Forward, structured, and reverse geocoding each cost 20 credits per request on the unified Stadia Maps credit pool, and autocomplete v2 costs 1 credit per request. Bulk geocoding is billed per query inside the batch at the same rate as an individual request, with no extra fee for batch mode. Plans start free with 200,000 credits per month and scale to Professional at $250 per month for 25 million credits.\"},{\"question\":\"Can you self-host a geocoding engine?\",\"answer\":\"Yes. Stadia Maps offers its geocoding engine for on-premises deployment for enterprise teams with strict security or latency requirements. This is separate from the hosted API and is arranged directly with the Stadia Maps team.\"}]",[54,551,553],{"id":552},"where-to-go-next","Where to Go Next",[555,556,558],"h3",{"id":557},"from-the-blog","From the Blog",[35,560,561],{},"More on geocoding from the Stadia Maps blog:",[59,563,564,569,574,580,586],{},[62,565,566],{},[45,567,568],{"href":196},"The Hidden Cost of Search: Why Your Geocoding Bill Is Higher Than It Should Be",[62,570,571],{},[45,572,573],{"href":288},"The Open Data Superpower: Why Global Search Is Moving Beyond Proprietary Silos",[62,575,576],{},[45,577,579],{"href":578},"\u002Fblog\u002Fprecision-meets-privacy-consumer-search-experience\u002F","Precision Meets Privacy: Elevating the Consumer Search Experience",[62,581,582],{},[45,583,585],{"href":584},"\u002Fblog\u002F75-million-more-addresses-geocoding-precision\u002F","75 Million More Addresses: Expanding Geocoding Precision",[62,587,588],{},[45,589,591],{"href":590},"\u002Fblog\u002Fquickly-geocode-thousands-of-addresses-with-bulk-geocoding\u002F","Bulk Geocoding API Is Now Available",[555,593,595],{"id":594},"geocoding-search","Geocoding & Search",[59,597,598,605,610,615,623,628,635,641,651],{},[62,599,600,604],{},[45,601,603],{"href":602},"\u002Flearn\u002Fgeocoding\u002F","What Is Geocoding?"," for how geocoding works and where the data comes from",[62,606,607,609],{},[45,608,384],{"href":383}," for the coordinates-to-place direction",[62,611,612,614],{},[45,613,339],{"href":338}," for search-as-you-type",[62,616,617,622],{},[45,618,621],{"href":619,"rel":620,"target":50},"https:\u002F\u002Fdocs.stadiamaps.com\u002Fgeocoding-search-autocomplete\u002Foverview\u002F",[49],"Geocoding & Search overview docs"," for endpoint selection",[62,624,625,627],{},[45,626,94],{"href":93}," for the full storage and display terms",[62,629,630,634],{},[45,631,633],{"href":222,"rel":632,"target":50},[49],"Sources documentation"," for the full data provenance",[62,636,637,640],{},[45,638,496],{"href":494,"rel":639,"target":50},[49]," for confidence and layer signals",[62,642,643,647,648],{},[45,644,646],{"href":645},"\u002Fproducts\u002Fgeocoding-search\u002Fgeocoding\u002F","Geocoding product page"," and ",[45,649,650],{"href":400},"pricing",[62,652,653,647,657,661],{},[45,654,656],{"href":655},"\u002Fswitch-to-stadia\u002Ffrom-google\u002F","Google Maps alternatives",[45,658,660],{"href":659},"\u002Fswitch-to-stadia\u002Ffrom-mapbox\u002F","Mapbox alternatives"," for migration detail",[663,664,665],"style",{},"html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}",{"title":416,"searchDepth":667,"depth":667,"links":668},4,[669,671,672,673,674,675,676,677,678],{"id":56,"depth":670,"text":57},2,{"id":79,"depth":670,"text":80},{"id":128,"depth":670,"text":129},{"id":215,"depth":670,"text":216},{"id":309,"depth":670,"text":310},{"id":405,"depth":670,"text":406},{"id":458,"depth":670,"text":459},{"id":500,"depth":670,"text":501},{"id":552,"depth":670,"text":553,"children":679},[680,682],{"id":557,"depth":681,"text":558},3,{"id":594,"depth":681,"text":595},"The best geocoding API depends on your data, storage, and privacy needs. Compare sources, caching rights, batch limits, and pricing across the options.","md",{"script":686},[],"\u002Fimages\u002Fog\u002Fbest-geocoding-api.png","What Is the Best Geocoding API? — Stadia Maps",null,{},true,"2026-08-26","---\ntitle: What Is the Best Geocoding API?\ndescription: The best geocoding API depends on your data, storage, and privacy needs. Compare sources, caching rights, batch limits, and pricing across the options.\nauthor: Stadia Maps Team\ncategory: Geocoding & Search\nhead:\n  script: []\nimage: \u002Fimages\u002Fog\u002Fbest-geocoding-api.png\nimageAlt: What Is the Best Geocoding API? — Stadia Maps\npublished: 2026-08-26\nterm: Geocoding API\ntermDescription: An HTTP service that converts addresses and place names into geographic coordinates, and coordinates back into places.\n---\n\n# What Is the Best Geocoding API?\n\nThere is no single best geocoding API. The right one depends on whether you need to store results, how much you geocode at once, which countries you operate in, and what your privacy obligations are.\n\nThat framing matters because most comparisons stop at accuracy and price per request. Those are rarely what breaks a project. The things that break projects are storage restrictions discovered at scale, batch limits that turn a one-hour job into a three-day job, display terms that lock your results to one vendor's map, and data you cannot inspect or correct.\n\nThis page walks through the dimensions worth evaluating, and what the [Stadia Maps Geocoding API](https:\u002F\u002Fstadiamaps.com\u002Fproducts\u002Fgeocoding-search\u002Fgeocoding\u002F) does on each.\n\n## Key Takeaways\n\n- Storage rights are easy to overlook and expensive to discover late. Per Stadia Maps' published analysis, Mapbox, AWS, and ESRI often charge 6x to 8x the standard query price to store a result.\n- Batch capacity varies widely. Google lacks a dedicated bulk geocoding API, Mapbox limits requests to 1,000 queries, and Stadia Maps processes 5,000 per request.\n- Data provenance is inspectable on some providers and opaque on others. Stadia Maps documents five open sources and returns fix-it URLs so records can be corrected.\n- Display restrictions matter. Google generally prevents displaying its geocoding results on another provider's map.\n- Stadia Maps geocoding data refreshes at least monthly, draws on a dataset of over one billion locations globally, and does not track end users.\n\n## What Should You Evaluate in a Geocoding API?\n\nSix dimensions, roughly in order of how often they cause problems after launch.\n\n**1. Storage and caching rights.** Can you write a returned coordinate to your database and keep it? This is a licensing question, not a technical one, and it is where cost models break. On Stadia Maps, temporary storage is allowed on all plans and permanent storage requires Standard or above with no surcharge. The [Terms of Service](\u002Fterms-of-service\u002F) contain the full terms.\n\n**2. Batch capacity.** If you need to geocode a hundred thousand addresses, the per-request limit determines whether that is a script that runs over lunch or a pipeline you have to babysit.\n\n**3. Data sources and transparency.** Where do the addresses come from, how often are they refreshed, and can you correct an error you find?\n\n**4. Display and portability terms.** Some providers restrict where their results can be shown. That constrains your architecture later, not now.\n\n**5. International accuracy.** Address formats, scripts, and data density vary enormously by country. A provider that is excellent in North America may be weak where you are expanding next.\n\n**6. Privacy posture.** Whether the provider collects end-user data, and whether that is compatible with your compliance obligations.\n\n## Geocoding API Comparison: Storage, Batch, and Portability\n\n|                 | Storing results long-term                               | Bulk batch limit      |\n| --------------- | ------------------------------------------------------- | --------------------- |\n| **Stadia Maps** | Included on Standard and above, no surcharge            | 5,000 per request     |\n| **Google**      | Generally forbidden outside a specific end-user session | No dedicated bulk API |\n| **Mapbox**      | Often 6x to 8x standard query cost                      | 1,000 per request     |\n\nThe competitor figures come from Stadia Maps' published analysis in [The Hidden Cost of Search](\u002Fblog\u002Fwhy-is-your-geocoding-bill-higher-than-it-should-be\u002F), which places AWS and ESRI in the same 6x to 8x storage band as Mapbox. The Stadia Maps storage terms are in [Section 8 of the Terms of Service](\u002Fterms-of-service\u002F), which requires an active Standard, Professional, or Enterprise subscription to permanently store geocoding results.\n\nProvider terms change, and each vendor's are their own. Verify against current documentation before deciding.\n\nOne more term worth checking that is harder to tabulate: **display rights**. The same analysis notes that Google often prevents displaying its geocoding results on a map from another provider. Storage rights and display rights are separate clauses, and either one can create lock-in.\n\n## Where Does Geocoding Data Come From?\n\nA geocoder is only as good as the data underneath it, and most providers treat that data as a trade secret. The [Stadia Maps sources documentation](https:\u002F\u002Fdocs.stadiamaps.com\u002Fgeocoding-search-autocomplete\u002Fsources\u002F) lists all five, and every result carries attribution back to its origin:\n\n- **[OpenStreetMap](https:\u002F\u002Fwww.openstreetmap.org\u002F)** for global roads, addresses, and points of interest\n- **[OpenAddresses](https:\u002F\u002Fopenaddresses.io\u002F)** for authoritative government address data. Stadia Maps is a [corporate sponsor](\u002Fattribution\u002F) of the project\n- **[Who's On First](https:\u002F\u002Fwhosonfirst.org\u002F)** for the administrative place hierarchy\n- **[GeoNames](https:\u002F\u002Fwww.geonames.org\u002F)** for populated places and natural features\n- **[Foursquare Open Source Places](https:\u002F\u002Fdocs.foursquare.com\u002Fdata-products\u002Fdocs\u002Ffsq-places-open-source)** for business and venue data\n\nTwo consequences of building on open data, both from [The Open Data Superpower](\u002Fblog\u002Fopen-data-geocoding-global-search\u002F):\n\n**You can fix errors.** Stadia Maps includes \"fix-it\" URLs for many records directly in API responses, pointing to datasets that accept contributions. Reporting a bad address to a proprietary provider is, in that post's words, \"shouting into a void.\"\n\n**Updates are continuous rather than periodic.** Legacy providers rely on data captured during periodic drive-bys, which can remain unverified for years. Stadia Maps refreshes geocoding data **at least monthly**.\n\n## Which Geocoding Endpoint Do You Actually Need?\n\n\"Geocoding API\" covers several distinct operations. Picking the wrong one produces bad results or unnecessary cost.\n\n- **[Forward geocoding](https:\u002F\u002Fdocs.stadiamaps.com\u002Fgeocoding-search-autocomplete\u002Fsearch\u002F)** turns a complete address or place name into coordinates. Best accuracy on complete input, and it uses approximation to locate addresses that are not mapped directly.\n- **[Autocomplete search](https:\u002F\u002Fdocs.stadiamaps.com\u002Fgeocoding-search-autocomplete\u002Fautocomplete\u002F)** is tuned for speed on partial input. Use it while the user is typing, then hand off to forward geocoding when they finish. See [What Is Address Autocomplete?](\u002Flearn\u002Faddress-autocomplete\u002F)\n- **[Structured geocoding](https:\u002F\u002Fdocs.stadiamaps.com\u002Fgeocoding-search-autocomplete\u002Fstructured-search\u002F)** takes pre-parsed components (`house_number`, `street`, `city`, `region`, `postalcode`, `country`). Removes string-parsing guesswork, and improves international accuracy.\n- **[Reverse geocoding](https:\u002F\u002Fdocs.stadiamaps.com\u002Fgeocoding-search-autocomplete\u002Freverse-search\u002F)** turns coordinates into a place. See [What Is Reverse Geocoding?](\u002Flearn\u002Freverse-geocoding\u002F)\n- **[Bulk geocoding](https:\u002F\u002Fdocs.stadiamaps.com\u002Fgeocoding-search-autocomplete\u002Fbulk-geocoding-search\u002F)** handles up to 5,000 queries in one request for pipeline work.\n\nOn the [Stadia Maps credit system](\u002Fpricing\u002F), forward, structured, and reverse geocoding each cost 20 credits per request, and autocomplete v2 costs 1 credit per request. Bulk geocoding is billed per query inside the batch at the same rate as an individual request, so batching costs no more than calling the endpoints directly.\n\n## How Do You Test a Geocoding API?\n\nThe fastest way to compare providers is to run your own hardest addresses through each. Here is a forward geocoding request against Stadia Maps:\n\n```http\nGET https:\u002F\u002Fapi.stadiamaps.com\u002Fgeocoding\u002Fv1\u002Fsearch?text=P%C3%B5hja+pst+27\n```\n\nThe response is a GeoJSON `FeatureCollection`. Each feature carries coordinates, parsed address components, the matched layer, a confidence score, and source attribution. That last part matters for evaluation: you can see *which* dataset produced the answer.\n\nFor runnable examples in TypeScript, Python, Kotlin, Swift, PHP, or cURL, see the [forward geocoding documentation](https:\u002F\u002Fdocs.stadiamaps.com\u002Fgeocoding-search-autocomplete\u002Fsearch\u002F). An EU endpoint is available at `api-eu.stadiamaps.com` to keep traffic within the EU.\n\n**Build your test set carefully.** Do not evaluate on well-formed addresses in major US cities, where every provider performs well. Test the cases that will actually hurt: apartment and unit numbers, addresses in the countries you are expanding into, non-Latin scripts, new construction, rural routes, and deliberately misspelled input.\n\n## How Good Is International Geocoding?\n\nIt varies by provider and by country, and any vendor claiming uniform global accuracy is overselling.\n\nWhat Stadia Maps documents on this:\n\n- **Multilingual search** across all primary data layers, including administrative areas and points of interest. Searching a Korean city by its English name is the kind of case this is built to handle.\n- **Localized address templates** developed through an open-source collaboration, so results respect how addresses are actually written in each country.\n- **A stated limitation.** Per The Open Data Superpower, Stadia Maps is \"continuing to refine partial matches in specific East Asian scripts.\"\n\nThat last item is the kind of thing worth looking for in any vendor's documentation. A provider willing to name where it is still improving is easier to plan around than one that claims everything works.\n\nRead the [Determining Result Quality](https:\u002F\u002Fdocs.stadiamaps.com\u002Fgeocoding-search-autocomplete\u002Fdetermining-result-quality\u002F) documentation before you build. Confidence scores and layer types are how you detect a weak match in production rather than shipping it to a user.\n\n## When Is Stadia Maps the Right Choice?\n\n**You are geocoding once and storing the result.** Permanent storage is included on Standard and above with no surcharge and no per-user re-validation. If your data is stable and access is repeated, this is a significant cost difference between providers.\n\n**You are processing addresses in bulk.** 5,000 queries per request, with no extra credits or fees for batch mode.\n\n**You need to inspect or correct the data.** Five documented sources, per-result attribution, and fix-it URLs in responses.\n\n**You have privacy or residency requirements.** No end-user tracking, query-based rather than session-based search, and an EU endpoint for keeping traffic in-region. See [What Is a GDPR-Compliant Mapping API?](\u002Flearn\u002Fgdpr-compliant-mapping-api\u002F)\n\n**You need to self-host.** The geocoding engine is available for [on-premises deployment](\u002Fproducts\u002Fon-prem-embedded\u002F) for teams with strict security or latency requirements.\n\n**Where you should look elsewhere:** if your application depends on a proprietary business listing dataset that only one vendor has, no amount of open data will replace it. Evaluate on your own hardest addresses before committing either way.\n\n::faq-section\n---\nfaqs:\n  - question: What is a geocoding API?\n    answer: \"A geocoding API is an HTTP service that converts addresses and place\n      names into geographic coordinates, and converts coordinates back into\n      places. Most providers offer several variants: forward geocoding for\n      complete input, autocomplete for partial input, structured geocoding for\n      pre-parsed address components, reverse geocoding for coordinates, and bulk\n      endpoints for batch processing.\"\n  - question: What should you evaluate when choosing a geocoding API?\n    answer: Storage and caching rights, batch capacity, data source transparency and\n      refresh frequency, display and portability terms, international accuracy\n      in the countries you operate in, and privacy posture. Accuracy and price\n      per request matter, but storage terms and batch limits are what most often\n      cause problems after launch.\n  - question: Which geocoding API allows you to store results?\n    answer: Stadia Maps includes permanent storage on Standard, Professional, and\n      Enterprise plans with no surcharge. Per Stadia Maps' published analysis,\n      Mapbox, AWS, and ESRI often charge 6x to 8x the standard query cost to\n      store a result, and Google generally forbids caching outside a specific\n      end-user session.\n  - question: Which geocoding API has the highest batch limit?\n    answer: Stadia Maps processes 5,000 queries per bulk request with no extra\n      credits or fees. Per Stadia Maps' analysis, Mapbox limits bulk requests to\n      1,000 queries and Google lacks a dedicated bulk geocoding API.\n  - question: What data sources does Stadia Maps geocoding use?\n    answer: \"Five documented open sources: OpenStreetMap for global roads and points\n      of interest, OpenAddresses for authoritative government address data,\n      Who's On First for administrative places, GeoNames for populated places\n      and natural features, and Foursquare Open Source Places for businesses and\n      venues. Every result carries attribution back to its source.\"\n  - question: How often is geocoding data updated?\n    answer: Stadia Maps refreshes its geocoding data at least monthly to stay\n      aligned with its map and routing services. Because the underlying data is\n      open, Stadia Maps also includes fix-it URLs in many API responses,\n      pointing to datasets that accept community corrections.\n  - question: How much does geocoding cost on Stadia Maps?\n    answer: Forward, structured, and reverse geocoding each cost 20 credits per\n      request on the unified Stadia Maps credit pool, and autocomplete v2 costs\n      1 credit per request. Bulk geocoding is billed per query inside the batch\n      at the same rate as an individual request, with no extra fee for batch\n      mode. Plans start free with 200,000 credits per month and scale to\n      Professional at $250 per month for 25 million credits.\n  - question: Can you self-host a geocoding engine?\n    answer: Yes. Stadia Maps offers its geocoding engine for on-premises deployment\n      for enterprise teams with strict security or latency requirements. This is\n      separate from the hosted API and is arranged directly with the Stadia Maps\n      team.\n---\n::\n\n## Where to Go Next\n\n### From the Blog\n\nMore on geocoding from the Stadia Maps blog:\n\n- [The Hidden Cost of Search: Why Your Geocoding Bill Is Higher Than It Should Be](\u002Fblog\u002Fwhy-is-your-geocoding-bill-higher-than-it-should-be\u002F)\n- [The Open Data Superpower: Why Global Search Is Moving Beyond Proprietary Silos](\u002Fblog\u002Fopen-data-geocoding-global-search\u002F)\n- [Precision Meets Privacy: Elevating the Consumer Search Experience](\u002Fblog\u002Fprecision-meets-privacy-consumer-search-experience\u002F)\n- [75 Million More Addresses: Expanding Geocoding Precision](\u002Fblog\u002F75-million-more-addresses-geocoding-precision\u002F)\n- [Bulk Geocoding API Is Now Available](\u002Fblog\u002Fquickly-geocode-thousands-of-addresses-with-bulk-geocoding\u002F)\n\n### Geocoding & Search\n\n- [What Is Geocoding?](\u002Flearn\u002Fgeocoding\u002F) for how geocoding works and where the data comes from\n- [What Is Reverse Geocoding?](\u002Flearn\u002Freverse-geocoding\u002F) for the coordinates-to-place direction\n- [What Is Address Autocomplete?](\u002Flearn\u002Faddress-autocomplete\u002F) for search-as-you-type\n- [Geocoding & Search overview docs](https:\u002F\u002Fdocs.stadiamaps.com\u002Fgeocoding-search-autocomplete\u002Foverview\u002F) for endpoint selection\n- [Terms of Service](\u002Fterms-of-service\u002F) for the full storage and display terms\n- [Sources documentation](https:\u002F\u002Fdocs.stadiamaps.com\u002Fgeocoding-search-autocomplete\u002Fsources\u002F) for the full data provenance\n- [Determining Result Quality](https:\u002F\u002Fdocs.stadiamaps.com\u002Fgeocoding-search-autocomplete\u002Fdetermining-result-quality\u002F) for confidence and layer signals\n- [Geocoding product page](\u002Fproducts\u002Fgeocoding-search\u002Fgeocoding\u002F) and [pricing](\u002Fpricing\u002F)\n- [Google Maps alternatives](\u002Fswitch-to-stadia\u002Ffrom-google\u002F) and [Mapbox alternatives](\u002Fswitch-to-stadia\u002Ffrom-mapbox\u002F) for migration detail\n",{"title":5,"description":683},"learn\u002Fbest-geocoding-api","Geocoding API","An HTTP service that converts addresses and place names into geographic coordinates, and coordinates back into places.","4jxG1SW4oYX9LFvPicgdVhJCdMe3BtF4czNbD_Dbq84",[700,705,710],{"title":339,"description":701,"path":702,"published":703,"category":595,"rawbody":704},"Address autocomplete suggests places, addresses, and points of interest as users type. Learn how it works and how to add it with Stadia Maps SDKs and API.","\u002Flearn\u002Faddress-autocomplete","2026-07-28","---\ntitle: What Is Address Autocomplete?\ndescription: Address autocomplete suggests places, addresses, and points of interest as users type. Learn how it works and how to add it with Stadia Maps SDKs and API.\nauthor: Stadia Maps Team\ncategory: Geocoding & Search\nimage: \u002Fimages\u002Fog\u002Fwhat-is-address-autocomplete.png\nhead:\n  script: []\npublished: 2026-07-28\nschemaOrg:\n  - \"@type\": FAQPage\n    mainEntity:\n      - \"@type\": Question\n        name: What is address autocomplete used for?\n        acceptedAnswer:\n          \"@type\": Answer\n          text: Address autocomplete is used to suggest places, addresses, and points of interest as a user types. It powers search-as-you-type experiences in checkout flows, store locators, ride-share pickup selection, and any interface where a user needs to find and select a real-world location quickly.\n      - \"@type\": Question\n        name: What is the difference between address autocomplete and forward geocoding?\n        acceptedAnswer:\n          \"@type\": Answer\n          text: Autocomplete is optimized for speed on partial input. Forward geocoding is optimized for accuracy on complete input and can interpolate addresses. Use autocomplete for interactive search-as-you-type; switch to forward geocoding when the user finalizes the query.\n      - \"@type\": Question\n        name: Which SDKs does Stadia Maps offer for address autocomplete?\n        acceptedAnswer:\n          \"@type\": Answer\n          text: \"Stadia Maps offers three first-party SDKs for address autocomplete: the MapLibre GL JS Search Box plugin for the web, SwiftUI Autocomplete Search for iOS, and Jetpack Compose Autocomplete Search for Android. Each handles debouncing, caching, and result ordering out of the box. If none fit, the underlying HTTP API is available directly.\"\n      - \"@type\": Question\n        name: What are the default autocomplete timing and input settings on Stadia Maps?\n        acceptedAnswer:\n          \"@type\": Answer\n          text: The Stadia Maps autocomplete SDKs default to a 100ms minimum wait period between requests (minWaitPeriodMs) and a 3-character minimum input length (minInputLength). The MapLibre GL JS Search Box plugin also defaults to 5 maximum results (maxResults). These defaults balance server load with responsiveness.\n      - \"@type\": Question\n        name: How is an address autocomplete request billed on Stadia Maps?\n        acceptedAnswer:\n          \"@type\": Answer\n          text: Autocomplete requests are billed from the unified Stadia Maps API credit pool, the same pool that covers forward geocoding, reverse geocoding, routing, and tiles. Each autocomplete request is a single billable request.\nterm: Address Autocomplete\ntermDescription: A search-as-you-type interface that suggests addresses, places, and points of interest as a user types, ranked by relevance and proximity.\n---\n\n# What Is Address Autocomplete?\n\nAddress autocomplete is a search-as-you-type interface that suggests addresses, places, and points of interest as a user types, ranked by relevance and proximity. Also called type-ahead search, place search suggestions, or predictive search, address autocomplete is what turns a slow, error-prone address form into a two-tap interaction. The [Stadia Maps Autocomplete Search API](https:\u002F\u002Fdocs.stadiamaps.com\u002Fgeocoding-search-autocomplete\u002Fautocomplete\u002F) powers this experience through a fast, partial-input endpoint plus first-party SDKs for the web, iOS, and Android.\n\n## Key Takeaways\n\n- Address autocomplete suggests places as a user types, based on partial input and typically ranked by proximity or a focus point.\n- It is not a substitute for forward geocoding. Autocomplete is tuned for speed on partial input; forward geocoding is tuned for accuracy on complete input and can interpolate addresses.\n- Stadia Maps ships three first-party SDKs (MapLibre GL JS, SwiftUI, Jetpack Compose) that handle debouncing, caching, and result ordering out of the box.\n- The Stadia Maps SDKs default to a 100ms minimum wait period between requests and a 3-character minimum input length.\n- Each autocomplete request is billed as a single request from the unified Stadia Maps API credit pool.\n\n## How Address Autocomplete Works\n\nAutocomplete is a variant of forward geocoding tuned for speed on incomplete input. It follows this rough flow:\n\n1. **User types.** The client waits for a minimum number of characters (typically two or three) before firing the first request.\n2. **Debounce.** The client waits a short interval (roughly 100ms) after each keystroke before sending a request, so it does not overwhelm the server on fast typing.\n3. **Server searches.** The [Stadia Maps Autocomplete Search API](https:\u002F\u002Fdocs.stadiamaps.com\u002Fgeocoding-search-autocomplete\u002Fautocomplete\u002F) matches the partial input against the geocoding database and returns ranked candidates.\n4. **Client renders results.** Suggestions appear under the search field, typically 3 to 5 at a time.\n5. **User selects one.** The application takes the selected feature (with its full coordinates, address components, and layer) and moves on to the next step.\n\nTwo implementation details that matter in production:\n\n- **Out-of-order responses.** Fast typing produces overlapping requests. The client must show the response for the most recent input, not the last one to arrive. Modern async frameworks and the Stadia Maps SDKs handle this automatically.\n- **Result caching.** Recent queries can be served from the local cache, which cuts perceived latency and reduces API calls.\n\n## Which Autocomplete SDK Should You Use?\n\nStadia Maps ships three first-party SDKs for address autocomplete, each purpose-built for its platform. All of them handle debouncing, caching, out-of-order responses, and result ordering by default.\n\n- **[MapLibre GL JS Search Box plugin](https:\u002F\u002Fdocs.stadiamaps.com\u002Fsdks\u002Fmaplibre-gl-js-autocomplete-search-plugin\u002F)** for the web. Adds a search control to a MapLibre GL JS map. Configurable via options like `useMapFocusPoint`, `mapFocusPointMinZoom`, `minInputLength`, and `minWaitPeriodMs`. Available as an npm package or a CDN script tag.\n- **[SwiftUI Autocomplete Search](https:\u002F\u002Fdocs.stadiamaps.com\u002Fsdks\u002Fswiftui-autocomplete-search\u002F)** for iOS. A drop-in SwiftUI view for native iOS apps.\n- **[Jetpack Compose Autocomplete Search](https:\u002F\u002Fdocs.stadiamaps.com\u002Fsdks\u002Fjetpack-compose-autocomplete-search\u002F)** for Android. A composable for native Android apps built with Jetpack Compose.\n\nIf none of the three fit your stack (React Native, Flutter, a custom UI framework, or a server-side integration), use the underlying HTTP API directly. The Stadia Maps [official SDKs](https:\u002F\u002Fdocs.stadiamaps.com\u002Fsdks\u002Foverview\u002F) also expose the endpoint from TypeScript, Python, Kotlin, Swift, and PHP.\n\n## Address Autocomplete Parameters That Matter\n\nThe [Autocomplete Search endpoint](https:\u002F\u002Fdocs.stadiamaps.com\u002Fgeocoding-search-autocomplete\u002Fautocomplete\u002F) takes one required parameter and several optional ones that tune the result set.\n\n- **`text`**: The partial user input. Required.\n- **`focus.point.lat` \u002F `focus.point.lon`**: Bias results toward a focus point. Typically the map center or the user's known location.\n- **`boundary.rect.*`, `boundary.circle.*`, `boundary.country`, `boundary.gid`**: Hard limits on where results can appear. Use these when your product only operates in specific regions.\n- **`layers`**: Restrict to specific layers (`address`, `venue`, `poi`, `street`, `locality`, and more). Fewer layers means faster, more relevant results. `layers=coarse` is the fastest option when you do not need addresses or POIs.\n- **`sources`**: Restrict to specific data sources (`openstreetmap`, `openaddresses`, `whosonfirst`, `geonames`, `foursquare`).\n- **`size`**: Maximum number of results to return. Default is 10; most autocomplete UIs display 3 to 5.\n- **`lang`**: A BCP47 language tag for localized results.\n\n## Autocomplete Defaults Worth Knowing\n\nThe [Stadia Maps SDKs](https:\u002F\u002Fdocs.stadiamaps.com\u002Fgeocoding-search-autocomplete\u002Fautocomplete\u002F#ready-to-go-integrations) enforce a set of defaults documented in the API and SDK references. Each one exists to balance API cost, server load, and interaction responsiveness.\n\n- **Minimum input length.** The [Autocomplete Search docs](https:\u002F\u002Fdocs.stadiamaps.com\u002Fgeocoding-search-autocomplete\u002Fautocomplete\u002F) recommend waiting for two or three characters of user input before sending a query. The [MapLibre GL JS Search Box plugin](https:\u002F\u002Fdocs.stadiamaps.com\u002Fsdks\u002Fmaplibre-gl-js-autocomplete-search-plugin\u002F) defaults `minInputLength` to 3.\n- **Debouncing.** The MapLibre plugin defaults `minWaitPeriodMs` to 100ms, meaning it waits 100ms between requests as the user types. The docs recommend throttling or debouncing for interactive applications; the ready-to-go integrations handle it automatically.\n- **Result caching.** The MapLibre plugin caches recent results to avoid duplicate calls.\n- **Out-of-order response handling.** The docs call this out explicitly: \"network requests might arrive out of order... our frameworks handle it automatically.\" Take care if you build your own low-level integration.\n- **Maximum results.** The MapLibre plugin defaults `maxResults` to 5.\n- **Layer selection.** Specifying only the [layers](https:\u002F\u002Fdocs.stadiamaps.com\u002Fgeocoding-search-autocomplete\u002Flayers\u002F) you need improves relevance and performance. `layers=coarse` is especially useful when POIs and addresses are not needed.\n\n## How Do You Add Address Autocomplete?\n\nHere is what a direct call to the Stadia Maps Autocomplete Search API looks like. This example searches for a partial query in Tallinn, Estonia.\n\n```http\nGET https:\u002F\u002Fapi.stadiamaps.com\u002Fgeocoding\u002Fv2\u002Fautocomplete?text=Union+Squa&lang=en\n```\n\nThe response is a GeoJSON `FeatureCollection`. Each feature includes coordinates, parsed address components, layer, confidence score, and source attribution. Full response format details are in the [Common Response Format docs](https:\u002F\u002Fdocs.stadiamaps.com\u002Fgeocoding-search-autocomplete\u002Fapi-response-format\u002F).\n\nFor most applications, the [MapLibre GL JS Search Box plugin](https:\u002F\u002Fdocs.stadiamaps.com\u002Fsdks\u002Fmaplibre-gl-js-autocomplete-search-plugin\u002F), [SwiftUI Autocomplete Search](https:\u002F\u002Fdocs.stadiamaps.com\u002Fsdks\u002Fswiftui-autocomplete-search\u002F), or [Jetpack Compose Autocomplete Search](https:\u002F\u002Fdocs.stadiamaps.com\u002Fsdks\u002Fjetpack-compose-autocomplete-search\u002F) will be faster than building a UI on top of the raw API. For runnable code against the HTTP endpoint in TypeScript, Python, Kotlin, Swift, PHP, or cURL, see the [Autocomplete Search API docs](https:\u002F\u002Fdocs.stadiamaps.com\u002Fgeocoding-search-autocomplete\u002Fautocomplete\u002F).\n\n## Where Address Autocomplete Falls Short\n\nAutocomplete is not the right tool for every search interaction. Real limits worth knowing:\n\n- **Autocomplete does not interpolate addresses.** If a specific house number does not exist in the underlying data, forward geocoding can estimate it from surrounding addresses. Autocomplete cannot. Fall back to [forward geocoding](\u002Flearn\u002Fgeocoding\u002F) once the user finalizes their query.\n- **Very short queries are noisy.** A one-character query returns hundreds of matches. The Stadia Maps SDKs default to a 3-character minimum. Lowering that produces bad UX.\n- **Ranking is context-dependent.** Without a `focus.point` or a boundary, \"Springfield\" could match any of dozens. Provide a focus point or country hint whenever possible.\n- **Layer choice affects results.** If you only need addresses and POIs, exclude administrative layers to speed things up. If you only need administrative context, use `layers=coarse` for the fastest possible search.\n- **Two providers rarely agree exactly.** Different providers use different data, different scoring, and different ranking logic. Standardize on one provider to keep your product consistent.\n\n## Address Autocomplete vs. Forward Geocoding: Which Do You Need?\n\nBoth convert human-readable place input into coordinates. They optimize for different phases of the user interaction.\n\n- Use **[address autocomplete](https:\u002F\u002Fdocs.stadiamaps.com\u002Fgeocoding-search-autocomplete\u002Fautocomplete\u002F)** while the user is still typing. Fast responses, partial input, ranked suggestions.\n- Use **[forward geocoding](\u002Flearn\u002Fgeocoding\u002F)** once the user finalizes their query (for example, by pressing Enter or submitting a form). Better accuracy on complete input, and forward geocoding can interpolate house numbers that autocomplete cannot.\n\nThe MapLibre GL JS Search Box plugin can automatically switch to the forward geocoding endpoint on Enter via the `searchOnEnter` option, if your plan includes the forward geocoding endpoint. See the [Stadia Maps pricing page](\u002Fpricing\u002F) for plan details.\n\n## Common Address Autocomplete Use Cases\n\nAutocomplete appears wherever a product asks a user to enter a real-world place.\n\n- **Checkout and shipping forms.** Users select their delivery address from suggestions instead of typing the full string. Fewer errors, faster completion, and higher form conversion.\n- **Ride-share and delivery pickup.** Rider or customer picks their pickup or drop-off from a search field. Focus point is set to the current GPS location so nearby options rank first.\n- **Store locator and site finder.** User types a city or zip code and the map centers on the selected result.\n- **Map-based search interfaces.** Real estate, travel, and outdoor apps let users search for places directly on the map.\n- **Data entry and CRM lookup.** Sales and support tools use autocomplete to attach a canonical place to a record.\n- **Point-of-interest discovery.** Restaurants, hotels, landmarks, and businesses surface as venues the user can select without knowing the full name.\n\n## Frequently Asked Questions\n\n### What is address autocomplete used for?\n\nAddress autocomplete is used to suggest places, addresses, and points of interest as a user types. It powers search-as-you-type experiences in checkout flows, store locators, ride-share pickup selection, and any interface where a user needs to find and select a real-world location quickly.\n\n### What is the difference between address autocomplete and forward geocoding?\n\nAutocomplete is optimized for speed on partial input. [Forward geocoding](\u002Flearn\u002Fgeocoding\u002F) is optimized for accuracy on complete input and can interpolate addresses. Use autocomplete for interactive search-as-you-type; switch to forward geocoding when the user finalizes the query, for example by pressing Enter.\n\n### Which SDKs does Stadia Maps offer for address autocomplete?\n\nStadia Maps offers three first-party SDKs for address autocomplete: the [MapLibre GL JS Search Box plugin](https:\u002F\u002Fdocs.stadiamaps.com\u002Fsdks\u002Fmaplibre-gl-js-autocomplete-search-plugin\u002F) for the web, [SwiftUI Autocomplete Search](https:\u002F\u002Fdocs.stadiamaps.com\u002Fsdks\u002Fswiftui-autocomplete-search\u002F) for iOS, and [Jetpack Compose Autocomplete Search](https:\u002F\u002Fdocs.stadiamaps.com\u002Fsdks\u002Fjetpack-compose-autocomplete-search\u002F) for Android. Each handles debouncing, caching, and result ordering out of the box. If none fit, the underlying HTTP API is available directly.\n\n### What are the default autocomplete timing and input settings on Stadia Maps?\n\nThe Stadia Maps autocomplete SDKs default to a 100ms minimum wait period between requests (`minWaitPeriodMs`) and a 3-character minimum input length (`minInputLength`). The [MapLibre GL JS Search Box plugin](https:\u002F\u002Fdocs.stadiamaps.com\u002Fsdks\u002Fmaplibre-gl-js-autocomplete-search-plugin\u002F) also defaults `maxResults` to 5. These defaults balance server load with responsiveness.\n\n### How is an address autocomplete request billed on Stadia Maps?\n\nAutocomplete requests are billed from the unified [Stadia Maps API](\u002Fpricing\u002F) credit pool, the same pool that covers forward geocoding, reverse geocoding, routing, and tiles. Each autocomplete request is a single billable request.\n\n## Where to Go Next\n\n### From the Blog\n\nMore on geocoding and search from the Stadia Maps blog:\n\n- [The Hidden Cost of Search: Why Your Geocoding Bill Is Higher Than It Should Be](\u002Fblog\u002Fwhy-is-your-geocoding-bill-higher-than-it-should-be\u002F)\n- [The Open Data Superpower: Why Global Search Is Moving Beyond Proprietary Silos](\u002Fblog\u002Fopen-data-geocoding-global-search\u002F)\n- [Precision Meets Privacy: Elevating the Consumer Search Experience](\u002Fblog\u002Fprecision-meets-privacy-consumer-search-experience\u002F)\n- [Autocomplete Search for SwiftUI and Jetpack Compose](\u002Fblog\u002Fautocomplete-search-for-swiftui-and-jetpack-compose\u002F)\n- [Introducing Geocoding & Search v2](\u002Fblog\u002Fintroducing-stadia-maps-geocoding-search-v2\u002F)\n\n### Geocoding & Search\n\n- [What Is Geocoding?](\u002Flearn\u002Fgeocoding\u002F) for the complete forward-direction overview\n- [What Is Reverse Geocoding?](\u002Flearn\u002Freverse-geocoding\u002F) for the opposite direction\n- [Autocomplete Search API reference](https:\u002F\u002Fdocs.stadiamaps.com\u002Fgeocoding-search-autocomplete\u002Fautocomplete\u002F) for the full parameter set\n- [MapLibre GL JS Search Box plugin](https:\u002F\u002Fdocs.stadiamaps.com\u002Fsdks\u002Fmaplibre-gl-js-autocomplete-search-plugin\u002F) for the web\n- [SwiftUI Autocomplete Search](https:\u002F\u002Fdocs.stadiamaps.com\u002Fsdks\u002Fswiftui-autocomplete-search\u002F) for iOS\n- [Jetpack Compose Autocomplete Search](https:\u002F\u002Fdocs.stadiamaps.com\u002Fsdks\u002Fjetpack-compose-autocomplete-search\u002F) for Android\n- [Layers documentation](https:\u002F\u002Fdocs.stadiamaps.com\u002Fgeocoding-search-autocomplete\u002Flayers\u002F) for the full list of returnable place types\n- [Sources documentation](https:\u002F\u002Fdocs.stadiamaps.com\u002Fgeocoding-search-autocomplete\u002Fsources\u002F): the five open data providers behind the API\n- [Autocomplete Search product page](\u002Fproducts\u002Fgeocoding-search\u002Fautocomplete-search\u002F) and pricing tiers\n",{"title":603,"description":706,"path":707,"published":708,"category":595,"rawbody":709},"Geocoding converts addresses to coordinates and back. Learn how our global geocoding API works, its accuracy levels, and best practices.","\u002Flearn\u002Fgeocoding","2026-07-14","---\ntitle: What Is Geocoding?\ndescription: Geocoding converts addresses to coordinates and back. Learn how our global geocoding API works, its accuracy levels, and best practices.\nauthor: Stadia Maps Team\ncategory: Geocoding & Search\nhead:\n  script: []\nimage: \u002Fimages\u002Fog\u002Fwhat-is-geocoding.png\nimageAlt: What Is Geocoding? — Stadia Maps\npublished: 2026-07-14\nmodified: 2026-08-26\nterm: Geocoding\ntermDescription: The process of converting an address, place name, or point of interest into geographic coordinates.\n---\n\n# What Is Geocoding?\n\n[Geocoding](https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FAddress_geocoding) is the process of converting an address, place name, or point of interest into geographic coordinates (latitude and longitude). Also called address geocoding, address lookup, or place search, geocoding is the foundation of any product that needs to bridge human-readable places and machine-readable coordinates. Reverse geocoding does the opposite: it takes a coordinate pair and returns the nearest place. The [Stadia Maps Geocoding API](https:\u002F\u002Fdocs.stadiamaps.com\u002Fgeocoding-search-autocomplete\u002Foverview\u002F) handles both directions, along with structured, bulk, and autocomplete variants, and draws on a documented set of open data sources so the provenance of every result is inspectable.\n\n## Key Takeaways\n\n- Geocoding converts a human-readable address or place name into geographic coordinates (latitude and longitude). Reverse geocoding does the opposite.\n- Geocoding quality depends on the underlying data. The Stadia Maps Geocoding API documents its five sources: OpenStreetMap, OpenAddresses, Who's On First, GeoNames, and Foursquare Open Source Places.\n- One credit pool covers forward, reverse, structured, bulk, and autocomplete variants. Pick the endpoint that matches the input shape.\n- Accuracy varies by country. Build a confidence check into any product that geocodes internationally.\n- Stadia Maps permits permanent storage of geocoded results on Standard, Professional, and Enterprise plans without a per-request surcharge.\n\n## Forward vs. Reverse Geocoding\n\nGeocoding has a direction. Every product decision that involves it starts with picking the right one.\n\n- **Forward geocoding** takes a string like `Pärnu mnt 388b` and returns coordinates like `59.381096, 24.661382`. Used for search bars, address forms, and any workflow where a user or dataset knows the place name and needs the location.\n- **Reverse geocoding** takes coordinates like `59.381096, 24.661382` and returns the nearest known place. Used when the input is a GPS fix, a map click, or an IoT device pinging its location.\n\nSome products need both. A ride-share driver's phone reverses their coordinates to display an address; the passenger's app forward-geocodes a destination string to route to it. The [Stadia Maps Geocoding API](https:\u002F\u002Fdocs.stadiamaps.com\u002Fgeocoding-search-autocomplete\u002Foverview\u002F) exposes separate endpoints for each direction, plus specialized ones for autocomplete, structured input, and bulk processing.\n\nFor a deeper look at the coordinates-to-place direction, see [What Is Reverse Geocoding?](\u002Flearn\u002Freverse-geocoding\u002F)\n\n## How Geocoding Actually Works\n\nUnder the hood, a geocoder is a chain of parsing, matching, scoring, and ranking decisions. The steps look roughly like this:\n\n1. **Parse the input.** Break the query into components (house number, street, city, postal code, country, place type).\n2. **Search candidate records.** Query the underlying database for matches across the relevant data sources and layers.\n3. **Score candidates.** Rank by string similarity, geographic focus, layer priority, and boundary constraints.\n4. **Interpolate when necessary.** For addresses that do not exist verbatim in the database, the geocoder can estimate the location by interpolating along the street segment. Not every geocoder does this. The Stadia Maps [Forward Geocoding endpoint](https:\u002F\u002Fdocs.stadiamaps.com\u002Fgeocoding-search-autocomplete\u002Fsearch\u002F) does.\n5. **Return the best matches** with a confidence score and full attribution so the caller can decide what to trust.\n\nThe details of each step vary by provider, which is why two geocoders can return different results for the same query. Understanding this pipeline is the difference between debugging a geocoding bug in an hour and shipping a workaround that quietly returns the wrong city for 3% of your users.\n\n## What Data Sources Does a Geocoder Use?\n\nEvery geocoder is only as good as the data it searches. The Stadia Maps Geocoding API is transparent about what it queries; the [full source list](https:\u002F\u002Fdocs.stadiamaps.com\u002Fgeocoding-search-autocomplete\u002Fsources\u002F) is documented and each result carries attribution back to its origin.\n\n- [**OpenStreetMap**](https:\u002F\u002Fwww.openstreetmap.org\u002F) provides the primary global coverage for roads, addresses, and points of interest. Community-maintained and open.\n- [**OpenAddresses**](https:\u002F\u002Fopenaddresses.io\u002F) aggregates authoritative address data from government and public sources worldwide. Stadia Maps is a [corporate sponsor](\u002Fattribution\u002F) of the project.\n- [**Who's On First**](https:\u002F\u002Fwhosonfirst.org\u002F) provides a global gazetteer of administrative places (countries, regions, counties, localities, neighborhoods). Used for hierarchy and reverse geocoding at the boundary level.\n- [**GeoNames**](https:\u002F\u002Fwww.geonames.org\u002F) adds populated places, natural features, and administrative fill-in for parts of the world where OSM coverage is thinner.\n- [**Foursquare Open Source Places**](https:\u002F\u002Fdocs.foursquare.com\u002Fdata-products\u002Fdocs\u002Ffsq-places-open-source) contributes point-of-interest data for businesses and venues.\n\nFiltering the `sources` parameter lets you constrain results to a subset when you want to control what backs your search. That is a real feature; most competitor APIs treat their data provenance as a trade secret.\n\n## Key Geocoding API Parameters\n\nThe forward geocoding endpoint takes one required parameter (`text`) and several optional ones that dramatically change what you get back. Full details in the [Forward Geocoding docs](https:\u002F\u002Fdocs.stadiamaps.com\u002Fgeocoding-search-autocomplete\u002Fsearch\u002F).\n\n- **`text`**: The place name or address. Required.\n- **`focus.point.lat` \u002F `focus.point.lon`**: Bias results toward a focus point. Use the user's map center or their known location to prefer nearby matches.\n- **`boundary.rect.*`, `boundary.circle.*`, `boundary.country`, `boundary.gid`**: Hard limits on where results can appear. Use these when your product only operates in specific regions.\n- **`layers`**: Restrict to specific data layers (`address`, `venue`, `postalcode`, `country`, and more). Fewer layers means faster, more relevant results.\n- **`sources`**: Restrict to specific data sources (`openstreetmap`, `openaddresses`, `whosonfirst`, `geonames`, `foursquare`). Useful when you want, for example, only address-authoritative sources for a shipping form.\n- **`size`**: Maximum number of results to return. Default is 10.\n- **`lang`**: A BCP47 language tag for localized results.\n\nThe single most common mistake is over-constraining. If your first query returns nothing, drop a boundary or a layer filter before assuming the geocoder is broken.\n\n## Why Geocoding Accuracy Varies by Country\n\nGeocoding quality is not uniform globally. Address density, government data availability, and OSM coverage all vary by country. This is a factual limitation that competitor \"what is geocoding\" pages tend to skip.\n\nSome patterns worth knowing:\n\n- **North America and Western Europe** have deep coverage across OSM, OpenAddresses, and Who's On First. Interpolation fills in most missing house numbers along known streets.\n- **Japan and parts of East Asia** use non-linear addressing systems that do not map cleanly to street-and-number geocoders. Structured input helps a lot here; see the [Structured Geocoding endpoint](https:\u002F\u002Fdocs.stadiamaps.com\u002Fgeocoding-search-autocomplete\u002Fstructured-search\u002F).\n- **Rapidly growing cities** in South Asia, Southeast Asia, and Africa may have addresses that exist physically but are not yet in any data source. Fuzzy matching and community-driven OSM contributions close the gap over time; expect variance.\n- **Rural and remote areas** everywhere degrade gracefully to the nearest named place rather than an exact street number.\n\nIf your product operates internationally, build in a confidence check (see the [Determining Result Quality docs](https:\u002F\u002Fdocs.stadiamaps.com\u002Fgeocoding-search-autocomplete\u002Fdetermining-result-quality\u002F)) and design a fallback UX for low-confidence matches. Do not assume the same accuracy in every market.\n\n## How Do You Geocode an Address?\n\nHere is what a forward geocoding request to the Stadia Maps Geocoding API looks like. This example geocodes an address in Tallinn, Estonia.\n\n```http\nGET https:\u002F\u002Fapi.stadiamaps.com\u002Fgeocoding\u002Fv1\u002Fsearch?text=P%C3%B5hja+pst+27\n```\n\nThe response is a GeoJSON `FeatureCollection`. Each feature carries the coordinates, the parsed address components, a confidence score, and source attribution. Full response format details are in the [Common Response Format docs](https:\u002F\u002Fdocs.stadiamaps.com\u002Fgeocoding-search-autocomplete\u002Fapi-response-format\u002F).\n\nFor runnable code in TypeScript, Python, Kotlin, Swift, PHP, or cURL, see the [Stadia Maps Forward Geocoding API docs](https:\u002F\u002Fdocs.stadiamaps.com\u002Fgeocoding-search-autocomplete\u002Fsearch\u002F).\n\n## Structured vs. Bulk vs. Autocomplete Geocoding\n\nForward geocoding is not always the right endpoint. The [Geocoding & Search overview](https:\u002F\u002Fdocs.stadiamaps.com\u002Fgeocoding-search-autocomplete\u002Foverview\u002F) breaks down when to use each variant.\n\n- **Building an interactive search-as-you-type experience?** Use the [Autocomplete endpoint](https:\u002F\u002Fdocs.stadiamaps.com\u002Fgeocoding-search-autocomplete\u002Fautocomplete\u002F). It is optimized for partial input and faster response times. See [What Is Address Autocomplete?](\u002Flearn\u002Faddress-autocomplete\u002F)\n- **Working with pre-parsed address components** (`house_number`, `street`, `city`, `region`, `postalcode`, `country`)? Use [Structured Geocoding](https:\u002F\u002Fdocs.stadiamaps.com\u002Fgeocoding-search-autocomplete\u002Fstructured-search\u002F). It takes the guesswork out of string parsing and improves accuracy for postal addresses, especially internationally.\n- **Processing thousands of addresses at once?** Use [Bulk Geocoding](https:\u002F\u002Fdocs.stadiamaps.com\u002Fgeocoding-search-autocomplete\u002Fbulk-geocoding-search\u002F). Up to 5,000 queries per request.\n- **Reversing coordinates back to a place?** Use the [Reverse Geocoding endpoint](https:\u002F\u002Fdocs.stadiamaps.com\u002Fgeocoding-search-autocomplete\u002Freverse-search\u002F).\n\nComparing providers rather than endpoints? See [What Is the Best Geocoding API?](\u002Flearn\u002Fbest-geocoding-api\u002F) for the evaluation criteria that matter after launch.\n\n## Where Geocoding Falls Short\n\nGeocoding has real limits. A page that pretends otherwise is not being honest with the reader.\n\n- **A geocoder is not an address validator.** It returns the best match it can find. If your user typed a nonexistent address, the geocoder will often return a nearest-street-segment interpolation rather than an error. Check the confidence score and layer type on every result before treating it as authoritative.\n- **Autocomplete and forward geocoding are not interchangeable.** Autocomplete is optimized for speed on partial input; forward geocoding is optimized for accuracy on complete input. Using one where the other belongs produces bad UX or bad results.\n- **Interpolated addresses are estimates, not guarantees.** The result may be tens of meters off the actual building, or on the wrong side of the street. For delivery-critical use cases, verify with a follow-up reverse geocode or with authoritative sources.\n- **Two providers rarely agree exactly.** Different providers use different data sources, different scoring, and different parsers. Pick one and standardize within your own product to avoid inconsistencies.\n- **You may or may not be allowed to store results.** Most vendors charge extra to persist geocoding results in your own database. Stadia Maps allows permanent storage on the Standard, Professional, and Enterprise plans without a surcharge; see the [terms of service](\u002Fterms-of-service\u002F) for details.\n\n## Common Geocoding Use Cases\n\nGeocoding shows up anywhere a product needs to move between human-readable places and machine-readable coordinates. A partial list:\n\n- **Address forms and checkout flows.** Convert a user-entered shipping address to coordinates for downstream routing, delivery-zone checks, or tax calculation.\n- **Store locator and site finder.** Take a user's zip code or city and center the map on the corresponding coordinates.\n- **Lead enrichment and CRM cleanup.** Bulk-geocode a customer list to enable geographic segmentation, territory analysis, or field-sales routing.\n- **Logistics and last-mile delivery.** Convert delivery addresses to coordinates for isochrone-based service-area decisions or routing.\n- **Real estate search.** Geocode a listing's address to place it on a map and enable spatial queries.\n- **Location-aware AI and agents.** Give an LLM or agent the ability to translate free-text user requests (\"a coffee shop near Union Square\") into structured coordinates for a follow-up API call.\n\n::faq-section\n---\nfaqs:\n  - question: What is address geocoding?\n    answer: Address geocoding is the process of converting a street address or place\n      name into geographic coordinates (latitude and longitude). It is the\n      primary way products bridge between human-readable location input and\n      machine-readable spatial data. The Stadia Maps Geocoding API handles\n      address geocoding through its forward geocoding, structured geocoding, and\n      autocomplete endpoints.\n  - question: What is the difference between geocoding and reverse geocoding?\n    answer: \"Geocoding (forward geocoding) converts an address or place name into\n      coordinates. Reverse geocoding does the opposite: it converts coordinates\n      into an address or place. Products that combine both directions are\n      common. For example, a user types a destination (forward geocoded) and a\n      driver's phone shows the address of their current GPS position (reverse\n      geocoded).\"\n  - question: What data sources does the Stadia Maps Geocoding API use?\n    answer: \"The Stadia Maps Geocoding API queries five documented open sources:\n      OpenStreetMap for global roads and points of interest, OpenAddresses for\n      authoritative government address data, Who's On First for administrative\n      places, GeoNames for populated places and natural features, and Foursquare\n      Open Source Places for business and venue data. Every result carries\n      attribution back to its source, and Stadia Maps is a corporate sponsor of\n      the OpenAddresses project.\"\n  - question: Can I store geocoded addresses permanently on Stadia Maps?\n    answer: Yes. With an active Standard, Professional, or Enterprise subscription,\n      geocoded results can be stored permanently in your own database, with no\n      per-request surcharge and no per-user re-validation. Temporary storage in\n      the normal course of your work is allowed on all plans, including Free.\n      Per Stadia Maps' published analysis, Mapbox, AWS, and ESRI often charge\n      between 6x and 8x the cost of a regular query to store results, and Google\n      generally forbids caching outside a specific end-user session.\n  - question: How much does a geocoding request cost on Stadia Maps?\n    answer: Geocoding requests draw from a unified credit pool that also covers\n      routing, tiles, and other endpoints. Forward, structured, and reverse\n      geocoding each cost 20 credits per request. Autocomplete v2 costs 1 credit\n      per request. Bulk geocoding is billed per query inside the batch at the\n      same rate as an individual request, so there are no extra fees for using\n      batch mode.\n  - question: How accurate is geocoding?\n    answer: Accuracy varies by country and by data source. North America and Western\n      Europe have deep coverage across OpenStreetMap, OpenAddresses, and Who's\n      On First. Regions with non-linear addressing systems or newer construction\n      see more variance. Every Stadia Maps result returns a confidence score and\n      a layer type, which is how you detect a weak match in production rather\n      than shipping it to a user.\n---\n::\n\n## Where to Go Next\n\n### From the Blog\n\nMore on geocoding from the Stadia Maps blog:\n\n- [The Open Data Superpower: Why Global Search is Moving Beyond Proprietary Silos](\u002Fblog\u002Fopen-data-geocoding-global-search\u002F)\n- [The Hidden Cost of Search: Why Your Geocoding Bill Is Higher Than It Should Be](\u002Fblog\u002Fwhy-is-your-geocoding-bill-higher-than-it-should-be\u002F)\n- [Precision Meets Privacy: Elevating the Consumer Search Experience](\u002Fblog\u002Fprecision-meets-privacy-consumer-search-experience\u002F)\n- [75 Million More Addresses: Expanding Geocoding Precision](\u002Fblog\u002F75-million-more-addresses-geocoding-precision\u002F)\n- [Introducing Stadia Maps Geocoding & Search v2: Supercharge Your Search](\u002Fblog\u002Fintroducing-stadia-maps-geocoding-search-v2\u002F)\n\n### Geocoding & Search\n\n- [What Is Reverse Geocoding?](\u002Flearn\u002Freverse-geocoding\u002F) for the coordinates-to-place direction\n- [What Is Address Autocomplete?](\u002Flearn\u002Faddress-autocomplete\u002F) for search-as-you-type\n- [What Is the Best Geocoding API?](\u002Flearn\u002Fbest-geocoding-api\u002F) for how to evaluate providers\n- [Geocoding & Search overview docs](https:\u002F\u002Fdocs.stadiamaps.com\u002Fgeocoding-search-autocomplete\u002Foverview\u002F) for best practices and endpoint selection\n- [Forward Geocoding API reference](https:\u002F\u002Fdocs.stadiamaps.com\u002Fgeocoding-search-autocomplete\u002Fsearch\u002F)\n- [Reverse Geocoding API reference](https:\u002F\u002Fdocs.stadiamaps.com\u002Fgeocoding-search-autocomplete\u002Freverse-search\u002F)\n- [Structured Geocoding API reference](https:\u002F\u002Fdocs.stadiamaps.com\u002Fgeocoding-search-autocomplete\u002Fstructured-search\u002F)\n- [Bulk Geocoding API reference](https:\u002F\u002Fdocs.stadiamaps.com\u002Fgeocoding-search-autocomplete\u002Fbulk-geocoding-search\u002F)\n- [Autocomplete Search API reference](https:\u002F\u002Fdocs.stadiamaps.com\u002Fgeocoding-search-autocomplete\u002Fautocomplete\u002F)\n- [Sources documentation](https:\u002F\u002Fdocs.stadiamaps.com\u002Fgeocoding-search-autocomplete\u002Fsources\u002F): full list of data providers behind the API\n- [Determining Result Quality](https:\u002F\u002Fdocs.stadiamaps.com\u002Fgeocoding-search-autocomplete\u002Fdetermining-result-quality\u002F): how to read confidence and layer signals\n- [Geocoding product page](\u002Fproducts\u002Fgeocoding-search\u002Fgeocoding\u002F) and [pricing tiers](\u002Fpricing\u002F)\n",{"title":384,"description":711,"path":712,"published":713,"category":595,"rawbody":714},"Reverse geocoding converts coordinates into an address or nearby place. Learn how it handles administrative layers and how to build one with Stadia Maps.","\u002Flearn\u002Freverse-geocoding","2026-07-16","---\ntitle: What Is Reverse Geocoding?\ndescription: Reverse geocoding converts coordinates into an address or nearby place. Learn how it handles administrative layers and how to build one with Stadia Maps.\ncategory: Geocoding & Search\nhead:\n  script: []\nimage: \u002Fimages\u002Fog\u002Fwhat-is-reverse-geocoding.png\npublished: 2026-07-16\nschemaOrg:\n  - \"@type\": SoftwareApplication\n    name: Stadia Maps Reverse Geocoding API\n    description: Convert latitude\u002Flongitude coordinates to street addresses\n    url: https:\u002F\u002Fstadiamaps.com\u002Flearn\u002Freverse-geocoding\u002F\n    applicationCategory: Utility\n    operatingSystem: Web\n    offers:\n      \"@type\": Offer\n      price: \"0\"\n      priceCurrency: USD\n      url: https:\u002F\u002Fstadiamaps.com\u002Fpricing\u002F\n  - \"@type\": FAQPage\n    mainEntity:\n      - \"@type\": Question\n        name: What is reverse geocoding used for?\n        acceptedAnswer:\n          \"@type\": Answer\n          text: Reverse geocoding is used to convert a coordinate pair into a human-readable address, place name, or administrative boundary. Common uses include showing a rider's pickup address from GPS coordinates, powering nearby-place suggestions in delivery apps, tagging photos with a location, and identifying which city, county, or country a point falls within.\n      - \"@type\": Question\n        name: What is the difference between reverse geocoding and forward geocoding?\n        acceptedAnswer:\n          \"@type\": Answer\n          text: \"Forward geocoding converts an address or place name into coordinates. Reverse geocoding does the opposite: it converts coordinates into an address or nearby place. Products that combine both directions are common.\"\n      - \"@type\": Question\n        name: What layers can reverse geocoding return on Stadia Maps?\n        acceptedAnswer:\n          \"@type\": Answer\n          text: The Stadia Maps reverse geocoding endpoint can return fine-grained layers (address, poi, street) or coarse administrative layers (neighbourhood, locality, county, region, country). Use the layers parameter to restrict results. Coarse layers return features that contain the point; fine layers return the nearest features by distance.\n      - \"@type\": Question\n        name: Can I reverse geocode to a postal code?\n        acceptedAnswer:\n          \"@type\": Answer\n          text: Not directly. Postal codes are not used as a reverse geocoding layer on the Stadia Maps API. If you need a postal code for a coordinate, use reverse geocoding to retrieve the address and read the postal code from that result.\n      - \"@type\": Question\n        name: How much does a reverse geocoding request cost on Stadia Maps?\n        acceptedAnswer:\n          \"@type\": Answer\n          text: Reverse geocoding requests are billed from the unified Stadia Maps API credit pool, the same pool that covers forward geocoding, routing, and tiles. Each reverse geocoding request is a single billable request.\nterm: Reverse Geocoding\ntermDescription: The process of converting a coordinate pair into a human-readable address or place.\nseo:\n  title: \"Reverse Geocoding API: Convert Coordinates to Addresses\"\n  ogDescription: Learn how to convert latitude\u002Flongitude coordinates to street addresses with Stadia Maps' reverse geocoding API. Fast, accurate, privacy-first.\n  description: Reverse geocoding converts coordinates into an address or nearby place. Learn how it handles administrative layers and how to build one with Stadia Maps.\n---\n\n# What Is Reverse Geocoding?\n\n[Reverse geocoding](https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FReverse_geocoding) is the process of converting a coordinate pair (latitude and longitude) into a human-readable address, place name, or administrative boundary. Also called coordinate lookup or address lookup from coordinates, reverse geocoding is what turns a GPS fix, a map click, or an IoT device ping into something a person can read. It is the counterpart to [forward geocoding](\u002Flearn\u002Fgeocoding\u002F), which goes the other direction (address to coordinates). The [Stadia Maps Reverse Geocoding API](https:\u002F\u002Fdocs.stadiamaps.com\u002Fgeocoding-search-autocomplete\u002Freverse-search\u002F) can return the nearest address, the nearest point of interest, or the administrative context (`neighbourhood`, `locality`, `county`, `region`, `country`) for any point on Earth.\n\n## Key Takeaways\n\n- Reverse geocoding converts coordinates into an address, place name, or administrative boundary.\n- The Stadia Maps Reverse Geocoding API supports fine-grained layers (`address`, `poi`, `street`) and coarse administrative layers (`neighbourhood`, `locality`, `county`, `region`, `country`).\n- Coarse-layer requests return features that contain the point. Fine-layer requests return the nearest features by distance.\n- Postal codes are not a reverse-geocoding layer on the Stadia Maps API. Read them from the returned address instead.\n- Reverse geocoding is available on every Stadia Maps plan, and results can be stored permanently on Standard, Professional, and Enterprise plans.\n\n## How Reverse Geocoding Works\n\nUnder the hood, reverse geocoding is a spatial search problem with two distinct modes.\n\n1. **Nearest-neighbor mode** (for fine-grained layers like `address`, `poi`, and `street`). The geocoder searches for the closest features to the coordinate and returns them sorted by distance.\n2. **Point-in-polygon mode** (for coarse administrative layers like `country`, `region`, `county`, `locality`, and `neighbourhood`). The geocoder returns the features whose boundaries contain the point.\n\nThe [Stadia Maps Reverse Geocoding API](https:\u002F\u002Fdocs.stadiamaps.com\u002Fgeocoding-search-autocomplete\u002Freverse-search\u002F) runs both modes from the same endpoint. Which behavior you get depends on the `layers` parameter you pass. Combined queries return a mixed result set.\n\nEach result carries source attribution and a confidence score. See [Determining Result Quality](https:\u002F\u002Fdocs.stadiamaps.com\u002Fgeocoding-search-autocomplete\u002Fdetermining-result-quality\u002F) for how to read those signals.\n\n## What Are Layers in Reverse Geocoding?\n\nEvery place in the Stadia Maps geocoder is tagged with a [layer](https:\u002F\u002Fdocs.stadiamaps.com\u002Fgeocoding-search-autocomplete\u002Flayers\u002F) that describes what kind of thing it is. Reverse geocoding uses layers in two ways: to filter what comes back, and to determine how the search is executed (nearest versus containing).\n\nThe layers most useful for reverse geocoding:\n\n- `address`: A specific street address.\n- `poi` (or `venue` in v1): A business, building, or point of interest.\n- `street`: A road or street segment.\n- `neighbourhood`: A social or administrative neighbourhood (note the British spelling).\n- `locality`: A town, hamlet, or city.\n- `county`, `region`, `country`: Progressively larger administrative units.\n- `coarse`: An alias that queries all administrative layers at once. Fast, useful when you only need context.\n\nPostal codes are not used as a reverse-geocoding layer on the Stadia Maps API. If you need a postal code for a point, reverse geocode to the address layer and read the postal code from the result.\n\n## Reverse Geocoding Parameters That Matter\n\nThe [Reverse Geocoding endpoint](https:\u002F\u002Fdocs.stadiamaps.com\u002Fgeocoding-search-autocomplete\u002Freverse-search\u002F) takes two required parameters and several optional ones that change the result set.\n\n- `point.lat` and `point.lon`: The coordinate to reverse geocode. Both required.\n- `layers`: Restrict the search to specific layers. Defaults to fine-grained layers when omitted.\n- `sources`: Restrict to specific data sources (`openstreetmap`, `openaddresses`, `whosonfirst`, `geonames`, `foursquare`).\n- `boundary.country`: Limit results to specific countries (ISO 2 or 3 character codes).\n- `boundary.circle.radius`: For fine-grained queries, limit the search to a circle around the point. Defaults to 1km.\n- `size`: Maximum number of results to return. Defaults to 10.\n\nThe most common tuning move is switching to `layers=coarse` for fast administrative-context lookups. That query type does not need to sort by distance and typically returns quickly.\n\n## How Do You Reverse Geocode a Coordinate?\n\nHere is what a reverse geocoding request to the Stadia Maps API looks like. This example reverses a point in Tallinn, Estonia.\n\n```http\nGET https:\u002F\u002Fapi.stadiamaps.com\u002Fgeocoding\u002Fv2\u002Freverse?point.lat=59.444351&point.lon=24.750645\n```\n\nThe response is a GeoJSON `FeatureCollection`. Each feature includes the coordinates, parsed address components, layer, confidence score, and source attribution. Full response format details are in the [Common Response Format docs](https:\u002F\u002Fdocs.stadiamaps.com\u002Fgeocoding-search-autocomplete\u002Fapi-response-format\u002F).\n\nFor runnable code in TypeScript, Python, Kotlin, Swift, PHP, or cURL, see the [Stadia Maps Reverse Geocoding API docs](https:\u002F\u002Fdocs.stadiamaps.com\u002Fgeocoding-search-autocomplete\u002Freverse-search\u002F).\n\n## Where Reverse Geocoding Falls Short\n\nReverse geocoding has real limits worth knowing before you build.\n\n- **Coordinates in ambiguous places produce ambiguous results.** A point inside a parking lot, an office park, or a large building can return the parent property, a neighboring address, or nothing useful. Always check the layer and confidence of the top result.\n- **Coordinates over water or wilderness are best effort.** Reverse geocoding returns the nearest feature; if that feature is 20km away, the result is a geographic fact, not an address.\n- **Coarse and fine results answer different questions.** \"What city is this in?\" (coarse, point-in-polygon) and \"What is the nearest street address?\" (fine, nearest-neighbor) look similar but return different shapes of answer. Pick the layer that matches the question.\n- **Postal codes are not a reverse-geocoding layer.** As noted above, read them from the returned address rather than querying them directly.\n- **Two providers rarely agree exactly.** Different providers use different data, different scoring, and different tie-breaking logic. Standardize on one provider to keep your product consistent.\n\n## Common Reverse Geocoding Use Cases\n\nReverse geocoding appears wherever a product has coordinates but needs to display something a human can read.\n\n- **Delivery and ride-share pickup.** A driver's phone reports GPS coordinates. The app reverses those coordinates to display the pickup address to the passenger.\n- **Emergency response.** A 911 call carries GPS coordinates. Reverse geocoding turns those into a street address for the dispatcher.\n- **Photo and content tagging.** Add city, region, and country tags to photos or posts based on where they were captured.\n- **IoT and connected devices.** A sensor pings its location periodically; reverse geocoding turns that into a place the operator recognizes.\n- **Location-aware AI and agents.** Give an agent the ability to answer \"Where am I?\" or \"What neighborhood is this?\" from raw coordinates.\n- **Analytics and segmentation.** Roll up event coordinates to city, region, or country for cohort analysis without asking the user for input.\n\n## Frequently Asked Questions\n\n### What is reverse geocoding used for?\n\nReverse geocoding is used to convert a coordinate pair into a human-readable address, place name, or administrative boundary. Common uses include showing a rider's pickup address from GPS coordinates, powering nearby-place suggestions in delivery apps, tagging photos with a location, and identifying which city, county, or country a point falls within.\n\n### What is the difference between reverse geocoding and forward geocoding?\n\nForward geocoding converts an address or place name into coordinates. Reverse geocoding does the opposite: it converts coordinates into an address or nearby place. See [What Is Geocoding?](\u002Flearn\u002Fgeocoding\u002F) for a full explanation of the forward direction; products that combine both are common.\n\n### What layers can reverse geocoding return on Stadia Maps?\n\nThe Stadia Maps reverse geocoding endpoint can return fine-grained layers (`address`, `poi`, `street`) or coarse administrative layers (`neighbourhood`, `locality`, `county`, `region`, `country`). Use the `layers` parameter to restrict results. Coarse layers return features that contain the point; fine layers return the nearest features by distance. Full list in the [Layers documentation](https:\u002F\u002Fdocs.stadiamaps.com\u002Fgeocoding-search-autocomplete\u002Flayers\u002F).\n\n### Can I reverse geocode to a postal code?\n\nNot directly. Postal codes are not used as a reverse geocoding layer on the Stadia Maps API. If you need a postal code for a coordinate, use reverse geocoding to retrieve the address and read the postal code from that result.\n\n### How much does a reverse geocoding request cost on Stadia Maps?\n\nReverse geocoding requests are billed from the unified [Stadia Maps API](\u002Fpricing\u002F) credit pool, the same pool that covers forward geocoding, routing, and tiles. Each reverse geocoding request is a single billable request.\n\n## Where to Go Next\n\n### From the Blog\n\nMore on geocoding and search from the Stadia Maps blog:\n\n- [The Hidden Cost of Search: Why Your Geocoding Bill Is Higher Than It Should Be](\u002Fblog\u002Fwhy-is-your-geocoding-bill-higher-than-it-should-be\u002F)\n- [The Open Data Superpower: Why Global Search Is Moving Beyond Proprietary Silos](\u002Fblog\u002Fopen-data-geocoding-global-search\u002F)\n- [Precision Meets Privacy: Elevating the Consumer Search Experience](\u002Fblog\u002Fprecision-meets-privacy-consumer-search-experience\u002F)\n- [75 Million More Addresses: Expanding Geocoding Precision](\u002Fblog\u002F75-million-more-addresses-geocoding-precision\u002F)\n- [Introducing Geocoding & Search v2](\u002Fblog\u002Fintroducing-stadia-maps-geocoding-search-v2\u002F)\n\n### Geocoding & Search\n\n- [What Is Geocoding?](\u002Flearn\u002Fgeocoding\u002F) for the forward direction and a full geocoding overview\n- [Reverse Geocoding API reference](https:\u002F\u002Fdocs.stadiamaps.com\u002Fgeocoding-search-autocomplete\u002Freverse-search\u002F) for the full parameter set\n- [Layers documentation](https:\u002F\u002Fdocs.stadiamaps.com\u002Fgeocoding-search-autocomplete\u002Flayers\u002F) for the full list of returnable place types\n- [Sources documentation](https:\u002F\u002Fdocs.stadiamaps.com\u002Fgeocoding-search-autocomplete\u002Fsources\u002F): the five open data providers behind the API\n- [Determining Result Quality](https:\u002F\u002Fdocs.stadiamaps.com\u002Fgeocoding-search-autocomplete\u002Fdetermining-result-quality\u002F): how to read confidence and layer signals\n- [Forward Geocoding API reference](https:\u002F\u002Fdocs.stadiamaps.com\u002Fgeocoding-search-autocomplete\u002Fsearch\u002F)\n- [Autocomplete Search API reference](https:\u002F\u002Fdocs.stadiamaps.com\u002Fgeocoding-search-autocomplete\u002Fautocomplete\u002F)\n- [Geocoding product page](\u002Fproducts\u002Fgeocoding-search\u002Fgeocoding\u002F) and pricing tiers\n",{"id":716,"bio":689,"extension":18,"jobTitle":689,"meta":717,"name":158,"sameAs":718,"slug":721,"stem":722,"twitterCreator":689,"type":723,"url":724,"__hash__":725},"authors\u002Fauthors\u002Fstadia-maps.yml",{},[719,720],"https:\u002F\u002Fwww.linkedin.com\u002Fcompany\u002Fstadia-maps\u002F","https:\u002F\u002Fgithub.com\u002Fstadiamaps","stadia-maps","authors\u002Fstadia-maps","Organization","https:\u002F\u002Fstadiamaps.com\u002F","jRSutfRcYEknA-OSdkWoPHgm7Iep6BJfLBIsMtzQONk",1787911391293]