<?xml version="1.0" encoding="utf-8"?>
<?xml-stylesheet type="text/xsl" href="../assets/xml/rss.xsl" media="all"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Coordable (Posts about geocoding)</title><link>https://coordable.co/</link><description></description><atom:link href="https://coordable.co/categories/geocoding.xml" rel="self" type="application/rss+xml"></atom:link><language>en</language><copyright>Contents © 2026 &lt;a href="mailto:contact@coordable.co"&gt;Nikola Tesla&lt;/a&gt; </copyright><lastBuildDate>Tue, 28 Apr 2026 16:26:40 GMT</lastBuildDate><generator>Nikola (getnikola.com)</generator><docs>http://blogs.law.harvard.edu/tech/rss</docs><item><title>We built a free tool to benchmark geocoding provider accuracy</title><link>https://coordable.co/blog/free-tool-benchmark-geocoding-providers/</link><dc:creator>François Andrieux</dc:creator><description>&lt;h3 id="why-we-built-it"&gt;Why we built it&lt;/h3&gt;
&lt;p&gt;Most teams pick a geocoding provider once and never look back. Usually Google. It is reliable, well-documented, and familiar. But it is also one of the most expensive options, and on some datasets, it is not even the most accurate.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Accuracy varies a lot depending on the country, the address format, and the quality of the input data.&lt;/strong&gt; A provider that works great for residential addresses might struggle with POI inputs. And it works the other way too: some free, official APIs (like government address registries) outperform paid commercial ones on their home turf. Beyond accuracy, cost and usage rights also differ significantly between providers.&lt;/p&gt;
&lt;p&gt;That is why knowing which provider &lt;strong&gt;performs best on &lt;em&gt;your&lt;/em&gt; data matters&lt;/strong&gt;. We built a free tool so you can find out in a few minutes, without writing any code and without providing your own API keys.&lt;/p&gt;
&lt;div class="toc"&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://coordable.co/blog/free-tool-benchmark-geocoding-providers/#why-we-built-it"&gt;Why we built it&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://coordable.co/blog/free-tool-benchmark-geocoding-providers/#how-the-benchmark-tool-works"&gt;How the benchmark tool works&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://coordable.co/blog/free-tool-benchmark-geocoding-providers/#example-1-500-us-addresses"&gt;Example 1: 500 US addresses&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://coordable.co/blog/free-tool-benchmark-geocoding-providers/#example-2-300-french-addresses-mixed-pois-and-house-addresses"&gt;Example 2: 300 French addresses (mixed POIs and house addresses)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://coordable.co/blog/free-tool-benchmark-geocoding-providers/#conclusion"&gt;Conclusion&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://coordable.co/blog/free-tool-benchmark-geocoding-providers/#where-to-go-from-here"&gt;Where to go from here&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;hr&gt;
&lt;h3 id="how-the-benchmark-tool-works"&gt;How the benchmark tool works&lt;/h3&gt;
&lt;p&gt;You upload a CSV (or Excel file, up to 500 rows), map the columns that form your addresses, and select the providers you want to compare. We run the geocoding on our side; no account, no API keys required from you. The whole thing takes a few minutes. You get a side-by-side accuracy and cost breakdown for each provider, plus a full report by email.&lt;/p&gt;
&lt;figure&gt;
  &lt;img src="https://coordable.co/images/benchmark-free-tool/upload-screenshot.png" alt="Benchmark tool upload step: drag and drop a CSV, select address columns, pick providers, optional email for the report"&gt;
  &lt;figcaption&gt;Upload a dataset, map address columns, select providers, and start. No API keys required on your side.&lt;/figcaption&gt;
&lt;/figure&gt;

&lt;p&gt;One important detail: &lt;strong&gt;we do not count every response as a success&lt;/strong&gt;. A result is considered valid only if it returns a house number, a street name, and a confidence above 80%. For &lt;a href="https://coordable.co/provider/google-maps-geocoding-api/"&gt;Google&lt;/a&gt;, we also discard &lt;code&gt;GEOMETRIC_CENTER&lt;/code&gt; and &lt;code&gt;APPROXIMATE&lt;/code&gt; precision types; these place a point somewhere vaguely in an area, which is not useful for industries that need a precise location (logistics, real estate, route planning, insurance).&lt;/p&gt;
&lt;p&gt;Accepting every returned coordinate would artificially inflate accuracy scores and hide the silent errors that eventually cause real problems downstream. That's actually a more common problem than you might think: &lt;strong&gt;geocoding providers often return false results, and detecting them is not easy&lt;/strong&gt;. Using confidence scores and other quality rules is the only way to avoid this.&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id="example-1-500-us-addresses"&gt;Example 1: 500 US addresses&lt;/h3&gt;
&lt;p&gt;The first dataset is 500 well-formed US street addresses, the kind of clean, structured input that geocoding providers generally handle best.&lt;/p&gt;
&lt;figure&gt;
  &lt;img src="https://coordable.co/images/benchmark-free-tool/us-benchmark-1.png" alt="US benchmark results: per-provider accuracy and cost, and Coordable Cascading at 98.8% with large cost reduction"&gt;
  &lt;figcaption&gt;Results for 500 US addresses: per-provider accuracy, estimated cost, and Coordable Cascading with +1.4 pts and -97% cost vs a Google-only approach.&lt;/figcaption&gt;
&lt;/figure&gt;

&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Provider&lt;/th&gt;
&lt;th&gt;Accuracy&lt;/th&gt;
&lt;th&gt;Cost per request&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;HERE&lt;/td&gt;
&lt;td&gt;97.4%&lt;/td&gt;
&lt;td&gt;$0.0008&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Mapbox&lt;/td&gt;
&lt;td&gt;96.8%&lt;/td&gt;
&lt;td&gt;$0.0008&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;US Census&lt;/td&gt;
&lt;td&gt;92.2%&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;Free&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Google Geocoding&lt;/td&gt;
&lt;td&gt;91.2%&lt;/td&gt;
&lt;td&gt;$0.0050&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;OpenCage&lt;/td&gt;
&lt;td&gt;80.6%&lt;/td&gt;
&lt;td&gt;$0.0002&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Coordable Cascading&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;98.8%&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;~$0.0000&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;Two things stand out. First, HERE outperformed Google by 6 percentage points, while costing 6x less. Second, the US Census (a free, public API that requires no account or key) scored 92.2%, beating Google on this dataset. That is not a fluke: the Census Geocoder is built on TIGER/Line, the official US address dataset, and it handles clean residential addresses very well. We have written more about this in &lt;a href="https://coordable.co/blog/how-to-cut-geocoding-costs-by-90-for-us-addresses-census-google-maps/"&gt;a dedicated comparison&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Running all five providers through Coordable Cascading brought accuracy to 98.8% (494/500 matched) at almost $0 effective cost per request, because US Census resolved the bulk of the file at no charge and the cascade only paid commercial rates for the small fraction it could not handle. That is +1.4 points over the best single provider and -97% cost compared to routing everything through Google.&lt;/p&gt;
&lt;p&gt;See &lt;a href="https://coordable.co/blog/geocoding-prices-2026/"&gt;geocoding prices in 2026&lt;/a&gt; for a full price comparison.&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id="example-2-300-french-addresses-mixed-pois-and-house-addresses"&gt;Example 2: 300 French addresses (mixed POIs and house addresses)&lt;/h3&gt;
&lt;p&gt;The second dataset is more representative of real-world messiness: 300 French rows mixing residential house addresses with POIs (streets, neighbourhoods, landmarks, business names). No clean housenumber in many rows.&lt;/p&gt;
&lt;figure&gt;
  &lt;img src="https://coordable.co/images/benchmark-free-tool/fr-benchmark-2.png" alt="French benchmark: Google 70.7% vs BAN 54.3% and Coordable Cascading 76.3% with -93% cost"&gt;
  &lt;figcaption&gt;Results for 300 French rows: Google leads single providers on mixed inputs; Coordable Cascading adds +5.6 pts and cuts cost by 93%.&lt;/figcaption&gt;
&lt;/figure&gt;

&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Provider&lt;/th&gt;
&lt;th&gt;Accuracy&lt;/th&gt;
&lt;th&gt;Cost per request&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Google Geocoding&lt;/td&gt;
&lt;td&gt;70.7%&lt;/td&gt;
&lt;td&gt;$0.0050&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;HERE&lt;/td&gt;
&lt;td&gt;67.3%&lt;/td&gt;
&lt;td&gt;$0.0008&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Mapbox&lt;/td&gt;
&lt;td&gt;62.0%&lt;/td&gt;
&lt;td&gt;$0.0008&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;French BAN&lt;/td&gt;
&lt;td&gt;54.3%&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;Free&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;OpenCage&lt;/td&gt;
&lt;td&gt;31.3%&lt;/td&gt;
&lt;td&gt;$0.0002&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Coordable Cascading&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;76.3%&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;~$0.0004&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;Google leads here, which makes sense: it handles POIs, business names, and loose address formats better than most providers. The &lt;a href="https://coordable.co/blog/how-to-geocode-with-ban/"&gt;French BAN&lt;/a&gt; (the official national address registry, free to use) scores 54.3%, not because it is inaccurate on house addresses, but because it rejects anything that does not look like a structured housenumber + street address. Streets, neighbourhoods, and POI-style rows all come back empty under our strict quality rules. On a dataset of pure French residential addresses, BAN alone typically reaches well above 90%.&lt;/p&gt;
&lt;p&gt;The headline numbers stay in the 70% range for this dataset, and that is honest: our quality bar is strict, and mixed input data is genuinely harder. Coordable Cascading reached 76.3% (229/300), +5.6 points over Google, at around $0.0004 per request (a 93% cost reduction). BAN handled the house addresses it could resolve for free; commercial providers covered the rest.&lt;/p&gt;
&lt;p&gt;More context on French provider performance: &lt;a href="https://coordable.co/country-analysis/best-geocoding-providers-france/"&gt;best geocoding providers for France&lt;/a&gt; and &lt;a href="https://coordable.co/blog/how-to-reduce-geocoding-costs-by-67/"&gt;how we cut French geocoding cost by 67%&lt;/a&gt;.&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id="conclusion"&gt;Conclusion&lt;/h3&gt;
&lt;p&gt;I hope these two examples show how much results can vary from one dataset to another. There is rarely a clear winner among commercial providers, even though some do a genuinely great job. The better strategy is to &lt;strong&gt;combine several providers&lt;/strong&gt;: take advantage of the strengths of each, and prioritize the cheapest ones first. This approach, cascading geocoders, helps reduce the number of incorrect or unmatched geocodings while &lt;strong&gt;drastically cutting costs&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;What works best truly depends on your country, your address quality, and your specific use case. For example, a clean dataset of US residential addresses is a very different challenge from a mixed French file containing POIs, street-level inputs, neighborhood names, or business names. The right cascade or provider combination for one scenario might &lt;strong&gt;not suit the other&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;That’s exactly why we built this tool: &lt;strong&gt;your results will depend on your actual data and your context&lt;/strong&gt;. Run it on your own files and see what happens—you may discover that a free public API covers most of your addresses, or that a cheaper commercial provider outperforms the one you're currently paying for. Ultimately, the best strategy is tailored to your country and input quality: experiment, compare, and don’t assume a single provider (or cascade) will be optimal in every situation.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://app.coordable.co/compare" class="learn-more-btn"&gt;Open the free benchmark tool&lt;/a&gt;&lt;/p&gt;

&lt;hr&gt;
&lt;h3 id="where-to-go-from-here"&gt;Where to go from here&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://coordable.co/blog/how-to-cut-geocoding-costs-by-90-for-us-addresses-census-google-maps/"&gt;US Census + Google: how to cut US geocoding cost by 90%&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://coordable.co/blog/how-to-reduce-geocoding-costs-by-67/"&gt;How to reduce geocoding costs by 67% (France, BAN + Google + HERE)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://coordable.co/blog/how-to-geocode-with-ban/"&gt;How to geocode addresses with the French BAN API&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://coordable.co/provider/google-maps-geocoding-api/"&gt;Google Maps Geocoding API&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://coordable.co/provider/here-geocoding-api/"&gt;HERE Geocoding API&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://coordable.co/country-analysis/best-geocoding-providers-france/"&gt;Best geocoding providers for France&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://coordable.co/blog/geocoding-prices-2026/"&gt;Geocoding prices in 2026&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description><category>accuracy</category><category>benchmark</category><category>cascading</category><category>geocoding</category><category>providers</category><category>tools</category><guid>https://coordable.co/blog/free-tool-benchmark-geocoding-providers/</guid><pubDate>Fri, 24 Apr 2026 10:00:00 GMT</pubDate></item><item><title>When a bad geocode changes your flood risk classification</title><link>https://coordable.co/blog/geocoding-ppri-insurance-impact-2026/</link><dc:creator>Julien Crétin</dc:creator><description>&lt;p&gt;French home insurers don't price flood risk by intuition. They price it by zone, specifically by the PPRI (Plan de Prévention des Risques d'Inondation), a government-issued flood risk map that classifies every address in France into one of three statuses: &lt;em&gt;Risque Existant&lt;/em&gt; (known flood zone), &lt;em&gt;Risque non Connu&lt;/em&gt; (municipality at risk, precise address not mapped), or no risk.&lt;/p&gt;
&lt;p&gt;The classification feeds directly into the premium. A property in a &lt;em&gt;Risque Existant&lt;/em&gt; zone typically carries a 10 to 30% surcharge on the natural disaster component of the home insurance premium, and in high-risk zones, coverage can be refused altogether.&lt;/p&gt;
&lt;p&gt;What happens when the geocode is wrong? We tested 300 addresses where two geocoders disagreed; &lt;strong&gt;1 in 7 ended up in a different PPRI classification&lt;/strong&gt; depending on which one was used.&lt;/p&gt;
&lt;div class="toc"&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://coordable.co/blog/geocoding-ppri-insurance-impact-2026/#the-mechanics"&gt;The mechanics&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://coordable.co/blog/geocoding-ppri-insurance-impact-2026/#what-we-measured"&gt;What we measured&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://coordable.co/blog/geocoding-ppri-insurance-impact-2026/#three-cases"&gt;Three cases&lt;/a&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href="https://coordable.co/blog/geocoding-ppri-insurance-impact-2026/#case-1-loire-atlantique-dept-44-13-km-flood-zone-missed"&gt;Case 1 — Loire-Atlantique (dept. 44): 1.3 km, flood zone missed&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://coordable.co/blog/geocoding-ppri-insurance-impact-2026/#case-2-vendee-dept-85-11-km-flood-zone-added"&gt;Case 2 — Vendée (dept. 85): 1.1 km, flood zone added&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://coordable.co/blog/geocoding-ppri-insurance-impact-2026/#case-3-moselle-dept-57-three-addresses-same-divergence-pattern"&gt;Case 3 — Moselle (dept. 57): three addresses, same divergence pattern&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="https://coordable.co/blog/geocoding-ppri-insurance-impact-2026/#what-this-means-for-a-portfolio-audit"&gt;What this means for a portfolio audit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://coordable.co/blog/geocoding-ppri-insurance-impact-2026/#running-an-audit-on-your-portfolio"&gt;Running an audit on your portfolio&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://coordable.co/blog/geocoding-ppri-insurance-impact-2026/#methodology-note"&gt;Methodology note&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;hr&gt;
&lt;h3 id="the-mechanics"&gt;The mechanics&lt;/h3&gt;
&lt;p&gt;One common approach: an insurer's system geocodes the address, converting a street address into latitude/longitude coordinates, then queries the PPRI database with those coordinates. The system trusts the coordinates it receives; it has no way to verify whether the geocode is accurate.&lt;/p&gt;
&lt;p&gt;If the geocode places the address 1.2 km from its actual location, the PPRI query runs against the wrong point on the map. Whether that matters depends entirely on where the wrong point lands: in a flood zone, out of one, or across a municipal boundary where the PPRI itself changes.&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id="what-we-measured"&gt;What we measured&lt;/h3&gt;
&lt;p&gt;We ran 300 French addresses through two geocoders, BAN (Base Adresse Nationale, the French open-source reference) and Google Maps, and queried the Géorisques PPRI API for both coordinate pairs. We selected addresses where the two providers disagreed on location by at least 50 metres.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;1 in 7 addresses ended up in a different PPRI classification&lt;/strong&gt; depending on which geocoder was used.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;That's not 1 in 7 addresses overall. It's 1 in 7 among addresses where the geocoders already disagreed.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;The right question for a portfolio audit isn't "how many addresses have a bad geocode?"; it's "how many addresses have a geocode divergence large enough to cross a PPRI boundary?"&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr&gt;
&lt;h3 id="three-cases"&gt;Three cases&lt;/h3&gt;
&lt;p&gt;&lt;em&gt;On all maps: &lt;/em&gt;&lt;em&gt;orange pin = BAN coordinate&lt;/em&gt;&lt;em&gt;, &lt;/em&gt;&lt;em&gt;green pin = Google coordinate&lt;/em&gt;&lt;em&gt;. Red/blue zones = flood risk areas (PPRI). Source: Géorisques / georisques.gouv.fr · © OpenStreetMap contributors.&lt;/em&gt;&lt;/p&gt;
&lt;h4 id="case-1-loire-atlantique-dept-44-13-km-flood-zone-missed"&gt;Case 1 — Loire-Atlantique (dept. 44): 1.3 km, flood zone missed&lt;/h4&gt;
&lt;p&gt;An address in the Loire-Atlantique estuary area. BAN placed it at 47.2807°N, 2.4322°W, in a known flood zone (&lt;em&gt;Risque Existant&lt;/em&gt;). Google placed it at 47.2691°N, 2.4331°W, 1,294 metres away, outside the mapped zone (&lt;em&gt;Risque non Connu&lt;/em&gt;). BAN confidence score: 0.681.&lt;/p&gt;
&lt;p&gt;&lt;img alt="Case 1, Loire-Atlantique: BAN (orange) in flood zone, Google (green) outside. Gap: 1,294 m." src="https://coordable.co/images/geocoding-ppri-insurance-impact-2026/ppri_case1_loire_atlantique.png"&gt;&lt;/p&gt;
&lt;p&gt;An insurer using Google's coordinates would classify this property as outside the flood zone. No surcharge. Potentially a significant underpricing of risk.&lt;/p&gt;
&lt;hr&gt;
&lt;h4 id="case-2-vendee-dept-85-11-km-flood-zone-added"&gt;Case 2 — Vendée (dept. 85): 1.1 km, flood zone added&lt;/h4&gt;
&lt;p&gt;An address on the Vendée coast. BAN placed it at 46.4963°N, 1.8072°W, outside the mapped flood zone (&lt;em&gt;Risque non Connu&lt;/em&gt;). Google placed it at 46.4974°N, 1.7925°W, 1,135 metres away, inside a flood zone (&lt;em&gt;Risque Existant&lt;/em&gt;). BAN confidence score: 0.702.&lt;/p&gt;
&lt;p&gt;&lt;img alt="Case 2, Vendée: BAN (orange) outside flood zone, Google (green) inside. Gap: 1,135 m." src="https://coordable.co/images/geocoding-ppri-insurance-impact-2026/ppri_case2_vendee.png"&gt;&lt;/p&gt;
&lt;p&gt;Here the error runs in the other direction. An insurer using BAN would miss the flood zone entirely, no surcharge applied to a property that should carry one. A loss exposure that doesn't show up in the underwriting model.&lt;/p&gt;
&lt;hr&gt;
&lt;h4 id="case-3-moselle-dept-57-three-addresses-same-divergence-pattern"&gt;Case 3 — Moselle (dept. 57): three addresses, same divergence pattern&lt;/h4&gt;
&lt;p&gt;Three addresses on the same street in the Moselle valley showed a consistent 1,850 to 1,900 metre gap between BAN and Google. All three: BAN in a flood zone (&lt;em&gt;Risque Existant&lt;/em&gt;), Google outside (&lt;em&gt;Risque non Connu&lt;/em&gt;). BAN score: 0.551.&lt;/p&gt;
&lt;p&gt;&lt;img alt="Case 3, Moselle: three addresses (orange = BAN, green = Google) showing the same systematic divergence. Gap: ~1,880 m." src="https://coordable.co/images/geocoding-ppri-insurance-impact-2026/ppri_case3_moselle.png"&gt;&lt;/p&gt;
&lt;p&gt;This is the pattern that matters at portfolio scale. A single address with a bad geocode is a one-off. Three addresses with the same systematic divergence, likely sharing a street, a building, or a postal code, suggest a structured data quality problem that will recur across every address in that zone.&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id="what-this-means-for-a-portfolio-audit"&gt;What this means for a portfolio audit&lt;/h3&gt;
&lt;p&gt;The 14.5% reclassification rate we observed applies to addresses with a known geocoding divergence. The prior question, how many addresses in a typical insurance portfolio have a divergence large enough to matter, is the one worth answering first.&lt;/p&gt;
&lt;p&gt;Our benchmark on 10,000 French addresses suggests that roughly 3% produce a gap of 500 metres or more between BAN and a premium provider. Applied to a portfolio of 1,000,000 home insurance policies, that's approximately 30,000 addresses worth auditing.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;At a 14.5% reclassification rate: &lt;strong&gt;roughly 4,350 policies may be incorrectly classified for flood risk&lt;/strong&gt;. For the subset under-classified as standard risk, the annual premium shortfall runs from €33,000 to €196,000. Beyond the premium impact, these policies carry an unrecognised claims exposure: at a conservative 1% annual flood event probability, roughly 20 under-classified policies will generate a claim in any given year, each potentially running to €20,000 to €80,000 in damages on a contract priced for standard risk.&lt;/p&gt;
&lt;p&gt;A geocoding audit doesn't require re-underwriting the entire portfolio. It requires identifying the addresses where the geocode is uncertain enough to cross a risk boundary, and those addresses are identifiable before any claim is filed.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;The signal is already in your data: the BAN confidence score. Addresses with a score below 0.7 are the ones most likely to produce a divergence large enough to matter. In our sample, every fine-category reclassification came from an address with a BAN score below 0.71.&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id="running-an-audit-on-your-portfolio"&gt;Running an audit on your portfolio&lt;/h3&gt;
&lt;p&gt;One simplified approach for a portfolio audit, noting that in practice, any geocoder can be wrong, and more robust workflows would cross-reference three or more providers:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Run your address file through BAN and flag addresses with a confidence score below 0.7&lt;/li&gt;
&lt;li&gt;For flagged addresses, run a secondary geocoder and compute the coordinate gap&lt;/li&gt;
&lt;li&gt;For addresses with a gap above ~500 metres, query the PPRI API for both coordinate pairs&lt;/li&gt;
&lt;li&gt;Surface the cases where the two coordinates produce different PPRI classifications&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Steps 1 to 3 can be automated with a cascading geocoding pipeline. Step 4 is a one-time enrichment.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Coordable&lt;/strong&gt; builds multi-provider geocoding pipelines that automate exactly this kind of cascade, surfacing address uncertainty before it becomes a classification error. If you're thinking about a portfolio audit, &lt;a href="mailto:contact@coordable.co"&gt;we'd be happy to talk through the approach&lt;/a&gt;.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr&gt;
&lt;h3 id="methodology-note"&gt;Methodology note&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;Dataset:&lt;/strong&gt; 300 French addresses drawn from the ADEME DPE database (10,000-address stratified sample across urban and rural zones), geocoded with BAN and Google Maps. Only addresses where both providers returned valid French metropolitan coordinates were included.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Selection:&lt;/strong&gt; Addresses split into two groups, &lt;em&gt;fine&lt;/em&gt; (50m to 2km gap, 200 addresses) and &lt;em&gt;gross&lt;/em&gt; (2km to 50km gap, 100 addresses). Gaps above 50km excluded as geocoding errors.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;PPRI API:&lt;/strong&gt; Géorisques &lt;code&gt;/api/v1/resultats_rapport_risque&lt;/code&gt;, queried for both coordinate pairs. 72 of 300 address pairs returned network errors (24%), reducing the effective sample. 3 communes returned HTTP 404 (no PPRI data available).&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Reclassification rate:&lt;/strong&gt; Computed on address pairs where both coordinates returned a valid, non-null PPRI status. "Risque Inconnu" normalised to "Risque non Connu" (API variant).&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;&lt;em&gt;This post is part of a series on geocoding quality in French operations. For the cost impact on last-mile logistics, see our &lt;a href="https://coordable.co/blog/cost-failed-delivery-urban-europe-2026/"&gt;failed delivery cost models&lt;/a&gt; and &lt;a href="https://coordable.co/blog/geocoding-routing-impact-france-2026/"&gt;routing impact benchmark&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;</description><category>address quality</category><category>flood risk</category><category>geocoding</category><category>insurance</category><category>PPRI</category><guid>https://coordable.co/blog/geocoding-ppri-insurance-impact-2026/</guid><pubDate>Sun, 19 Apr 2026 08:00:00 GMT</pubDate></item><item><title>Your routing engine is only as good as your coordinates</title><link>https://coordable.co/blog/geocoding-routing-impact-france-2026/</link><dc:creator>Julien Crétin</dc:creator><description>&lt;p&gt;Route optimization gets most of the attention in last-mile logistics. The tooling has become genuinely sophisticated.&lt;/p&gt;
&lt;p&gt;The input data has not received the same scrutiny.&lt;/p&gt;
&lt;p&gt;A routing engine optimizes the problem it is given. When coordinates are off - resolved to the wrong street, the wrong side of a building, or a town center instead of a specific address - the engine is still mathematically correct. It just optimizes the wrong problem. We ran the numbers on what that costs: &lt;strong&gt;up to €18,966/month in avoidable driver time&lt;/strong&gt;, against €165 in geocoding API calls to avoid it.&lt;/p&gt;
&lt;div class="toc"&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://coordable.co/blog/geocoding-routing-impact-france-2026/#the-setup"&gt;The setup&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://coordable.co/blog/geocoding-routing-impact-france-2026/#the-model"&gt;The model&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://coordable.co/blog/geocoding-routing-impact-france-2026/#results"&gt;Results&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://coordable.co/blog/geocoding-routing-impact-france-2026/#the-variance-problem-and-why-it-matters"&gt;The variance problem — and why it matters&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://coordable.co/blog/geocoding-routing-impact-france-2026/#projection-45000-deliveries-per-month"&gt;Projection — 45,000 deliveries per month&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://coordable.co/blog/geocoding-routing-impact-france-2026/#what-the-routing-engine-cannot-fix"&gt;What the routing engine cannot fix&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://coordable.co/blog/geocoding-routing-impact-france-2026/#limitations"&gt;Limitations&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://coordable.co/blog/geocoding-routing-impact-france-2026/#want-to-fix-the-input-not-the-algorithm"&gt;Want to fix the input, not the algorithm?&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://coordable.co/blog/geocoding-routing-impact-france-2026/#methodology"&gt;Methodology&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://coordable.co/blog/geocoding-routing-impact-france-2026/#note-on-geocoding-cost-estimates"&gt;Note on geocoding cost estimates&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;hr&gt;
&lt;h3 id="the-setup"&gt;The setup&lt;/h3&gt;
&lt;p&gt;We used the same 10,000 French addresses from our &lt;a href="https://coordable.co/blog/geocoding-ban-google-benchmark-france-2026/"&gt;geocoding benchmark&lt;/a&gt; (DPE database, stratified by density zone). For each address, we had two sets of coordinates: BAN results and Google results.&lt;/p&gt;
&lt;p&gt;Two categories matter here: degraded stops (low BAN score) and risky stops (degraded + gap &amp;gt; 100m). The second is the operational problem. The first is the signal that predicts it.&lt;/p&gt;
&lt;p&gt;Degraded addresses: BAN confidence score below 0.7. In our benchmark, 20–40% of these show a coordinate gap above 100 metres - the threshold above which a driver can no longer reliably locate the right building. The lower the score, the higher the proportion of large divergences.&lt;/p&gt;
&lt;p&gt;We ran the simulation on 10 routes per zone, using actual stop counts representative of each context. Each route was drawn from a geographically constrained pool - stops selected within a realistic radius around a random centroid, to reflect actual last-mile clustering rather than department-wide dispersion.&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Zone&lt;/th&gt;
&lt;th&gt;Dept&lt;/th&gt;
&lt;th&gt;Radius&lt;/th&gt;
&lt;th&gt;Stops per route&lt;/th&gt;
&lt;th&gt;Degraded stops (avg)&lt;/th&gt;
&lt;th&gt;Risky stops (avg)&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;1 — Dense urban&lt;/td&gt;
&lt;td&gt;92&lt;/td&gt;
&lt;td&gt;8 km&lt;/td&gt;
&lt;td&gt;25&lt;/td&gt;
&lt;td&gt;24.6 (98%)&lt;/td&gt;
&lt;td&gt;4.1&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;2 — Peri-urban&lt;/td&gt;
&lt;td&gt;60&lt;/td&gt;
&lt;td&gt;15 km&lt;/td&gt;
&lt;td&gt;20&lt;/td&gt;
&lt;td&gt;10.1 (51%)&lt;/td&gt;
&lt;td&gt;2.8&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;3 — Rural&lt;/td&gt;
&lt;td&gt;85&lt;/td&gt;
&lt;td&gt;20 km&lt;/td&gt;
&lt;td&gt;12&lt;/td&gt;
&lt;td&gt;7.0 (58%)&lt;/td&gt;
&lt;td&gt;4.8&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;hr&gt;
&lt;h3 id="the-model"&gt;The model&lt;/h3&gt;
&lt;p&gt;Route planning uses BAN coordinates throughout - this is the realistic scenario where an operator geocodes addresses once and builds routes on the result.&lt;/p&gt;
&lt;p&gt;When a driver arrives at a risky stop, two things happen. First, the coordinates are off by more than 100 metres: the driver spends time searching for the right building or entrance. We model this conservatively at 3 minutes per stop. Second, once the driver locates the actual address, they need to travel from the real position to the next stop in the planned sequence - a sequence that was built around the BAN coordinates, not the real ones.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;This second cost is the one that is almost never accounted for. The routing engine planned a direct path from stop A to stop B. In reality, the driver leaves stop A, travels to the actual building, makes the delivery, then drives to stop B - from the wrong starting point. The detour compounds across every risky stop in the route.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;img alt="Routing detour — planned route (blue, 29 min / 7.3 km) vs actual route (orange, 48 min / 16.4 km) caused by a 1,542 m geocoding gap. Route 9, Stop 3, Seine-Saint-Denis." src="https://coordable.co/images/geocoding-routing-impact-france-2026/routing_detour_case_r9s3.png"&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Route 9, Stop 3 - Seine-Saint-Denis (93) - BAN score 0.587 - Gap BAN vs Google: 1,542 m - Map: Leaflet · © OpenStreetMap contributors · © CARTO.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;We computed this detour using road distances from OpenRouteService Directions API for each risky stop individually. Route planning used OpenRouteService Matrix API.&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id="results"&gt;Results&lt;/h3&gt;
&lt;p&gt;Before the numbers: the dense urban figure (+19.7 km) is higher than other contexts in our simulations. In dense urban areas, large geocoding errors tend to resolve to a different street or neighborhood entirely - likely failed deliveries rather than recoverable detours. The peri-urban and rural figures are more representative of typical detour costs.&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Zone&lt;/th&gt;
&lt;th&gt;Risky stops (avg)&lt;/th&gt;
&lt;th&gt;Extra distance (median)&lt;/th&gt;
&lt;th&gt;Extra time (median)&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;1 — Dense urban&lt;/td&gt;
&lt;td&gt;4.1&lt;/td&gt;
&lt;td&gt;+19.7 km&lt;/td&gt;
&lt;td&gt;+55.7 min&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;2 — Peri-urban&lt;/td&gt;
&lt;td&gt;2.8&lt;/td&gt;
&lt;td&gt;+1.9 km&lt;/td&gt;
&lt;td&gt;+10.3 min&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;3 — Rural&lt;/td&gt;
&lt;td&gt;4.8&lt;/td&gt;
&lt;td&gt;+3.8 km&lt;/td&gt;
&lt;td&gt;+29.1 min&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Zone&lt;/th&gt;
&lt;th&gt;Cost per route&lt;/th&gt;
&lt;th&gt;Google fallback cost&lt;/th&gt;
&lt;th&gt;ROI&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;1 — Dense urban&lt;/td&gt;
&lt;td&gt;€15.61&lt;/td&gt;
&lt;td&gt;€0.12&lt;/td&gt;
&lt;td&gt;126x&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;2 — Peri-urban&lt;/td&gt;
&lt;td&gt;€5.14&lt;/td&gt;
&lt;td&gt;€0.08&lt;/td&gt;
&lt;td&gt;65x&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;3 — Rural&lt;/td&gt;
&lt;td&gt;€7.94&lt;/td&gt;
&lt;td&gt;€0.06&lt;/td&gt;
&lt;td&gt;138x&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;em&gt;Costs based on €17/h fully loaded driver cost (French CCN Transport 2025). Google fallback cost: €0.005/call applied to degraded stops only.&lt;/em&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;For every euro spent routing degraded addresses through a quality geocoder as fallback, between €65 and €138 in driver time is avoided.&lt;/strong&gt; The rural zone shows the highest ROI at 138x - a combination of high degradation rate (58% of stops) and the relative cost of re-routing in areas where roads are less redundant.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;strong&gt;A note on the dense urban zone.&lt;/strong&gt; The urban figures should be read as a combined effect of detours and likely failed deliveries - not detours alone. For the cost of those failures, see our &lt;a href="https://coordable.co/blog/cost-failed-delivery-urban-europe-2026/"&gt;urban&lt;/a&gt; and &lt;a href="https://coordable.co/blog/cost-failed-delivery-peri-urban-europe-2026/"&gt;peri-urban&lt;/a&gt; models.&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id="the-variance-problem-and-why-it-matters"&gt;The variance problem — and why it matters&lt;/h3&gt;
&lt;blockquote&gt;
&lt;p&gt;Results vary significantly between routes in the same zone. A rural route with 7 risky stops generates +10.9 km of extra distance. Another with 0 risky stops generates nothing. This is not noise - it is the actual distribution.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;The implication is that average-based cost estimates understate the tail risk. An operator running 100 routes per day will occasionally have routes that cost €20–25 in extra time due to coordinate errors alone.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Those routes are invisible in the planning system. They show up as driver delay, late deliveries, and overtime - attributed to traffic or difficulty, not to data quality.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr&gt;
&lt;h3 id="projection-45000-deliveries-per-month"&gt;Projection — 45,000 deliveries per month&lt;/h3&gt;
&lt;p&gt;Assuming a typical French last-mile operator with a mix of urban (40%), peri-urban (30%), and rural (20%) deliveries:&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Zone&lt;/th&gt;
&lt;th&gt;Deliveries/month&lt;/th&gt;
&lt;th&gt;Degraded stops&lt;/th&gt;
&lt;th&gt;Extra km&lt;/th&gt;
&lt;th&gt;Extra time&lt;/th&gt;
&lt;th&gt;Cost of degradation&lt;/th&gt;
&lt;th&gt;Fallback cost&lt;/th&gt;
&lt;th&gt;Net saving&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;1 — Dense urban&lt;/td&gt;
&lt;td&gt;20,000&lt;/td&gt;
&lt;td&gt;19,680&lt;/td&gt;
&lt;td&gt;15,526 km&lt;/td&gt;
&lt;td&gt;44,064 min&lt;/td&gt;
&lt;td&gt;€12,485&lt;/td&gt;
&lt;td&gt;€98&lt;/td&gt;
&lt;td&gt;€12,386&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;2 — Peri-urban&lt;/td&gt;
&lt;td&gt;15,000&lt;/td&gt;
&lt;td&gt;7,575&lt;/td&gt;
&lt;td&gt;2,669 km&lt;/td&gt;
&lt;td&gt;13,598 min&lt;/td&gt;
&lt;td&gt;€3,853&lt;/td&gt;
&lt;td&gt;€38&lt;/td&gt;
&lt;td&gt;€3,815&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;3 — Rural&lt;/td&gt;
&lt;td&gt;10,000&lt;/td&gt;
&lt;td&gt;5,833&lt;/td&gt;
&lt;td&gt;2,013 km&lt;/td&gt;
&lt;td&gt;9,275 min&lt;/td&gt;
&lt;td&gt;€2,628&lt;/td&gt;
&lt;td&gt;€29&lt;/td&gt;
&lt;td&gt;€2,599&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Total&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;45,000&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;33,088&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;20,208 km&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;66,937 min&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;€18,966&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;€165&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;€18,800&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;For routing detours alone (peri-urban + rural): €6,481/month against €67 in fallback costs - a 97:1 ratio.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;The urban figure (€12,485) includes large geocoding errors that likely result in failed deliveries rather than recoverable detours - bringing the total to €18,966. For the cost of those failures, see our &lt;a href="https://coordable.co/blog/cost-failed-delivery-urban-europe-2026/"&gt;urban&lt;/a&gt; and &lt;a href="https://coordable.co/blog/cost-failed-delivery-peri-urban-europe-2026/"&gt;peri-urban&lt;/a&gt; cost models.&lt;/p&gt;
&lt;p&gt;At scale, address quality is not a data engineering concern. It is a P&amp;amp;L line.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr&gt;
&lt;h3 id="what-the-routing-engine-cannot-fix"&gt;What the routing engine cannot fix&lt;/h3&gt;
&lt;p&gt;A routing engine optimizes the problem it is given. If the input coordinates are degraded, the optimization is degraded - and the optimizer has no way to know.&lt;/p&gt;
&lt;p&gt;No amount of algorithmic sophistication changes this. A state-of-the-art solver running on wrong coordinates produces a worse result than a simple nearest-neighbor heuristic running on correct ones. The quality of the output is bounded by the quality of the input.&lt;/p&gt;
&lt;p&gt;In French last-mile logistics, degraded geocoding costs approximately &lt;strong&gt;€0.60 per degraded stop&lt;/strong&gt; in extra driver time, against a fallback cost of €0.005. The ratio holds across all three geographic contexts tested.&lt;/p&gt;
&lt;p&gt;The fix is not a better routing engine. It is better coordinates going in.&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id="limitations"&gt;Limitations&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;3-minute search penalty is a floor, not an average.&lt;/strong&gt; The 3-minute search penalty per risky stop is deliberately conservative - the actual cost is likely higher in areas where buildings are not clearly numbered or GPS signal is unreliable.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Simulated routes, not observed ones.&lt;/strong&gt; Routes were generated by OR-Tools on real addresses, not drawn from actual carrier data. Real routes may have different stop density, time window constraints, and geographic clustering.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Deviations modeled in isolation.&lt;/strong&gt; In practice, a driver who arrives at the wrong location may also affect the next 2–3 stops through cascade delays - the same dynamic documented in our &lt;a href="https://coordable.co/blog/cost-failed-delivery-urban-europe-2026/"&gt;failed delivery cost models&lt;/a&gt;. We modeled only the direct detour cost, not the downstream schedule disruption.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Google as the reference.&lt;/strong&gt; We use Google coordinates as the reference position for risky stops. Google can also be wrong - as documented in our benchmark, 0.76% of Google results were located outside France entirely. The model assumes Google is correct where BAN is degraded, which is an approximation.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Deep rural zone excluded.&lt;/strong&gt; The deep rural zone showed insufficient risky stops per route to generate a reliable signal. The projection covers 45,000 of the assumed 50,000 monthly deliveries.&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id="want-to-fix-the-input-not-the-algorithm"&gt;Want to fix the input, not the algorithm?&lt;/h3&gt;
&lt;p&gt;If you're working on route optimization and want to understand where coordinate quality is limiting your results, we'd be happy to talk through your setup.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Coordable&lt;/strong&gt; builds multi-provider geocoding pipelines that automatically route degraded addresses through a quality fallback - so your routing engine gets the right coordinates from the start. &lt;a href="mailto:contact@coordable.co"&gt;Get in touch&lt;/a&gt; to run the numbers on your own operation.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr&gt;
&lt;h3 id="methodology"&gt;Methodology&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;Dataset:&lt;/strong&gt; 10,000 French addresses from the ADEME DPE database (existing residential buildings, post-July 2021). Stratified sample across four INSEE density zones. Zones tested: Dept 92 (dense urban), Dept 60 (peri-urban), Dept 85 (rural).&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Geographic constraint:&lt;/strong&gt; Each route drawn from addresses within a fixed radius of a randomly selected centroid - 8 km (urban), 15 km (peri-urban), 20 km (rural). Routes with geographic span exceeding 2× the radius were discarded.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Route simulation:&lt;/strong&gt; OR-Tools (Google) with PATH_CHEAPEST_ARC + GUIDED_LOCAL_SEARCH, 10-second time limit per route. Route planning distances from OpenRouteService Matrix API (driving-car profile). Depot set to centroid of each route's stops.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Degraded stops:&lt;/strong&gt; BAN confidence score &amp;lt; 0.7. Validated as predictive of significant coordinate divergence in benchmark analysis.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Risky stops:&lt;/strong&gt; Degraded stops where BAN↔Google Haversine distance ≥ 100m.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Deviation cost:&lt;/strong&gt; For each risky stop, extra distance = road_distance(BAN → Google) + road_distance(Google → next_BAN) − road_distance(BAN → next_BAN). Road distances from OpenRouteService Directions API. Fallback to Haversine × 1.3 when ORS unavailable. Time cost = extra travel time + 3 min on-site search per risky stop.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Driver cost:&lt;/strong&gt; €17/h fully loaded (French CCN Transport routier, 2025, including employer social charges at ~30%).&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Google fallback cost:&lt;/strong&gt; €0.005/call (Google Geocoding API standard pricing), applied only to degraded stops.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Projection figures:&lt;/strong&gt; Based on medians. Extrapolated linearly from simulated routes.&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id="note-on-geocoding-cost-estimates"&gt;Note on geocoding cost estimates&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;Geocoding pipeline cost&lt;/strong&gt; - Estimated using BAN (free, open source) as primary geocoder, with a premium provider (Google Geocoding API, ~€0.005/address) triggered only on addresses where BAN confidence score falls below 0.7 - roughly 15-20% of a typical French address file. This cascading approach is the architecture Coordable is built around: &lt;a href="https://coordable.co"&gt;coordable.co&lt;/a&gt;.&lt;/p&gt;</description><category>address quality</category><category>geocoding</category><category>last-mile</category><category>logistics costs</category><category>routing</category><guid>https://coordable.co/blog/geocoding-routing-impact-france-2026/</guid><pubDate>Tue, 14 Apr 2026 14:00:00 GMT</pubDate></item><item><title>String Distance Metrics for Address Comparison: Levenshtein, Damerau, Jaro, and Jaro-Winkler</title><link>https://coordable.co/blog/string-distance-metrics-address-comparison/</link><dc:creator>François Andrieux</dc:creator><description>&lt;h3 id="comparing-addresses-is-not-a-simple-equality-check"&gt;Comparing addresses is not a simple equality check&lt;/h3&gt;
&lt;p&gt;When you compare two address strings to decide if they refer to the same location, an exact match is rarely enough. Real-world addresses come with typos, abbreviations, inconsistent casing, and missing components. "15 Baker St" and "15 Baker Street" are the same address, but &lt;code&gt;"15 Baker St" == "15 Baker Street"&lt;/code&gt; evaluates to &lt;code&gt;False&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;String distance metrics can be used to solve this problem. They assign a number to two strings that quantifies how different (or similar) they are. This number lets you set a threshold: "if the distance is less than 2, or the similarity is above 0.9, treat them as the same address."&lt;/p&gt;
&lt;p&gt;In this guide, we cover the four most widely used metrics for address comparison:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Levenshtein distance&lt;/strong&gt; - the classic edit distance&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Damerau-Levenshtein distance&lt;/strong&gt; - edit distance with transpositions&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Jaro similarity&lt;/strong&gt; - character matching with position awareness&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Jaro-Winkler similarity&lt;/strong&gt; - Jaro with a bonus for matching prefixes&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;For each one, we explain how it works, walk through a concrete address example, and discuss when it is (and is not) a good fit. At the end, a summary table and practical recommendations.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Table of contents:&lt;/strong&gt;&lt;/p&gt;
&lt;div class="toc"&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://coordable.co/blog/string-distance-metrics-address-comparison/#comparing-addresses-is-not-a-simple-equality-check"&gt;Comparing addresses is not a simple equality check&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://coordable.co/blog/string-distance-metrics-address-comparison/#a-quick-note-before-diving-in"&gt;A quick note before diving in&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://coordable.co/blog/string-distance-metrics-address-comparison/#1-levenshtein-distance"&gt;1. Levenshtein distance&lt;/a&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href="https://coordable.co/blog/string-distance-metrics-address-comparison/#how-it-works"&gt;How it works&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://coordable.co/blog/string-distance-metrics-address-comparison/#address-example"&gt;Address example&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://coordable.co/blog/string-distance-metrics-address-comparison/#in-python"&gt;In Python&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://coordable.co/blog/string-distance-metrics-address-comparison/#pros-and-cons"&gt;Pros and cons&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://coordable.co/blog/string-distance-metrics-address-comparison/#when-to-use-it-for-addresses"&gt;When to use it for addresses&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="https://coordable.co/blog/string-distance-metrics-address-comparison/#2-damerau-levenshtein-distance"&gt;2. Damerau-Levenshtein distance&lt;/a&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href="https://coordable.co/blog/string-distance-metrics-address-comparison/#how-it-works_1"&gt;How it works&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://coordable.co/blog/string-distance-metrics-address-comparison/#address-example_1"&gt;Address example&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://coordable.co/blog/string-distance-metrics-address-comparison/#in-python_1"&gt;In Python&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://coordable.co/blog/string-distance-metrics-address-comparison/#pros-and-cons_1"&gt;Pros and cons&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://coordable.co/blog/string-distance-metrics-address-comparison/#when-to-use-it-for-addresses_1"&gt;When to use it for addresses&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="https://coordable.co/blog/string-distance-metrics-address-comparison/#3-jaro-similarity"&gt;3. Jaro similarity&lt;/a&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href="https://coordable.co/blog/string-distance-metrics-address-comparison/#how-it-works_2"&gt;How it works&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://coordable.co/blog/string-distance-metrics-address-comparison/#address-example_2"&gt;Address example&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://coordable.co/blog/string-distance-metrics-address-comparison/#in-python_2"&gt;In Python&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://coordable.co/blog/string-distance-metrics-address-comparison/#pros-and-cons_2"&gt;Pros and cons&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://coordable.co/blog/string-distance-metrics-address-comparison/#when-to-use-it-for-addresses_2"&gt;When to use it for addresses&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="https://coordable.co/blog/string-distance-metrics-address-comparison/#4-jaro-winkler-similarity"&gt;4. Jaro-Winkler similarity&lt;/a&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href="https://coordable.co/blog/string-distance-metrics-address-comparison/#how-it-works_3"&gt;How it works&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://coordable.co/blog/string-distance-metrics-address-comparison/#address-example_3"&gt;Address example&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://coordable.co/blog/string-distance-metrics-address-comparison/#in-python_3"&gt;In Python&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://coordable.co/blog/string-distance-metrics-address-comparison/#pros-and-cons_3"&gt;Pros and cons&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://coordable.co/blog/string-distance-metrics-address-comparison/#when-to-use-it-for-addresses_3"&gt;When to use it for addresses&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="https://coordable.co/blog/string-distance-metrics-address-comparison/#summary-table"&gt;Summary table&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://coordable.co/blog/string-distance-metrics-address-comparison/#normalization-the-step-that-matters-more-than-metric-choice"&gt;Normalization: the step that matters more than metric choice&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://coordable.co/blog/string-distance-metrics-address-comparison/#putting-it-all-together-a-complete-address-comparison"&gt;Putting it all together: a complete address comparison&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://coordable.co/blog/string-distance-metrics-address-comparison/#where-to-go-from-here"&gt;Where to go from here&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;hr&gt;
&lt;h3 id="a-quick-note-before-diving-in"&gt;A quick note before diving in&lt;/h3&gt;
&lt;p&gt;There are two flavors of metric:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Distance metrics&lt;/strong&gt; (Levenshtein, Damerau-Levenshtein): return 0 for identical strings, and a higher integer for more different strings. Think of them as counting "how many operations to fix this?"&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Similarity metrics&lt;/strong&gt; (Jaro, Jaro-Winkler): return 1.0 for identical strings, and a lower value (down to 0.0) for more different strings. Think of them as "what fraction of characters match?"&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Neither type is universally better. Which one to use depends on your data and your use case.&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id="1-levenshtein-distance"&gt;1. Levenshtein distance&lt;/h3&gt;
&lt;h4 id="how-it-works"&gt;How it works&lt;/h4&gt;
&lt;p&gt;The Levenshtein distance between two strings is the &lt;strong&gt;minimum number of single-character edits&lt;/strong&gt; needed to transform one into the other. The allowed operations are:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Insertion&lt;/strong&gt;: add a character (e.g., "Streeet" - one character - to "Street")&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Deletion&lt;/strong&gt;: remove a character (e.g., "Streeet" + one deletion - to "Street")&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Substitution&lt;/strong&gt;: replace one character with another (e.g., "Straat" - replace 'a' with 'e' - to "Street")&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;A distance of 0 means the strings are identical. A distance of 1 means a single operation is enough.&lt;/p&gt;
&lt;h4 id="address-example"&gt;Address example&lt;/h4&gt;
&lt;p&gt;Compare &lt;strong&gt;"15 baker srteet"&lt;/strong&gt; (a common keyboard transposition typo) to &lt;strong&gt;"15 baker street"&lt;/strong&gt;:&lt;/p&gt;
&lt;div class="code"&gt;&lt;pre class="code literal-block"&gt;&lt;span class="mf"&gt;15&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;baker&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;srteet&lt;/span&gt;
&lt;span class="mf"&gt;15&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;baker&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;street&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;To fix "srteet" into "street", Levenshtein needs &lt;strong&gt;2 substitutions&lt;/strong&gt;: replace 'r' with 't' at position 9, and 't' with 'r' at position 10.&lt;/p&gt;
&lt;p&gt;Distance = &lt;strong&gt;2&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;This is technically correct, but it feels like a lot for what is clearly a single typing mistake. We will fix this in the next section.&lt;/p&gt;
&lt;h4 id="in-python"&gt;In Python&lt;/h4&gt;
&lt;div class="code"&gt;&lt;pre class="code literal-block"&gt;&lt;span class="kn"&gt;import&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nn"&gt;jellyfish&lt;/span&gt;

&lt;span class="n"&gt;jellyfish&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;levenshtein_distance&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;"15 baker srteet"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;"15 baker street"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="c1"&gt;# → 2&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Install with &lt;code&gt;pip install jellyfish&lt;/code&gt;.&lt;/p&gt;
&lt;h4 id="pros-and-cons"&gt;Pros and cons&lt;/h4&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Pros&lt;/th&gt;
&lt;th&gt;Cons&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Simple and well understood&lt;/td&gt;
&lt;td&gt;Counts a transposition (swap of two adjacent chars) as 2 operations instead of 1&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Handles insertions and deletions well (great for abbreviations like "St" vs "Street")&lt;/td&gt;
&lt;td&gt;Raw distance is hard to compare across string pairs of different lengths&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Available in virtually every language and library&lt;/td&gt;
&lt;td&gt;Does not give extra weight to matching prefixes&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Fast on short strings&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h4 id="when-to-use-it-for-addresses"&gt;When to use it for addresses&lt;/h4&gt;
&lt;p&gt;Levenshtein is a solid default, especially when the main source of variation is abbreviations or missing characters. Set a relative threshold to make comparisons fair across different string lengths:&lt;/p&gt;
&lt;div class="code"&gt;&lt;pre class="code literal-block"&gt;&lt;span class="k"&gt;def&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;normalized_levenshtein&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;b&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="n"&gt;dist&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;jellyfish&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;levenshtein_distance&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;b&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;dist&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt; &lt;span class="nb"&gt;max&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;len&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt; &lt;span class="nb"&gt;len&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;b&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;

&lt;span class="c1"&gt;# Treat as same address if &amp;lt; 15% different&lt;/span&gt;
&lt;span class="n"&gt;normalized_levenshtein&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;"15 baker street"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;"15 baker st"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="c1"&gt;# → 0.267&lt;/span&gt;
&lt;span class="n"&gt;normalized_levenshtein&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;"15 baker street"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;"15 baker sreet"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="c1"&gt;# → 0.067&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;

&lt;hr&gt;
&lt;h3 id="2-damerau-levenshtein-distance"&gt;2. Damerau-Levenshtein distance&lt;/h3&gt;
&lt;h4 id="how-it-works_1"&gt;How it works&lt;/h4&gt;
&lt;p&gt;Damerau-Levenshtein extends Levenshtein by adding one more operation:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Transposition&lt;/strong&gt;: swap two adjacent characters (e.g., "srteet" to "street" - swap 'r' and 't')&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;This single addition makes a big practical difference. Studies of typing errors show that transpositions (adjacent character swaps) are one of the most frequent mistakes people make when typing by hand. Recognizing them as a single error rather than two substitutions gives a much more realistic picture of "how many mistakes did the user make?"&lt;/p&gt;
&lt;h4 id="address-example_1"&gt;Address example&lt;/h4&gt;
&lt;p&gt;Same pair as before: &lt;strong&gt;"15 baker srteet"&lt;/strong&gt; vs &lt;strong&gt;"15 baker street"&lt;/strong&gt;.&lt;/p&gt;
&lt;div class="code"&gt;&lt;pre class="code literal-block"&gt;&lt;span class="mf"&gt;15&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;baker&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;srteet&lt;/span&gt;
&lt;span class="mf"&gt;15&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;baker&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;street&lt;/span&gt;
&lt;span class="w"&gt;         &lt;/span&gt;&lt;span class="o"&gt;^^&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="err"&gt;←&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;'&lt;/span&gt;&lt;span class="n"&gt;rt&lt;/span&gt;&lt;span class="err"&gt;'&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;transposed&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kr"&gt;to&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;'&lt;/span&gt;&lt;span class="n"&gt;tr&lt;/span&gt;&lt;span class="err"&gt;'&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Damerau-Levenshtein distance = &lt;strong&gt;1&lt;/strong&gt; (one transposition).&lt;/p&gt;
&lt;p&gt;Compare this to the Levenshtein distance of 2 for the same pair. One error, one operation - much more intuitive.&lt;/p&gt;
&lt;p&gt;Another example: &lt;strong&gt;"rue de al paix"&lt;/strong&gt; vs &lt;strong&gt;"rue de la paix"&lt;/strong&gt; (the words "al" and "la" are swapped - a common cut-and-paste error):&lt;/p&gt;
&lt;div class="code"&gt;&lt;pre class="code literal-block"&gt;rue de al paix
rue de la paix
       ^^       ← 'a' and 'l' transposed
&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Levenshtein = 2, Damerau-Levenshtein = 1.&lt;/p&gt;
&lt;h4 id="in-python_1"&gt;In Python&lt;/h4&gt;
&lt;div class="code"&gt;&lt;pre class="code literal-block"&gt;&lt;span class="kn"&gt;import&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nn"&gt;jellyfish&lt;/span&gt;

&lt;span class="n"&gt;jellyfish&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;damerau_levenshtein_distance&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;"15 baker srteet"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;"15 baker street"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="c1"&gt;# → 1&lt;/span&gt;

&lt;span class="n"&gt;jellyfish&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;damerau_levenshtein_distance&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;"rue de al paix"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;"rue de la paix"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="c1"&gt;# → 1&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;

&lt;h4 id="pros-and-cons_1"&gt;Pros and cons&lt;/h4&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Pros&lt;/th&gt;
&lt;th&gt;Cons&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;More realistic for human typing errors&lt;/td&gt;
&lt;td&gt;Slightly more complex to implement from scratch&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Transpositions (very frequent mistakes) cost 1, not 2&lt;/td&gt;
&lt;td&gt;Same issue with raw distance across different string lengths&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Strict superset of Levenshtein - always &amp;lt;= Levenshtein distance&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h4 id="when-to-use-it-for-addresses_1"&gt;When to use it for addresses&lt;/h4&gt;
&lt;p&gt;Prefer Damerau-Levenshtein over plain Levenshtein whenever your input comes from users typing addresses manually (web forms, search boxes, mobile apps). It gives a better answer to the question "how careless was this input?" and lets you set tighter thresholds while still tolerating common slip-of-the-finger errors.&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id="3-jaro-similarity"&gt;3. Jaro similarity&lt;/h3&gt;
&lt;h4 id="how-it-works_2"&gt;How it works&lt;/h4&gt;
&lt;p&gt;Jaro takes a completely different approach. Instead of counting edit operations, it measures the &lt;strong&gt;proportion of characters that match&lt;/strong&gt; between two strings, with a penalty for characters that are far apart or out of order.&lt;/p&gt;
&lt;p&gt;Two characters are considered matching if:
1. They are the same character, and
2. Their positions are not too far apart. The maximum allowed distance between two matching characters is: &lt;code&gt;floor(max(len(s1), len(s2)) / 2) - 1&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Once you count the matching characters &lt;code&gt;m&lt;/code&gt; and the number of matching characters that are out of order &lt;code&gt;t&lt;/code&gt; (transpositions), the Jaro similarity is:&lt;/p&gt;
&lt;div class="code"&gt;&lt;pre class="code literal-block"&gt;Jaro(s1, s2) = (1/3) * (m / |s1| + m / |s2| + (m - t) / m)
&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;The result is between 0.0 (nothing matches) and 1.0 (identical).&lt;/p&gt;
&lt;h4 id="address-example_2"&gt;Address example&lt;/h4&gt;
&lt;p&gt;Compare &lt;strong&gt;"church rd"&lt;/strong&gt; (abbreviated) to &lt;strong&gt;"church road"&lt;/strong&gt; (full form):&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;s1 = "church rd" (9 characters), s2 = "church road" (11 characters)&lt;/li&gt;
&lt;li&gt;Matching window = floor(11 / 2) - 1 = 4&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Every character in "church rd" can be matched to a character in "church road" within the window: c, h, u, r, c, h, (space), r, d all appear in the same relative order. So m = 9, t = 0.&lt;/p&gt;
&lt;div class="code"&gt;&lt;pre class="code literal-block"&gt;Jaro = (1/3) &lt;span class="gs"&gt;* (9/9 + 9/11 + 9/9)&lt;/span&gt;
&lt;span class="gs"&gt;     = (1/3) *&lt;/span&gt; (1.000 + 0.818 + 1.000)
     ≈ 0.939
&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;A similarity of 0.939 for what is clearly the same street, just abbreviated. That is the right answer.&lt;/p&gt;
&lt;h4 id="in-python_2"&gt;In Python&lt;/h4&gt;
&lt;div class="code"&gt;&lt;pre class="code literal-block"&gt;&lt;span class="kn"&gt;import&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nn"&gt;jellyfish&lt;/span&gt;

&lt;span class="n"&gt;jellyfish&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;jaro_similarity&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;"church rd"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;"church road"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="c1"&gt;# → ~0.939&lt;/span&gt;

&lt;span class="n"&gt;jellyfish&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;jaro_similarity&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;"main street"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;"mane street"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;  &lt;span class="c1"&gt;# typo: i→e&lt;/span&gt;
&lt;span class="c1"&gt;# → ~0.970&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;

&lt;h4 id="pros-and-cons_2"&gt;Pros and cons&lt;/h4&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Pros&lt;/th&gt;
&lt;th&gt;Cons&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Normalized score between 0 and 1 - easy to threshold&lt;/td&gt;
&lt;td&gt;Formula is less intuitive than edit distance&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Handles abbreviations and length differences naturally&lt;/td&gt;
&lt;td&gt;Can give surprisingly high scores to long strings with many common characters&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Well suited for comparing individual address components&lt;/td&gt;
&lt;td&gt;Does not give extra weight to matching prefixes - we fix this with Jaro-Winkler&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h4 id="when-to-use-it-for-addresses_2"&gt;When to use it for addresses&lt;/h4&gt;
&lt;p&gt;Jaro is a good fit for comparing &lt;strong&gt;individual address fields&lt;/strong&gt; (just the street name, just the city) rather than full concatenated address strings. It is also useful for detecting near-duplicate records in a database.&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id="4-jaro-winkler-similarity"&gt;4. Jaro-Winkler similarity&lt;/h3&gt;
&lt;h4 id="how-it-works_3"&gt;How it works&lt;/h4&gt;
&lt;p&gt;Jaro-Winkler builds on Jaro by adding a &lt;strong&gt;prefix bonus&lt;/strong&gt;: if two strings share the same first characters, their similarity is boosted. The motivation is that strings that start the same way are more likely to refer to the same thing than strings that diverge immediately.&lt;/p&gt;
&lt;p&gt;The formula is:&lt;/p&gt;
&lt;div class="code"&gt;&lt;pre class="code literal-block"&gt;JaroWinkler(s1, s2) = Jaro(s1, s2) + l &lt;span class="gs"&gt;* p *&lt;/span&gt; (1 - Jaro(s1, s2))
&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Where:
- &lt;code&gt;l&lt;/code&gt; = length of the common prefix, up to a maximum of 4 characters
- &lt;code&gt;p&lt;/code&gt; = scaling factor, conventionally 0.1&lt;/p&gt;
&lt;p&gt;The effect is a modest upward adjustment when the prefix matches. With &lt;code&gt;p = 0.1&lt;/code&gt; and &lt;code&gt;l = 4&lt;/code&gt;, the maximum bonus is &lt;code&gt;+4 * 0.1 * (1 - Jaro)&lt;/code&gt;, which boosts a Jaro of 0.90 by at most 0.04. Small but meaningful for ranking candidates.&lt;/p&gt;
&lt;h4 id="address-example_3"&gt;Address example&lt;/h4&gt;
&lt;p&gt;Take &lt;strong&gt;"church rd"&lt;/strong&gt; vs &lt;strong&gt;"church road"&lt;/strong&gt; again (Jaro = 0.939, common prefix "chur", l = 4):&lt;/p&gt;
&lt;div class="code"&gt;&lt;pre class="code literal-block"&gt;JaroWinkler = 0.939 + 4 &lt;span class="gs"&gt;* 0.1 *&lt;/span&gt; (1 - 0.939)
            = 0.939 + 0.4 * 0.061
            ≈ 0.963
&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Now consider two streets that differ at the very beginning:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;"avenue du general leclerc"&lt;/strong&gt; vs &lt;strong&gt;"boulevard du general leclerc"&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;These share no prefix at all (l = 0), so Jaro-Winkler equals Jaro exactly. No bonus is applied, and the score is lower than it would be for two strings with the same beginning. This is exactly the intended behavior: a difference at the start is a stronger signal of a mismatch than a difference in the middle.&lt;/p&gt;
&lt;p&gt;Now consider a house number mismatch:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;"12 rue de la paix"&lt;/strong&gt; vs &lt;strong&gt;"21 rue de la paix"&lt;/strong&gt;: the prefix is "1" vs "2", so l = 0. The score penalizes the mismatch at the start, which is what we want - these are two completely different addresses.&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 id="in-python_3"&gt;In Python&lt;/h4&gt;
&lt;div class="code"&gt;&lt;pre class="code literal-block"&gt;&lt;span class="kn"&gt;import&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nn"&gt;jellyfish&lt;/span&gt;

&lt;span class="n"&gt;jellyfish&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;jaro_winkler_similarity&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;"church rd"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;"church road"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="c1"&gt;# → ~0.963&lt;/span&gt;

&lt;span class="n"&gt;jellyfish&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;jaro_winkler_similarity&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;"12 rue de la paix"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;"21 rue de la paix"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="c1"&gt;# → ~0.980  (lower score due to no prefix match)&lt;/span&gt;

&lt;span class="n"&gt;jellyfish&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;jaro_winkler_similarity&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;"12 rue de la paix"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;"12 rue de la pai"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="c1"&gt;# → ~0.988  (strong prefix, only one char missing at end)&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;

&lt;h4 id="pros-and-cons_3"&gt;Pros and cons&lt;/h4&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Pros&lt;/th&gt;
&lt;th&gt;Cons&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Prefix bonus aligns with how we read addresses (number first, then street name)&lt;/td&gt;
&lt;td&gt;Prefix bonus requires consistent formatting - mixed case will kill the bonus&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Often more accurate than plain Jaro for addresses and proper names&lt;/td&gt;
&lt;td&gt;&lt;code&gt;p = 0.1&lt;/code&gt; is conventional; tuning it for your data takes experimentation&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Normalized 0-1 score, easy to threshold&lt;/td&gt;
&lt;td&gt;Like Jaro, harder to explain to non-technical stakeholders than edit distance&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h4 id="when-to-use-it-for-addresses_3"&gt;When to use it for addresses&lt;/h4&gt;
&lt;p&gt;Jaro-Winkler is the best general-purpose choice for full address comparison when strings are properly normalized (lowercase, consistent formatting). The prefix bonus is particularly useful when the house number is at the start of the string - it correctly penalizes address strings that start with different numbers, since those represent different physical locations regardless of the rest.&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id="summary-table"&gt;Summary table&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Metric&lt;/th&gt;
&lt;th&gt;Type&lt;/th&gt;
&lt;th&gt;Score range&lt;/th&gt;
&lt;th&gt;Transpositions&lt;/th&gt;
&lt;th&gt;Prefix bonus&lt;/th&gt;
&lt;th&gt;Best for&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Levenshtein&lt;/td&gt;
&lt;td&gt;Distance&lt;/td&gt;
&lt;td&gt;0 to +inf&lt;/td&gt;
&lt;td&gt;Costs 2&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;Abbreviations, insertions, deletions&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Damerau-Levenshtein&lt;/td&gt;
&lt;td&gt;Distance&lt;/td&gt;
&lt;td&gt;0 to +inf&lt;/td&gt;
&lt;td&gt;Costs 1&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;User-typed input, keyboard typos&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Jaro&lt;/td&gt;
&lt;td&gt;Similarity&lt;/td&gt;
&lt;td&gt;0 to 1&lt;/td&gt;
&lt;td&gt;Handled&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;Individual address fields&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Jaro-Winkler&lt;/td&gt;
&lt;td&gt;Similarity&lt;/td&gt;
&lt;td&gt;0 to 1&lt;/td&gt;
&lt;td&gt;Handled&lt;/td&gt;
&lt;td&gt;Yes (up to 4 chars)&lt;/td&gt;
&lt;td&gt;Full normalized address strings&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;Quick decision guide:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;User types addresses into a form&lt;/strong&gt; - use Damerau-Levenshtein. Transpositions are very common in manual input.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;You are deduplicating a database of street names&lt;/strong&gt; - use Jaro or Jaro-Winkler on the street name component alone.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;You want a single score for a full address string&lt;/strong&gt; - use Jaro-Winkler on normalized strings.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Your main problem is abbreviations&lt;/strong&gt; ("Blvd" vs "Boulevard") - normalize abbreviations first (see below), then any metric will do.&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h3 id="normalization-the-step-that-matters-more-than-metric-choice"&gt;Normalization: the step that matters more than metric choice&lt;/h3&gt;
&lt;p&gt;No string metric can compensate for what normalization ignores. Before comparing two addresses, apply at least these basics:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Lowercase everything&lt;/strong&gt;: "Baker Street" and "baker street" should score 1.0, not 0.9.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Expand abbreviations consistently&lt;/strong&gt;: "St" -&amp;gt; "street", "Blvd" -&amp;gt; "boulevard", "Ave" -&amp;gt; "avenue", "Rd" -&amp;gt; "road". Or shorten everything to a consistent short form.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Remove punctuation&lt;/strong&gt;: "St. James's" and "St Jamess" will score very differently if you keep periods and apostrophes.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Normalize whitespace&lt;/strong&gt;: collapse multiple spaces, strip leading/trailing whitespace.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;With these steps, "15 Baker St." and "15 Baker Street" become "15 baker street" and "15 baker street" - identical strings that score perfectly on any metric.&lt;/p&gt;
&lt;div class="code"&gt;&lt;pre class="code literal-block"&gt;&lt;span class="kn"&gt;import&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nn"&gt;re&lt;/span&gt;

&lt;span class="k"&gt;def&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;normalize_address&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;addr&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="n"&gt;addr&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;addr&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;lower&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
    &lt;span class="n"&gt;addr&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;re&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;sub&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;r&lt;/span&gt;&lt;span class="s2"&gt;"[.,'\-]"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;""&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;addr&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="n"&gt;addr&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;re&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;sub&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;r&lt;/span&gt;&lt;span class="s2"&gt;"\bst\b"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;"street"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;addr&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="n"&gt;addr&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;re&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;sub&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;r&lt;/span&gt;&lt;span class="s2"&gt;"\bblvd\b"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;"boulevard"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;addr&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="n"&gt;addr&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;re&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;sub&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;r&lt;/span&gt;&lt;span class="s2"&gt;"\bave\b"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;"avenue"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;addr&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="n"&gt;addr&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;re&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;sub&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;r&lt;/span&gt;&lt;span class="s2"&gt;"\brd\b"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;"road"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;addr&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="n"&gt;addr&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;re&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;sub&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;r&lt;/span&gt;&lt;span class="s2"&gt;"\s+"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;" "&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;addr&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;strip&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;addr&lt;/span&gt;

&lt;span class="n"&gt;normalize_address&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;"15 Baker St."&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;   &lt;span class="c1"&gt;# "15 baker street"&lt;/span&gt;
&lt;span class="n"&gt;normalize_address&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;"15 Baker Street"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;  &lt;span class="c1"&gt;# "15 baker street"&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;After normalization, both strings are identical and any metric returns a perfect score.&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id="putting-it-all-together-a-complete-address-comparison"&gt;Putting it all together: a complete address comparison&lt;/h3&gt;
&lt;p&gt;Here is a short example that combines normalization with all four metrics:&lt;/p&gt;
&lt;div class="code"&gt;&lt;pre class="code literal-block"&gt;&lt;span class="kn"&gt;import&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nn"&gt;jellyfish&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nn"&gt;re&lt;/span&gt;

&lt;span class="k"&gt;def&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;normalize_address&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;addr&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="n"&gt;addr&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;addr&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;lower&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
    &lt;span class="n"&gt;addr&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;re&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;sub&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;r&lt;/span&gt;&lt;span class="s2"&gt;"[.,'\-]"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;""&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;addr&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="n"&gt;addr&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;re&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;sub&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;r&lt;/span&gt;&lt;span class="s2"&gt;"\bst\b"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;"street"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;addr&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="n"&gt;addr&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;re&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;sub&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;r&lt;/span&gt;&lt;span class="s2"&gt;"\bblvd\b"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;"boulevard"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;addr&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="n"&gt;addr&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;re&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;sub&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;r&lt;/span&gt;&lt;span class="s2"&gt;"\bave\b"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;"avenue"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;addr&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="n"&gt;addr&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;re&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;sub&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;r&lt;/span&gt;&lt;span class="s2"&gt;"\brd\b"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;"road"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;addr&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="n"&gt;addr&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;re&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;sub&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;r&lt;/span&gt;&lt;span class="s2"&gt;"\s+"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;" "&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;addr&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;strip&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;addr&lt;/span&gt;

&lt;span class="n"&gt;pairs&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
    &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;"15 Baker St."&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;"15 Baker Street"&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
    &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;"15 Baker Srteet"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;"15 Baker Street"&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
    &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;"12 Rue de la Paix"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;"21 Rue de la Paix"&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
    &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;"Church Rd"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;"Church Road"&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
&lt;span class="p"&gt;]&lt;/span&gt;

&lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;b&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;pairs&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="n"&gt;na&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;nb&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;normalize_address&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt; &lt;span class="n"&gt;normalize_address&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;b&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="n"&gt;lev&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;jellyfish&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;levenshtein_distance&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;na&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;nb&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="n"&gt;dlev&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;jellyfish&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;damerau_levenshtein_distance&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;na&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;nb&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="n"&gt;jaro&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;jellyfish&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;jaro_similarity&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;na&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;nb&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="n"&gt;jw&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;jellyfish&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;jaro_winkler_similarity&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;na&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;nb&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="nb"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="si"&gt;!r}&lt;/span&gt;&lt;span class="s2"&gt; vs &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;b&lt;/span&gt;&lt;span class="si"&gt;!r}&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="nb"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="s2"&gt;"  Levenshtein: &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;lev&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;, Damerau-Levenshtein: &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;dlev&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="nb"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="s2"&gt;"  Jaro: &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;jaro&lt;/span&gt;&lt;span class="si"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;.3f&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;, Jaro-Winkler: &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;jw&lt;/span&gt;&lt;span class="si"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;.3f&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Expected output:&lt;/p&gt;
&lt;div class="code"&gt;&lt;pre class="code literal-block"&gt;'15 Baker St.' vs '15 Baker Street'
* Levenshtein: 0, Damerau-Levenshtein: 0  # normalization made them identical
* Jaro: 1.000, Jaro-Winkler: 1.000

'15 Baker Srteet' vs '15 Baker Street'
* Levenshtein: 2, Damerau-Levenshtein: 1  # one transposition, not two substitutions
* Jaro: 0.978, Jaro-Winkler: 0.987

'12 Rue de la Paix' vs '21 Rue de la Paix'
* Levenshtein: 2, Damerau-Levenshtein: 1  # different house number
* Jaro: 0.980, Jaro-Winkler: 0.980        # no prefix bonus (1 != 2)

'Church Rd' vs 'Church Road'
* Levenshtein: 0, Damerau-Levenshtein: 0  # normalization expanded Rd -&amp;gt; Road
* Jaro: 1.000, Jaro-Winkler: 1.000
&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Note how the normalization step handles "St" vs "Street" and "Rd" vs "Road" completely, leaving the metrics to handle what normalization cannot catch (typos, transpositions, genuine differences).&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id="where-to-go-from-here"&gt;Where to go from here&lt;/h3&gt;
&lt;p&gt;String similarity metrics are one tool in the address quality toolbox. In geocoding workflows, they are commonly used to:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Verify that a geocoded result actually matches the input address (compare the returned address label to the input).&lt;/li&gt;
&lt;li&gt;Deduplicate address lists before batching geocoding requests.&lt;/li&gt;
&lt;li&gt;Build fuzzy search over a local address database before calling a paid API.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;If you are working on address data quality as part of a geocoding pipeline, these resources may also be useful:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Learn how to geocode large batches cost-effectively: &lt;a href="https://coordable.co/blog/how-to-reduce-geocoding-costs-by-67/"&gt;How to reduce geocoding costs by 67%&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;See what geocoding providers are available and how their prices compare: &lt;a href="https://coordable.co/blog/geocoding-prices-2026/"&gt;Geocoding prices in 2026&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Find the best geocoding provider for your country: &lt;a href="https://coordable.co/country-analysis/best-geocoding-providers-france/"&gt;Best geocoding providers for France&lt;/a&gt;, &lt;a href="https://coordable.co/country-analysis/best-geocoding-providers-united-kingdom/"&gt;UK&lt;/a&gt;, &lt;a href="https://coordable.co/country-analysis/best-geocoding-providers-germany/"&gt;Germany&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;a href="https://coordable.co" class="learn-more-btn"&gt;Try address geocoding with Coordable&lt;/a&gt;&lt;/p&gt;</description><category>addresses</category><category>data quality</category><category>geocoding</category><category>python</category><category>string matching</category><guid>https://coordable.co/blog/string-distance-metrics-address-comparison/</guid><pubDate>Wed, 01 Apr 2026 10:00:00 GMT</pubDate></item><item><title>US Census + Google Maps: How to cut geocoding costs by 90% for US addresses</title><link>https://coordable.co/blog/how-to-cut-geocoding-costs-by-90-for-us-addresses-census-google-maps/</link><dc:creator>François Andrieux</dc:creator><description>&lt;h3 id="the-setup"&gt;The setup&lt;/h3&gt;
&lt;p&gt;We wanted to test the effectiveness of a cascading geocoding strategy for US addresses. We took 1,000 real US addresses (a mix of residential and business addresses, of variable quality but overall correct) and ran three geocoding tests.&lt;/p&gt;
&lt;p&gt;Here is the summary of the results:&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Test&lt;/th&gt;
&lt;th&gt;Provider(s)&lt;/th&gt;
&lt;th&gt;Addresses resolved&lt;/th&gt;
&lt;th&gt;Cost per 1,000&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;US Census only&lt;/td&gt;
&lt;td&gt;91.9%&lt;/td&gt;
&lt;td&gt;$0.00&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;td&gt;Google Maps only&lt;/td&gt;
&lt;td&gt;92.6%&lt;/td&gt;
&lt;td&gt;$5.00&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;3&lt;/td&gt;
&lt;td&gt;US Census → Google Maps (cascade)&lt;/td&gt;
&lt;td&gt;97.3%&lt;/td&gt;
&lt;td&gt;$0.41&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;The cascade delivers &lt;strong&gt;97.3% addresses found at $0.41&lt;/strong&gt;, compared to $5.00 for Google Maps alone. That is a &lt;strong&gt;90% cost reduction&lt;/strong&gt; with a &lt;strong&gt;+5.4 percentage point improvement&lt;/strong&gt; in addresses resolved. Amazing right?&lt;/p&gt;
&lt;p&gt;Read on to see how each test was run and what the results look like.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Table of contents:&lt;/strong&gt;&lt;/p&gt;
&lt;div class="toc"&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://coordable.co/blog/how-to-cut-geocoding-costs-by-90-for-us-addresses-census-google-maps/#the-setup"&gt;The setup&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://coordable.co/blog/how-to-cut-geocoding-costs-by-90-for-us-addresses-census-google-maps/#test-1-us-census-geocoder"&gt;Test 1: US Census Geocoder&lt;/a&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href="https://coordable.co/blog/how-to-cut-geocoding-costs-by-90-for-us-addresses-census-google-maps/#what-is-the-us-census-geocoder"&gt;What is the US Census Geocoder?&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://coordable.co/blog/how-to-cut-geocoding-costs-by-90-for-us-addresses-census-google-maps/#results"&gt;Results&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="https://coordable.co/blog/how-to-cut-geocoding-costs-by-90-for-us-addresses-census-google-maps/#test-2-google-maps-geocoding-api"&gt;Test 2: Google Maps Geocoding API&lt;/a&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href="https://coordable.co/blog/how-to-cut-geocoding-costs-by-90-for-us-addresses-census-google-maps/#what-is-google-maps-geocoding"&gt;What is Google Maps Geocoding?&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://coordable.co/blog/how-to-cut-geocoding-costs-by-90-for-us-addresses-census-google-maps/#results_1"&gt;Results&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="https://coordable.co/blog/how-to-cut-geocoding-costs-by-90-for-us-addresses-census-google-maps/#test-3-us-census-google-maps-cascade"&gt;Test 3: US Census + Google Maps (cascade)&lt;/a&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href="https://coordable.co/blog/how-to-cut-geocoding-costs-by-90-for-us-addresses-census-google-maps/#how-the-cascade-works"&gt;How the cascade works&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://coordable.co/blog/how-to-cut-geocoding-costs-by-90-for-us-addresses-census-google-maps/#results_2"&gt;Results&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="https://coordable.co/blog/how-to-cut-geocoding-costs-by-90-for-us-addresses-census-google-maps/#going-further-adding-a-third-provider"&gt;Going further: adding a third provider&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://coordable.co/blog/how-to-cut-geocoding-costs-by-90-for-us-addresses-census-google-maps/#conclusion"&gt;Conclusion&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://coordable.co/blog/how-to-cut-geocoding-costs-by-90-for-us-addresses-census-google-maps/#where-to-go-from-here"&gt;Where to go from here&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;hr&gt;
&lt;h3 id="test-1-us-census-geocoder"&gt;Test 1: US Census Geocoder&lt;/h3&gt;
&lt;h4 id="what-is-the-us-census-geocoder"&gt;What is the US Census Geocoder?&lt;/h4&gt;
&lt;p&gt;The &lt;a href="https://geocoding.geo.census.gov/"&gt;US Census Geocoder&lt;/a&gt; is a &lt;strong&gt;public and free API&lt;/strong&gt; provided by the US federal government. It is not open source (the underlying software and data are maintained by the Census Bureau), but it is freely accessible, requires no API key, and has no published usage limits or cost.&lt;/p&gt;
&lt;p&gt;It is built on &lt;a href="https://www.census.gov/geographies/mapping-files/time-series/geo/tiger-line-file.html"&gt;TIGER/Line&lt;/a&gt; data, the official US address dataset. Results are &lt;strong&gt;interpolated on the street&lt;/strong&gt; rather than placed at the exact building location (no rooftop precision). For most use cases (delivery routing, territory analysis, customer mapping), street-level interpolation is entirely sufficient.&lt;/p&gt;
&lt;p&gt;The output data is in the public domain, with no licensing restrictions on how you store or use the coordinates.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Important limitation:&lt;/strong&gt; US Census only understands structured street addresses. It cannot geocode points of interest, business names, or company names. If your dataset contains entries like "Starbucks, Chicago" or "Boeing headquarters", US Census will return nothing for those rows. In that case, the 90% cost reduction figure will not hold: a commercial provider will need to handle a much larger share of your requests. &lt;strong&gt;This strategy works best for datasets of clean street addresses ; see below for a solution.&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h4 id="results"&gt;Results&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Accuracy: 91.9%&lt;/strong&gt; (919 out of 1,000 addresses resolved)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Cost: $0.00&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;figure&gt;
  &lt;img src="https://coordable.co/images/how-to-cut-geocoding-costs-by-90-for-us-addresses-census-google-maps/test1-us-census-screenshot.png" alt="Screenshot of the US Census geocoding session: 91.9% valid results, $0 cost."&gt;
  &lt;figcaption&gt;Test 1, US Census only: 919/1,000 addresses resolved, at no cost.&lt;/figcaption&gt;
&lt;/figure&gt;

&lt;p&gt;91.9% is a strong result for a free API. The 8.1% of unresolved addresses are typically due to non-standard formatting, missing components, or addresses that simply do not appear in the TIGER/Line dataset.&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id="test-2-google-maps-geocoding-api"&gt;Test 2: Google Maps Geocoding API&lt;/h3&gt;
&lt;h4 id="what-is-google-maps-geocoding"&gt;What is Google Maps Geocoding?&lt;/h4&gt;
&lt;p&gt;Google Maps is one of the most widely used geocoding providers. At &lt;strong&gt;$5.00 per 1,000 addresses&lt;/strong&gt; (after the free quota), it is also one of the most expensive.&lt;/p&gt;
&lt;p&gt;It returns different precision levels: &lt;code&gt;ROOFTOP&lt;/code&gt; for exact building locations, and &lt;code&gt;RANGE_INTERPOLATED&lt;/code&gt; for street-level interpolation. For a fair comparison with US Census, which only returns street-level results, we accept &lt;strong&gt;both&lt;/strong&gt; &lt;code&gt;ROOFTOP&lt;/code&gt; and &lt;code&gt;RANGE_INTERPOLATED&lt;/code&gt; in this test.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Licensing note:&lt;/strong&gt; Google Maps results come with significant restrictions beyond the price. Google's Terms of Service do not allow you to store geocoded coordinates long-term or use them outside of a Google Maps display context. If you need to build a database of geocoded addresses, use the results in a non-Google mapping tool, or export coordinates for analysis, you may be violating Google's terms. This is an important constraint to factor in before committing to Google as your primary geocoding provider.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Note: Google free quota is excluded from these cost figures, as its effective value depends on overall usage across all Google Maps products. The $5.00 figure reflects the standard pay-as-you-go rate.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h4 id="results_1"&gt;Results&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Accuracy: 92.6%&lt;/strong&gt; (926 out of 1,000 addresses resolved)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Cost: $5.00&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;figure&gt;
  &lt;img src="https://coordable.co/images/how-to-cut-geocoding-costs-by-90-for-us-addresses-census-google-maps/test2-google-maps-screenshot.png" alt="Screenshot of the Google Maps geocoding session: 92.6% valid results, $5.00 per 1,000."&gt;
  &lt;figcaption&gt;Test 2, Google Maps only: 926/1,000 addresses resolved at ROOFTOP or RANGE_INTERPOLATED level, at $5.00 per 1,000.&lt;/figcaption&gt;
&lt;/figure&gt;

&lt;p&gt;Google Maps edges out US Census by 0.7 percentage points (92.6% vs 91.9%), but at a cost of $5.00 per 1,000 addresses vs $0. For this dataset, paying for Google Maps buys very little extra accuracy on its own.&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id="test-3-us-census-google-maps-cascade"&gt;Test 3: US Census + Google Maps (cascade)&lt;/h3&gt;
&lt;h4 id="how-the-cascade-works"&gt;How the cascade works&lt;/h4&gt;
&lt;p&gt;The cascading strategy is straightforward:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Send every address to US Census first.&lt;/strong&gt; If US Census returns a valid result, use it. Cost: $0.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;For addresses that US Census could not resolve&lt;/strong&gt;, send them to Google Maps. Cost: $5.00 per 1,000 for this subset only.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;In our test, approximately &lt;strong&gt;90% of addresses were resolved by US Census&lt;/strong&gt; (free), and only &lt;strong&gt;~8% required Google Maps&lt;/strong&gt;, at a total cost of $0.41. The remaining ~2.7% were not resolved by either provider.&lt;/p&gt;
&lt;p&gt;This is why the cost drops so dramatically: instead of paying $5.00 for every address, you only pay Google's rate for the small fraction that US Census could not handle.&lt;/p&gt;
&lt;figure&gt;
  &lt;img src="https://coordable.co/images/how-to-cut-geocoding-costs-by-90-for-us-addresses-census-google-maps/workflow-visual.png" alt="Screenshot of the cascading geocoding workflow in Coordable: US Census as step 1, Google Maps as step 2 with ROOFTOP and RANGE_INTERPOLATED accepted."&gt;
  &lt;figcaption&gt;The two-provider cascade configured in Coordable: US Census first, then Google Maps for unresolved addresses, accepting both ROOFTOP and RANGE_INTERPOLATED results.&lt;/figcaption&gt;
&lt;/figure&gt;

&lt;h4 id="results_2"&gt;Results&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Accuracy: 97.3%&lt;/strong&gt; (973 out of 1,000 addresses resolved)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Cost: $0.41&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;Provider split: ~90% resolved by US Census · ~8% resolved by Google Maps · ~2.7% unresolved&lt;/li&gt;
&lt;/ul&gt;
&lt;figure&gt;
  &lt;img src="https://coordable.co/images/how-to-cut-geocoding-costs-by-90-for-us-addresses-census-google-maps/test3-cascade-screenshot.png" alt="Screenshot of the cascading geocoding session: 97.3% valid results, $0.41 per 1,000."&gt;
  &lt;figcaption&gt;Test 3, US Census → Google Maps cascade: 973/1,000 addresses resolved, at $0.41 per 1,000.&lt;/figcaption&gt;
&lt;/figure&gt;

&lt;p&gt;The cascade delivers a &lt;strong&gt;+5.4 percentage point improvement&lt;/strong&gt; over either provider alone, at 8% of the cost of Google Maps. The key insight is that US Census and Google Maps fail on &lt;em&gt;different&lt;/em&gt; addresses. Addresses that US Census cannot parse or match are often resolved by Google's more robust parsing engine, and vice versa.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://coordable.co" class="learn-more-btn"&gt;Set up cascading geocoding with Coordable&lt;/a&gt;&lt;/p&gt;

&lt;hr&gt;
&lt;h3 id="going-further-adding-a-third-provider"&gt;Going further: adding a third provider&lt;/h3&gt;
&lt;p&gt;This two-provider cascade already delivers strong results, but you can push accuracy even higher by adding a third provider.&lt;/p&gt;
&lt;p&gt;For example, adding &lt;a href="https://coordable.co/provider/here-geocoding-api/"&gt;HERE&lt;/a&gt; as a second fallback (after Google Maps) would catch some of the 2.7% of addresses that neither US Census nor Google resolved. HERE has strong US address coverage and is significantly cheaper than Google Maps at $0.83 per 1,000 addresses. A three-provider cascade (US Census → Google Maps → HERE) would likely push accuracy above 97.3% while keeping the overall cost low, since HERE would only handle the tiny fraction of addresses that both previous providers missed.&lt;/p&gt;
&lt;p&gt;We ran a similar experiment with French addresses using the &lt;a href="https://coordable.co/blog/how-to-geocode-with-ban/"&gt;BAN API&lt;/a&gt; (the French government geocoder), Google Maps, and HERE, and achieved 97.7% accuracy at $1.62 per 1,000, a 67% cost reduction compared to Google alone. The principle is identical: route easy addresses through the cheapest provider, and reserve expensive providers for the hard cases. See &lt;a href="https://coordable.co/blog/how-to-reduce-geocoding-costs-by-67/"&gt;How to reduce geocoding costs by 67%&lt;/a&gt; for the full breakdown.&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id="conclusion"&gt;Conclusion&lt;/h3&gt;
&lt;p&gt;For US address geocoding, the US Census Geocoder is a powerful and underused tool. It is free, requires no API key, and handles the vast majority of clean street addresses correctly. Pairing it with Google Maps as a fallback gives you the best of both worlds: near-complete coverage at a fraction of the cost.&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Test&lt;/th&gt;
&lt;th&gt;Provider(s)&lt;/th&gt;
&lt;th&gt;Found&lt;/th&gt;
&lt;th&gt;Cost per 1,000&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;US Census only&lt;/td&gt;
&lt;td&gt;91.9%&lt;/td&gt;
&lt;td&gt;$0.00&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;td&gt;Google Maps only&lt;/td&gt;
&lt;td&gt;92.6%&lt;/td&gt;
&lt;td&gt;$5.00&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;3&lt;/td&gt;
&lt;td&gt;US Census → Google Maps (cascade)&lt;/td&gt;
&lt;td&gt;97.3%&lt;/td&gt;
&lt;td&gt;$0.41&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;The key caveat: this strategy works for &lt;strong&gt;street address datasets&lt;/strong&gt;. If your data contains business names, POIs, or unstructured inputs, US Census will not help and you will need a commercial provider for a larger share of requests.&lt;/p&gt;
&lt;p&gt;However, it would have been possible to plug a low-cost provider to handle the remaining addresses as well : HERE, Nominatim (OSM), OpenCage, etc.&lt;/p&gt;
&lt;p&gt;If you want to implement this cascade without writing custom code, &lt;a href="https://coordable.co"&gt;Coordable&lt;/a&gt; lets you configure multi-provider workflows with quality rules at each step, so only good results pass through.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://coordable.co" class="learn-more-btn"&gt;Try cascading geocoding with Coordable&lt;/a&gt;&lt;/p&gt;

&lt;hr&gt;
&lt;h3 id="where-to-go-from-here"&gt;Where to go from here&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;See how the same cascading approach cuts costs by 67% for French addresses: &lt;a href="https://coordable.co/blog/how-to-reduce-geocoding-costs-by-67/"&gt;How to reduce geocoding costs by 67%&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Compare geocoding prices across all major providers: &lt;a href="https://coordable.co/blog/geocoding-prices-2026/"&gt;Geocoding prices in 2026&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Learn more about Google Maps Geocoding: &lt;a href="https://coordable.co/provider/google-maps-geocoding-api/"&gt;Google Maps Geocoding API&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description><category>2026</category><category>api</category><category>geocoding</category><category>pricing</category><category>providers</category><category>USA</category><guid>https://coordable.co/blog/how-to-cut-geocoding-costs-by-90-for-us-addresses-census-google-maps/</guid><pubDate>Sat, 21 Mar 2026 10:00:00 GMT</pubDate></item><item><title>How to reduce geocoding costs by 67%</title><link>https://coordable.co/blog/how-to-reduce-geocoding-costs-by-67/</link><dc:creator>François Andrieux</dc:creator><description>&lt;h3 id="the-use-case-a-logistics-company-paying-way-too-much-for-geocoding"&gt;The use case: a logistics company paying way too much for geocoding&lt;/h3&gt;
&lt;p&gt;If you work in logistics, insurance, or routing software, you know the drill: geocoding volumes are massive, and the bills that come with them are too.&lt;/p&gt;
&lt;p&gt;In this article, we show how &lt;a href="https://coordable.co"&gt;Coordable&lt;/a&gt; helped a logistics company cut geocoding costs by &lt;strong&gt;67%&lt;/strong&gt; while also increasing its share of valid geocoding results from 94% to 97.7%. &lt;strong&gt;Total savings: $20,280 per year.&lt;/strong&gt; 🤩&lt;/p&gt;
&lt;p&gt;Let's dive in.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Table of contents:&lt;/strong&gt;&lt;/p&gt;
&lt;div class="toc"&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://coordable.co/blog/how-to-reduce-geocoding-costs-by-67/#the-use-case-a-logistics-company-paying-way-too-much-for-geocoding"&gt;The use case: a logistics company paying way too much for geocoding&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://coordable.co/blog/how-to-reduce-geocoding-costs-by-67/#the-problem-choosing-between-cost-and-quality"&gt;The problem: choosing between cost and quality&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://coordable.co/blog/how-to-reduce-geocoding-costs-by-67/#the-solution-cascading-providers"&gt;The solution: cascading providers&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://coordable.co/blog/how-to-reduce-geocoding-costs-by-67/#the-workflow-3-providers"&gt;The workflow: 3 providers&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://coordable.co/blog/how-to-reduce-geocoding-costs-by-67/#the-results"&gt;The results&lt;/a&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href="https://coordable.co/blog/how-to-reduce-geocoding-costs-by-67/#session-1-google-maps-only"&gt;Session 1: Google Maps only&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://coordable.co/blog/how-to-reduce-geocoding-costs-by-67/#session-2-ban-google-maps-here-cascading"&gt;Session 2: BAN + Google Maps + HERE (cascading)&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="https://coordable.co/blog/how-to-reduce-geocoding-costs-by-67/#yearly-cost-savings"&gt;Yearly cost savings&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://coordable.co/blog/how-to-reduce-geocoding-costs-by-67/#conclusion"&gt;Conclusion&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://coordable.co/blog/how-to-reduce-geocoding-costs-by-67/#where-to-go-from-here"&gt;Where to go from here&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;hr&gt;
&lt;h3 id="the-problem-choosing-between-cost-and-quality"&gt;The problem: choosing between cost and quality&lt;/h3&gt;
&lt;p&gt;You have probably faced this tradeoff: premium providers like Google Maps deliver excellent results, but they come at a price. Cheaper alternatives may leave some addresses unresolved.&lt;/p&gt;
&lt;p&gt;Most of the time, though, you do not actually need the premium option; addresses are clean and unambiguous, so any decent geocoder will do the job. The real challenge appears when your address data is messy: in those cases, you are forced to choose between paying for Google Maps to guarantee correct results, or accepting that a cheaper provider will miss some.&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id="the-solution-cascading-providers"&gt;The solution: cascading providers&lt;/h3&gt;
&lt;p&gt;Good news: there is a strategy that gives you the best of both worlds, &lt;strong&gt;cascading geocoders&lt;/strong&gt;. The principle is straightforward:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Use an open-source or low-cost provider for ~90% of geocoding requests (the clean, unambiguous addresses).&lt;/li&gt;
&lt;li&gt;Use a premium geocoder (or several) to resolve the remaining ~10%.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;This approach raises geocoding success rates while keeping costs down. In our case, it reduced costs by 67% and increased the share of successfully geocoded addresses by +3.7%. Here is how we did it.&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id="the-workflow-3-providers"&gt;The workflow: 3 providers&lt;/h3&gt;
&lt;p&gt;Our logistics client needed to geocode mostly residential addresses in France. France has an excellent government API for this purpose, the &lt;a href="https://coordable.co/blog/how-to-geocode-with-ban/"&gt;Base Adresse Nationale (BAN)&lt;/a&gt;, which covers French residential addresses very well, though it does not handle points of interest or addresses outside France. Many commercial providers actually use BAN data to improve their own results.&lt;/p&gt;
&lt;p&gt;The downside of BAN's API is that it is less robust at parsing and matching poorly formatted input. So we still needed to pair it with at least one commercial provider to ensure no addresses slip through. For that, we chose Google Maps. Finally, we added HERE as a second fallback because HERE also leverages BAN data, making it a strong option for the French addresses that Google could not resolve to rooftop level.&lt;/p&gt;
&lt;p&gt;Here is our strategy:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;French BAN&lt;/strong&gt;: confidence score &amp;gt; 0.75 required.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Google Maps API&lt;/strong&gt;: &lt;code&gt;ROOFTOP&lt;/code&gt; location type required (if not resolved in step 1).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;HERE&lt;/strong&gt;: confidence score &amp;gt; 0.75 required (if not resolved in step 2).&lt;/li&gt;
&lt;/ol&gt;
&lt;figure&gt;
  &lt;img src="https://coordable.co/images/how-to-reduce-geocoding-costs/cascading-workflow-screenshot.png" alt="Screenshot of the cascading geocoding workflow: BAN first, then Google Maps, then HERE, each with its own quality rule."&gt;
  &lt;figcaption&gt;The three-provider cascade configured in Coordable: BAN → Google Maps → HERE, each step gated by a quality rule.&lt;/figcaption&gt;
&lt;/figure&gt;

&lt;p&gt;We apply quality rules at each step to discard results that are not good enough. For French BAN and HERE, the confidence score reflects how closely the geocoder matched the input string. Although computed slightly differently across providers, both scores are a reliable way to filter out poor results. Setting the threshold at 0.75 is fairly strict, but the cascade makes this safe; any address rejected at one step simply moves to the next provider.&lt;/p&gt;
&lt;p&gt;Google Maps does not provide a confidence score, so instead we filter on the location type returned (&lt;code&gt;ROOFTOP&lt;/code&gt;, &lt;code&gt;APPROXIMATE&lt;/code&gt;, &lt;code&gt;GEOMETRIC_CENTER&lt;/code&gt;). For residential addresses, we require &lt;code&gt;ROOFTOP&lt;/code&gt; only, to ensure the coordinates are placed in front of the building rather than somewhere in the middle of the street.&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id="the-results"&gt;The results&lt;/h3&gt;
&lt;p&gt;To measure the impact, we ran two geocoding sessions on the same dataset and compared them:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Google Maps only&lt;/strong&gt;: the client's initial setup.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Cascading strategy&lt;/strong&gt;: BAN → Google Maps → HERE.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;The test dataset contains 1,000 residential addresses, mostly clean and well-formed. That is large enough to get a reliable picture of how this strategy performs at scale.&lt;/p&gt;
&lt;p&gt;In practice, the client geocodes about &lt;strong&gt;500,000 addresses per month&lt;/strong&gt;.&lt;/p&gt;
&lt;h4 id="session-1-google-maps-only"&gt;Session 1: Google Maps only&lt;/h4&gt;
&lt;figure&gt;
  &lt;img src="https://coordable.co/images/how-to-reduce-geocoding-costs/session1-google-screenshot.png" alt="Screenshot of the Google Maps only geocoding session: 94% valid results, $5 per 1,000."&gt;
  &lt;figcaption&gt;Session 1, Google Maps only: 940/1,000 addresses resolved at ROOFTOP level, at $5 per 1,000.&lt;/figcaption&gt;
&lt;/figure&gt;

&lt;p&gt;Results:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;94%&lt;/strong&gt; valid geocoding results (addresses resolved to &lt;code&gt;ROOFTOP&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;Estimated cost: &lt;strong&gt;$5.00 per 1,000 addresses&lt;/strong&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote&gt;
&lt;p&gt;Note: these costs ignore the Google free quota, which is shared across all Google Maps products. Its effective value depends on each client's overall usage, so we exclude it for a fair comparison.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h4 id="session-2-ban-google-maps-here-cascading"&gt;Session 2: BAN + Google Maps + HERE (cascading)&lt;/h4&gt;
&lt;figure&gt;
  &lt;img src="https://coordable.co/images/how-to-reduce-geocoding-costs/session2-cascading-providers-screenshot.png" alt="Screenshot of the cascading geocoding session: 97.7% valid results, $1.62 per 1,000."&gt;
  &lt;figcaption&gt;Session 2, Cascading strategy: 977/1,000 addresses resolved, at $1.62 per 1,000.&lt;/figcaption&gt;
&lt;/figure&gt;

&lt;p&gt;Results:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;97.7%&lt;/strong&gt; valid geocoding results, a &lt;strong&gt;+3.7% improvement&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Estimated cost: &lt;strong&gt;$1.62 per 1,000 addresses&lt;/strong&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Provider breakdown: BAN 64.5% · Google Maps 31.7% · HERE 3.8%&lt;/p&gt;
&lt;p&gt;Using BAN means that 64.5% of addresses cost nothing to geocode. Our strict rules then sent 31.7% of addresses to Google Maps, and HERE handled the remaining 3.8%.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Total cost reduction: 67%, while improving geocoding quality.&lt;/strong&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id="yearly-cost-savings"&gt;Yearly cost savings&lt;/h3&gt;
&lt;p&gt;At 500,000 addresses per month, the client was spending about $2,500/month on Google Maps alone. With the cascading strategy, that bill drops to $810/month, without any loss of quality; on the contrary.&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;/th&gt;
&lt;th&gt;Monthly cost&lt;/th&gt;
&lt;th&gt;Annual cost&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Google Maps only&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;$2,500&lt;/td&gt;
&lt;td&gt;$30,000&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Cascading (BAN + Google + HERE)&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;$810&lt;/td&gt;
&lt;td&gt;$9,720&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Savings&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;$1,690&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;$20,280&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;That is &lt;strong&gt;$20,280 saved per year&lt;/strong&gt;, while resolving +3.7% more addresses correctly.&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id="conclusion"&gt;Conclusion&lt;/h3&gt;
&lt;p&gt;If you are paying Google Maps rates for every address, you are likely overpaying. This real-world example shows how large the gap can be: by routing the bulk of clean French addresses through the free BAN API, reserving Google Maps for harder cases, and using HERE as a final safety net, the client went from 94% to 97.7% geocoding success while paying 67% less.&lt;/p&gt;
&lt;p&gt;The key is combining the right providers in the right order, and enforcing quality rules at each step so only genuinely good results pass through. The result is a system that is both cheaper and more reliable than relying on a single provider.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://coordable.co" class="learn-more-btn"&gt;Set up cascading geocoding with Coordable&lt;/a&gt;&lt;/p&gt;

&lt;hr&gt;
&lt;h3 id="where-to-go-from-here"&gt;Where to go from here&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Learn more about the providers used in this workflow: &lt;a href="https://coordable.co/provider/google-maps-geocoding-api/"&gt;Google Maps Geocoding API&lt;/a&gt;, &lt;a href="https://coordable.co/provider/here-geocoding-api/"&gt;HERE Geocoding API&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;See how providers compare in France: &lt;a href="https://coordable.co/country-analysis/best-geocoding-providers-france/"&gt;Best geocoding providers for France&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Compare Google and HERE head-to-head: &lt;a href="https://coordable.co/comparison/google-vs-here-geocoding-2026/"&gt;Google vs HERE for geocoding&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;See current geocoding prices at a glance: &lt;a href="https://coordable.co/blog/geocoding-prices-2026/"&gt;Geocoding prices in 2026&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;</description><category>2026</category><category>api</category><category>geocoding</category><category>pricing</category><category>providers</category><guid>https://coordable.co/blog/how-to-reduce-geocoding-costs-by-67/</guid><pubDate>Sun, 08 Mar 2026 10:00:00 GMT</pubDate></item><item><title>HERE price increase by 6% in 2026</title><link>https://coordable.co/blog/here-geocoding-price-increase-2026/</link><dc:creator>François Andrieux</dc:creator><description>&lt;p&gt;HERE Technologies is updating its pricing from April 2026. This post summarizes what matters for geocoding users: effective date, what changes, and who is affected.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://coordable.co/images/providers-logo/here-logo-large.png" alt="HERE Technologies logo" width="200" class="d-block mx-auto"&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Table of contents:&lt;/strong&gt;&lt;/p&gt;
&lt;div class="toc"&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://coordable.co/blog/here-geocoding-price-increase-2026/#what-here-announced"&gt;What HERE announced&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://coordable.co/blog/here-geocoding-price-increase-2026/#what-this-means-for-you"&gt;What this means for you&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://coordable.co/blog/here-geocoding-price-increase-2026/#where-to-go-from-here"&gt;Where to go from here&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;hr&gt;
&lt;h3 id="what-here-announced"&gt;What HERE announced&lt;/h3&gt;
&lt;p&gt;From April 1, 2026, the price of the &lt;strong&gt;HERE Base Plan&lt;/strong&gt; will increase by &lt;strong&gt;6%&lt;/strong&gt; for new contracts, renewals, and extensions. Existing contracts remain unchanged until renewal or extension.&lt;/p&gt;
&lt;p&gt;HERE Technologies communicated the following:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;The prices of &lt;strong&gt;all 35 HERE Location Services and Data IO&lt;/strong&gt; using the pay-per-transaction model will increase by &lt;strong&gt;6%&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;This price increase applies to &lt;strong&gt;all new subscriptions and (auto-)renewals from April 1, 2026&lt;/strong&gt; onwards.&lt;/li&gt;
&lt;li&gt;The price of the &lt;strong&gt;Developer technical support plan&lt;/strong&gt; remains unchanged.&lt;/li&gt;
&lt;li&gt;These pricing updates will be reflected in all future contracts and invoices from April 1, 2026 onwards.&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h3 id="what-this-means-for-you"&gt;What this means for you&lt;/h3&gt;
&lt;p&gt;If you sign a new contract or renew on or after April 1, 2026, you will see the new 6% pricing. For coverage, rate limits, licensing, and current pricing details, see our &lt;a href="https://coordable.co/provider/here-geocoding-api/"&gt;HERE Geocoding API&lt;/a&gt; guide.&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id="where-to-go-from-here"&gt;Where to go from here&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://coordable.co/provider/here-geocoding-api/"&gt;HERE Geocoding API&lt;/a&gt; — coverage, rate limits, and licensing.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://coordable.co/blog/geocoding-prices-2026/"&gt;Geocoding prices in 2026&lt;/a&gt; — compare HERE with other providers.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://coordable.co/comparison/google-vs-here-geocoding-2026/"&gt;Google vs HERE for geocoding&lt;/a&gt; — head-to-head comparison.&lt;/li&gt;
&lt;/ul&gt;</description><category>2026</category><category>api</category><category>geocoding</category><category>here</category><category>pricing</category><guid>https://coordable.co/blog/here-geocoding-price-increase-2026/</guid><pubDate>Fri, 06 Mar 2026 12:00:00 GMT</pubDate></item><item><title>Geocoding prices in 2026</title><link>https://coordable.co/blog/geocoding-prices-2026/</link><dc:creator>François Andrieux</dc:creator><description>&lt;p&gt;Here’s a clear overview of what the main geocoding services cost in 2026, and whether anything changed recently. Use the table and the &lt;strong&gt;interactive chart&lt;/strong&gt; below to compare prices at a glance and to simulate your costs. 🙂&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Table of contents:&lt;/strong&gt;&lt;/p&gt;
&lt;div class="toc"&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://coordable.co/blog/geocoding-prices-2026/#pricing-overview"&gt;Pricing overview&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://coordable.co/blog/geocoding-prices-2026/#compare-costs-at-your-volume"&gt;Compare costs at your volume&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://coordable.co/blog/geocoding-prices-2026/#did-prices-change"&gt;Did prices change?&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://coordable.co/blog/geocoding-prices-2026/#how-to-reduce-geocoding-cost"&gt;How to reduce geocoding cost&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://coordable.co/blog/geocoding-prices-2026/#price-is-not-everything"&gt;Price is not everything&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://coordable.co/blog/geocoding-prices-2026/#where-to-go-from-here"&gt;Where to go from here&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;hr&gt;
&lt;h3 id="pricing-overview"&gt;Pricing overview&lt;/h3&gt;
&lt;p&gt;Roughly what you pay after the free tier (per 1,000 requests, in USD). Free tiers and volume discounts vary; check each provider for exact terms.&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Provider&lt;/th&gt;
&lt;th&gt;Free tier&lt;/th&gt;
&lt;th&gt;Price per 1,000 (after free)&lt;/th&gt;
&lt;th&gt;Note&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Google Maps&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;10,000/month&lt;/td&gt;
&lt;td&gt;$5.00&lt;/td&gt;
&lt;td&gt;Volume discounts; see &lt;a href="https://coordable.co/blog/geocoding-prices-2026/#did-prices-change"&gt;March 2025 changes&lt;/a&gt; below.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;HERE&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;30,000/month&lt;/td&gt;
&lt;td&gt;$0.83&lt;/td&gt;
&lt;td&gt;Volume discounts; &lt;a href="https://coordable.co/blog/geocoding-prices-2026/#did-prices-change"&gt;6% increase from April 2026&lt;/a&gt; for new contracts and renewals.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;TomTom&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;2,500/day (~75k/month)&lt;/td&gt;
&lt;td&gt;$0.75&lt;/td&gt;
&lt;td&gt;Volume discounts.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Mapbox (Temporary)&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;100,000/month&lt;/td&gt;
&lt;td&gt;$0.75&lt;/td&gt;
&lt;td&gt;Temporary results only; no long-term storage.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Mapbox (Permanent)&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;—&lt;/td&gt;
&lt;td&gt;$5.00&lt;/td&gt;
&lt;td&gt;Allows indefinite storage of results.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;OpenCage&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;2,500/day (~75k/month)&lt;/td&gt;
&lt;td&gt;from ~$0.15–0.17&lt;/td&gt;
&lt;td&gt;Subscription-based; volume discounts. Permissive storage.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Nominatim (OSM)&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Public API rate-limited&lt;/td&gt;
&lt;td&gt;Free&lt;/td&gt;
&lt;td&gt;Self-hosting has infra costs.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;Many countries also have &lt;strong&gt;free or low-cost official APIs&lt;/strong&gt; (e.g. &lt;a href="https://coordable.co/blog/how-to-geocode-with-ban/"&gt;France's BAN&lt;/a&gt;, Spain's CartoCiudad, UK's OS Places under certain schemes). For local addresses, check our country-specific comparisons linked at the end.&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id="compare-costs-at-your-volume"&gt;Compare costs at your volume&lt;/h3&gt;
&lt;p&gt;The difficulty is that most providers have different pricing tiers and different free tiers. So you need to know exactly how many addresses you need to geocode to know which provider is the cheapest. Also, prices typically decrease as volume increases, so your per-request cost depends heavily on your total usage.&lt;/p&gt;
&lt;p&gt;You can simulate your costs with the &lt;strong&gt;interactive chart&lt;/strong&gt; below. Just select the number of addresses you need to geocode and the chart will show you the cost per provider!&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;&lt;div id="pricing_chart_main"&gt;&lt;/div&gt;
&lt;script&gt;
(function() {
  const providers = ["Google", "HERE", "TomTom", "OpenCage", "Mapbox (Temp)", "Mapbox (Perm)", "Nominatim"];
  if (typeof includePricingChart === "function") {
    includePricingChart("#pricing_chart_main", providers);
  }
})();
&lt;/script&gt;
&lt;hr&gt;
&lt;h3 id="did-prices-change"&gt;Did prices change?&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;Google (March 2025):&lt;/strong&gt; Google replaced the previous $200/month credit with &lt;strong&gt;per-SKU free usage&lt;/strong&gt; (e.g. around 10,000 free billable events per month for the Geocoding API). Volume discount tiers were expanded for high usage. So the &lt;em&gt;effective&lt;/em&gt; free tier for geocoding is lower than before, but heavy users can see lower marginal costs at scale. Details: &lt;a href="https://coordable.co/provider/google-maps-geocoding-api/"&gt;Google Maps Geocoding API guide&lt;/a&gt; and &lt;a href="https://developers.google.com/maps/billing-and-pricing/march-2025"&gt;Google Maps Platform March 2025 changes&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;HERE (April 2026):&lt;/strong&gt; From April 1, 2026, the HERE Base Plan and all pay-per-transaction Location Services and Data IO &lt;strong&gt;increase by 6%&lt;/strong&gt; for new contracts, renewals, and extensions. Existing contracts are unchanged until renewal. See &lt;a href="https://coordable.co/blog/here-geocoding-price-increase-2026/"&gt;HERE price increase by 6% in 2026&lt;/a&gt; for details.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Other major providers:&lt;/strong&gt; TomTom, Mapbox, and OpenCage have kept their published pricing stable into 2026. Our source dates in the repo are October 2025 / January 2026; always confirm current prices on each provider’s site before committing.&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id="how-to-reduce-geocoding-cost"&gt;How to reduce geocoding cost&lt;/h3&gt;
&lt;p&gt;Relying on a single premium provider (e.g. Google at $5 per 1,000 requests) can become very expensive at scale. A proven way to &lt;strong&gt;cut costs without sacrificing quality&lt;/strong&gt; is &lt;strong&gt;cascading geocoders&lt;/strong&gt;: use several providers in a defined order, and only fall back to the next when the current one fails or does not meet your criteria.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;What is cascading?&lt;/strong&gt; You define an ordered list of providers (e.g. OpenStreetMap or OpenCage → HERE → Google). For each address, you try the first provider; if that fails or the result does not pass validation, you automatically try the next one, and so on. Cheaper or free providers handle the bulk of easy addresses; premium providers are used only for the harder cases. The result: &lt;strong&gt;higher success rates&lt;/strong&gt; (often 98–99% instead of ~90% with one provider) and &lt;strong&gt;lower total cost&lt;/strong&gt;, because most requests are served by the least expensive option.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://coordable.co/" class="learn-more-btn"&gt;Reduce your costs with Coordable cascading geocoding&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The diagram below illustrates the idea: send 100% of requests to a free or low-cost provider first (e.g. OSM); only the unresolved share (e.g. 10%) goes to a mid-tier provider (e.g. HERE); and only the remainder (e.g. 4%) hits the premium provider (e.g. Google). You still reach a very high overall geocoding rate (e.g. 99.9%) while paying the premium rate for a small fraction of traffic.&lt;/p&gt;
&lt;figure&gt;
  &lt;img src="https://coordable.co/images/geocoding-cascade.png" alt="Cascading geocoding: 100% of requests go to OSM first (90% resolved), then 10% to HERE (6% more resolved), then 4% to Google (3.9% resolved); total 99.9% geocoding rate."&gt;
  &lt;figcaption&gt;Cascading geocoders: prioritize cheap or free providers, fall back to premium only when needed. Quality and cost scale with each step.&lt;/figcaption&gt;
&lt;/figure&gt;

&lt;p&gt;You can implement cascading in your own code (call provider A, then B on failure, etc.) or do it easily with &lt;a href="https://coordable.co"&gt;Coordable&lt;/a&gt;: choose your providers, define the cascade order and fallback rules, and optionally validate results so only good coordinates reach your database. Either way, the principle is the same: &lt;strong&gt;prioritize cheaper solutions and only fall back to premium when it is truly necessary.&lt;/strong&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;&lt;a href="https://coordable.co"&gt;Try Coordable&lt;/a&gt;&lt;/strong&gt; to easily implement cascading geocoding for your business.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr&gt;
&lt;h3 id="price-is-not-everything"&gt;Price is not everything&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;Pricing does not always reflect quality.&lt;/strong&gt; The cheapest option is not necessarily the worst, and some geocoders can match or beat large commercial providers depending on region and data type (addresses vs POIs, local vs global). To see how providers actually perform where you operate, check the best geocoding provider for your country. We have in-depth comparisons for:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://coordable.co/country-analysis/best-geocoding-providers-france/"&gt;Best geocoding providers for France&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://coordable.co/country-analysis/best-geocoding-providers-germany/"&gt;Best geocoding providers for Germany&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://coordable.co/country-analysis/best-geocoding-providers-italy/"&gt;Best geocoding providers for Italy&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://coordable.co/country-analysis/best-geocoding-providers-luxembourg/"&gt;Best geocoding providers for Luxembourg&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://coordable.co/country-analysis/best-geocoding-providers-portugal/"&gt;Best geocoding providers for Portugal&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://coordable.co/country-analysis/best-geocoding-providers-spain/"&gt;Best geocoding providers for Spain&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://coordable.co/country-analysis/best-geocoding-providers-united-kingdom/"&gt;Best geocoding providers for the United Kingdom&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h3 id="where-to-go-from-here"&gt;Where to go from here&lt;/h3&gt;
&lt;p&gt;For more detail on a single provider (coverage, rate limits, licensing), see our guides: &lt;a href="https://coordable.co/provider/google-maps-geocoding-api/"&gt;Google Maps Geocoding API&lt;/a&gt;, &lt;a href="https://coordable.co/provider/here-geocoding-api/"&gt;HERE Geocoding API&lt;/a&gt;, &lt;a href="https://coordable.co/provider/mapbox-geocoding-api/"&gt;Mapbox Geocoding API&lt;/a&gt;. For a head-to-head in 2026, see &lt;a href="https://coordable.co/comparison/google-vs-here-geocoding-2026/"&gt;Google vs HERE for geocoding&lt;/a&gt;.&lt;/p&gt;</description><category>2026</category><category>api</category><category>geocoding</category><category>pricing</category><category>providers</category><guid>https://coordable.co/blog/geocoding-prices-2026/</guid><pubDate>Fri, 06 Mar 2026 10:00:00 GMT</pubDate></item><item><title>UK Address and Postal Data FAQ: AddressBase, UPRN, PAF, and PSGA Explained</title><link>https://coordable.co/blog/uk-address-postal-data-faq/</link><dc:creator>François Andrieux</dc:creator><description>&lt;p&gt;If you work with UK addresses, you've probably encountered terms like &lt;strong&gt;AddressBase&lt;/strong&gt;, &lt;strong&gt;UPRN&lt;/strong&gt;, &lt;strong&gt;PAF&lt;/strong&gt;, and &lt;strong&gt;PSGA&lt;/strong&gt;. These are fundamental components of the UK's address infrastructure, but they can be confusing.&lt;/p&gt;
&lt;p&gt;This FAQ answers the most common questions about UK address and postal data systems. I hope it will help you as it helped me! 🙂&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Looking for practical geocoding solutions? See our &lt;a href="https://coordable.co/country-analysis/best-geocoding-providers-united-kingdom/"&gt;comparison of UK geocoding providers&lt;/a&gt; to find the best API for your needs.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr&gt;
&lt;p&gt;&lt;strong&gt;Table of contents:&lt;/strong&gt;&lt;/p&gt;
&lt;div class="toc"&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://coordable.co/blog/uk-address-postal-data-faq/#what-is-a-uprn"&gt;What is a UPRN?&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://coordable.co/blog/uk-address-postal-data-faq/#what-is-a-usrn"&gt;What is a USRN?&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://coordable.co/blog/uk-address-postal-data-faq/#why-do-uprns-exist"&gt;Why do UPRNs exist?&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://coordable.co/blog/uk-address-postal-data-faq/#how-to-check-for-a-uprn"&gt;How to check for a UPRN?&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://coordable.co/blog/uk-address-postal-data-faq/#what-is-addressbase"&gt;What is AddressBase?&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://coordable.co/blog/uk-address-postal-data-faq/#what-are-the-different-addressbase-products"&gt;What are the different AddressBase products?&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://coordable.co/blog/uk-address-postal-data-faq/#can-you-give-an-example-of-addressbase-data"&gt;Can you give an example of AddressBase data?&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://coordable.co/blog/uk-address-postal-data-faq/#what-is-royal-mail-paf"&gt;What is Royal Mail PAF?&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://coordable.co/blog/uk-address-postal-data-faq/#paf-vs-addressbase-whats-the-difference"&gt;PAF vs AddressBase: What's the difference?&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://coordable.co/blog/uk-address-postal-data-faq/#is-addressbase-free-and-open-data"&gt;Is AddressBase free and open data?&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://coordable.co/blog/uk-address-postal-data-faq/#is-royal-mail-paf-free-and-open-data"&gt;Is Royal Mail PAF free and open data?&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://coordable.co/blog/uk-address-postal-data-faq/#what-is-the-public-sector-geospatial-agreement-psga"&gt;What is the Public Sector Geospatial Agreement (PSGA)?&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://coordable.co/blog/uk-address-postal-data-faq/#what-are-the-alternatives-to-addressbase-and-paf"&gt;What are the alternatives to AddressBase and PAF?&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://coordable.co/blog/uk-address-postal-data-faq/#how-do-uprn-addressbase-and-paf-work-together"&gt;How do UPRN, AddressBase, and PAF work together?&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://coordable.co/blog/uk-address-postal-data-faq/#which-should-i-use-addressbase-or-paf"&gt;Which should I use: AddressBase or PAF?&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://coordable.co/blog/uk-address-postal-data-faq/#can-i-geocode-uk-addresses-without-addressbase-or-paf"&gt;Can I geocode UK addresses without AddressBase or PAF?&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://coordable.co/blog/uk-address-postal-data-faq/#where-can-i-learn-more"&gt;Where can I learn more?&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;hr&gt;
&lt;h4 id="what-is-a-uprn"&gt;What is a UPRN?&lt;/h4&gt;
&lt;p&gt;&lt;strong&gt;UPRN&lt;/strong&gt; stands for &lt;strong&gt;Unique Property Reference Number&lt;/strong&gt;. It's a unique 12-digit identifier assigned to every addressable location in Great Britain (England, Scotland, and Wales).&lt;/p&gt;
&lt;p&gt;Each property has one UPRN that never changes, even if the address changes. These are simple 12-digit numbers (e.g., &lt;code&gt;100023336956&lt;/code&gt;) that cover residential homes, commercial buildings, sheds, garages, and even mailboxes. The system is managed by GeoPlace, a partnership between the Local Government Association and Ordnance Survey.&lt;/p&gt;
&lt;figure&gt;
    &lt;img src="https://coordable.co/images/uk-address-faq/uprn-example.png" alt="UPRN example showing a property with its unique 12-digit identifier"&gt;
    &lt;figcaption&gt;Example: the 10 Downing Street UPRN is &lt;code&gt;10008517798&lt;/code&gt; (&lt;a href="https://uprn.uk/100023336956"&gt;source&lt;/a&gt;)&lt;/figcaption&gt;
&lt;/figure&gt;

&lt;p&gt;For example, &lt;code&gt;100023336956&lt;/code&gt; is the UPRN for &lt;code&gt;10 Downing Street, London SW1A 2AA&lt;/code&gt; (the Prime Minister's residence). Even if the building's use or occupant changes, this 12-digit identifier remains constant, ensuring consistent identification across all government systems and databases.&lt;/p&gt;
&lt;p&gt;This UPRN is associated to the &lt;code&gt;8400071&lt;/code&gt; USRN (Unique Street Reference Number) for the street "Downing Street".&lt;/p&gt;
&lt;h4 id="what-is-a-usrn"&gt;What is a USRN?&lt;/h4&gt;
&lt;p&gt;&lt;strong&gt;USRN&lt;/strong&gt; stands for &lt;strong&gt;Unique Street Reference Number&lt;/strong&gt;. It's a unique identifier assigned to every street in Great Britain, that can go up to 10 digits long.&lt;/p&gt;
&lt;p&gt;Each street has one USRN that never changes, even if the street name changes. For example, &lt;code&gt;8400071&lt;/code&gt; is the USRN for the street "Downing Street".&lt;/p&gt;
&lt;hr&gt;
&lt;h4 id="why-do-uprns-exist"&gt;Why do UPRNs exist?&lt;/h4&gt;
&lt;p&gt;Using addresses as identifiers is problematic because:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Addresses change:&lt;/strong&gt; Streets get renamed, building numbers change&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Typos and variations:&lt;/strong&gt; "High St", "High Street", "HIGH STREET" are all the same place&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Inconsistent formatting:&lt;/strong&gt; Different systems store addresses differently&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;UPRNs solve this&lt;/strong&gt; by providing a stable, unique identifier that connects all systems and databases.&lt;/p&gt;
&lt;p&gt;For example, if &lt;code&gt;123 High Street, London&lt;/code&gt; is renamed to &lt;code&gt;123 King Avenue, London&lt;/code&gt;, the UPRN remains the same (e.g., &lt;code&gt;100023336956&lt;/code&gt;). This allows:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Government records to stay linked&lt;/li&gt;
&lt;li&gt;Utility companies to maintain service history&lt;/li&gt;
&lt;li&gt;Emergency services to find the correct location&lt;/li&gt;
&lt;li&gt;Council tax records to remain accurate&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h4 id="how-to-check-for-a-uprn"&gt;How to check for a UPRN?&lt;/h4&gt;
&lt;p&gt;You can use the website &lt;a href="https://uprn.uk/"&gt;uprn.uk&lt;/a&gt; to check for a UPRN.&lt;/p&gt;
&lt;figure&gt;
    &lt;img src="https://coordable.co/images/uk-address-faq/uprn-example-2.png" alt="UPRN example showing a property with its unique 12-digit identifier"&gt;
    &lt;figcaption&gt;Example lookup for the UPRN &lt;code&gt;100023336956&lt;/code&gt; (&lt;a href="https://uprn.uk/100023336956"&gt;source&lt;/a&gt;)&lt;/figcaption&gt;
&lt;/figure&gt;

&lt;h4 id="what-is-addressbase"&gt;What is AddressBase?&lt;/h4&gt;
&lt;p&gt;&lt;strong&gt;AddressBase&lt;/strong&gt; is the most comprehensive and authoritative address database for Great Britain, maintained by Ordnance Survey.&lt;/p&gt;
&lt;figure&gt;
  &lt;img src="https://coordable.co/images/uk-address-faq/addressbase-illustration.png" alt="AddressBase illustration"&gt;
  &lt;figcaption&gt;AddressBase combines UPRNs, addresses, coordinates, and property metadata into a comprehensive database.&lt;/figcaption&gt;
&lt;/figure&gt;

&lt;p&gt;It contains all UPRNs (every property's unique identifier), full addresses (building number/name, street, locality, town, postcode), geographic coordinates (latitude and longitude in British National Grid and WGS84), property classification (residential, commercial, etc.), local authority information (which council area the property belongs to), and multiple address formats (official address, alternative names, historical addresses).&lt;/p&gt;
&lt;hr&gt;
&lt;h4 id="what-are-the-different-addressbase-products"&gt;What are the different AddressBase products?&lt;/h4&gt;
&lt;p&gt;Ordnance Survey offers three AddressBase products with varying levels of detail:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;AddressBase Core&lt;/strong&gt; provides basic address information with UPRNs and coordinates, suitable for simple address lookup and validation.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;AddressBase Plus&lt;/strong&gt; is an enhanced dataset with additional address details, multiple address formats (e.g., Welsh language variants), and property status information.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;AddressBase Premium&lt;/strong&gt; is the most comprehensive dataset, including full address history, alternative addresses (e.g., previous names), detailed metadata and relationships. It's best for complex applications requiring complete address intelligence.&lt;/p&gt;
&lt;hr&gt;
&lt;h4 id="can-you-give-an-example-of-addressbase-data"&gt;Can you give an example of AddressBase data?&lt;/h4&gt;
&lt;p&gt;Here's a sample record from AddressBase Plus showing an address in Exeter, United Kingdom:&lt;/p&gt;
&lt;div class="code"&gt;&lt;pre class="code literal-block"&gt;&lt;span class="nt"&gt;uprn&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l l-Scalar l-Scalar-Plain"&gt;10094201708&lt;/span&gt;
&lt;span class="nt"&gt;udprn&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;""&lt;/span&gt;
&lt;span class="nt"&gt;parent_uprn&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l l-Scalar l-Scalar-Plain"&gt;55508903&lt;/span&gt;
&lt;span class="nt"&gt;sub_building&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;"FLAT&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;404"&lt;/span&gt;
&lt;span class="nt"&gt;building_name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;"CLIFFORD&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;HOUSE"&lt;/span&gt;
&lt;span class="nt"&gt;building_number&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;""&lt;/span&gt;
&lt;span class="nt"&gt;dependent_thoroughfare&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;""&lt;/span&gt;
&lt;span class="nt"&gt;thoroughfare&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;"STADIUM&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;WAY"&lt;/span&gt;
&lt;span class="nt"&gt;double_dependent_locality&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;""&lt;/span&gt;
&lt;span class="nt"&gt;dependent_locality&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;""&lt;/span&gt;
&lt;span class="nt"&gt;post_town&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;"EXETER"&lt;/span&gt;
&lt;span class="nt"&gt;postcode&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;"EX4&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;6AX"&lt;/span&gt;
&lt;span class="nt"&gt;rpc&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;"S"&lt;/span&gt;
&lt;span class="nt"&gt;coordinates&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nt"&gt;x&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l l-Scalar l-Scalar-Plain"&gt;292839.08&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nt"&gt;y&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l l-Scalar l-Scalar-Plain"&gt;093519.86&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nt"&gt;latitude&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l l-Scalar l-Scalar-Plain"&gt;50.7313689&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nt"&gt;longitude&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l l-Scalar l-Scalar-Plain"&gt;-3.5197896&lt;/span&gt;
&lt;span class="nt"&gt;classification&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l l-Scalar l-Scalar-Plain"&gt;2&lt;/span&gt;
&lt;span class="nt"&gt;status&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;"E"&lt;/span&gt;
&lt;span class="nt"&gt;state&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;"I"&lt;/span&gt;
&lt;span class="nt"&gt;dates&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nt"&gt;start_date&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l l-Scalar l-Scalar-Plain"&gt;2018-07-03&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nt"&gt;last_update&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l l-Scalar l-Scalar-Plain"&gt;2019-11-20&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nt"&gt;entry_date&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l l-Scalar l-Scalar-Plain"&gt;2020-06-13&lt;/span&gt;
&lt;span class="nt"&gt;record_type&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;"R"&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;This record represents &lt;code&gt;Flat 404, Clifford House, Stadium Way, Exeter EX4 6AX&lt;/code&gt;, with coordinates and metadata showing when the address was created and last updated.&lt;/p&gt;
&lt;hr&gt;
&lt;h4 id="what-is-royal-mail-paf"&gt;What is Royal Mail PAF?&lt;/h4&gt;
&lt;p&gt;&lt;strong&gt;PAF&lt;/strong&gt; stands for &lt;strong&gt;Postcode Address File&lt;/strong&gt;. It's &lt;a href="https://www.poweredbypaf.com/"&gt;Royal Mail's database&lt;/a&gt; of all "delivery points" (addresses that receive mail) in the UK.&lt;/p&gt;
&lt;p&gt;Managed by Royal Mail (the UK's postal service), PAF is delivery-focused and contains only addresses where mail is delivered. It's updated regularly to reflect new builds and address changes, covers all UK countries (England, Scotland, Wales, and Northern Ireland), and every address is linked to its postcode.&lt;/p&gt;
&lt;p&gt;Each PAF record contains: building name/number, street name, locality, town, county, postcode, and a delivery point suffix (DPS) — a unique identifier within a postcode.&lt;/p&gt;
&lt;h4 id="paf-vs-addressbase-whats-the-difference"&gt;PAF vs AddressBase: What's the difference?&lt;/h4&gt;
&lt;p&gt;Let's take an example:&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Feature&lt;/th&gt;
&lt;th&gt;Royal Mail PAF&lt;/th&gt;
&lt;th&gt;AddressBase&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Coverage&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;UK (including Northern Ireland)&lt;/td&gt;
&lt;td&gt;Great Britain only (England, Scotland, Wales)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Focus&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Mail delivery points&lt;/td&gt;
&lt;td&gt;All addressable locations&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Identifier&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Postcode + DPS&lt;/td&gt;
&lt;td&gt;UPRN&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Includes&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Only addresses receiving mail&lt;/td&gt;
&lt;td&gt;All properties (including non-postal)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Managed by&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Royal Mail&lt;/td&gt;
&lt;td&gt;Ordnance Survey / GeoPlace&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Coordinates&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Not included (usually)&lt;/td&gt;
&lt;td&gt;Included&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;To illustrate: a property might be in PAF if it receives mail (e.g., &lt;code&gt;123 High Street, London SW1A 1AA&lt;/code&gt;), but in AddressBase whether or not it receives mail (e.g., a shed, garage, or temporary structure). Some properties (like construction sites or private roads) may have a UPRN but no PAF entry because Royal Mail doesn't deliver there.&lt;/p&gt;
&lt;hr&gt;
&lt;h4 id="is-addressbase-free-and-open-data"&gt;Is AddressBase free and open data?&lt;/h4&gt;
&lt;p&gt;&lt;strong&gt;Short answer:&lt;/strong&gt; Partially open — it depends on who you are and how you'll use it.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;✅ Free access:&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;For UK public sector organizations, AddressBase is available through the &lt;strong&gt;Public Sector Geospatial Agreement (PSGA)&lt;/strong&gt; (see below about this). This includes AddressBase Core and Plus, free to use for public sector purposes.&lt;/p&gt;
&lt;p&gt;For others, some local authorities publish UPRN data as open data (not universal), and Ordnance Survey's OpenData products exist, but &lt;strong&gt;AddressBase is NOT included&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;💰 Paid licenses required:&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;For commercial use, businesses need a paid license. Various developer license tiers are available based on usage volume. AddressBase Premium requires a paid license even for many public sector uses beyond basic PSGA coverage.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Important note:&lt;/strong&gt; While UPRN itself is just a number, accessing the full database requires licensing. Using UPRNs in your application may require a license even if you obtain them elsewhere. Always check current terms on the &lt;a href="https://www.ordnancesurvey.co.uk/"&gt;Ordnance Survey website&lt;/a&gt;.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr&gt;
&lt;h4 id="is-royal-mail-paf-free-and-open-data"&gt;Is Royal Mail PAF free and open data?&lt;/h4&gt;
&lt;p&gt;No, PAF is not free or open data. Royal Mail licenses PAF commercially (see &lt;a href="https://www.poweredbypaf.com/pricing/"&gt;Royal Mail PAF pricing&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;You can access PAF in three ways: &lt;strong&gt;directly from Royal Mail&lt;/strong&gt; (various commercial licenses available, with pricing based on usage and application type, offering the full dataset or subsets for specific regions), &lt;strong&gt;through licensed resellers&lt;/strong&gt; (many address validation and geocoding providers like Loqate, Postcode Anywhere, and Ideal Postcodes license PAF, allowing you to access it indirectly through their APIs), or &lt;strong&gt;for public sector&lt;/strong&gt; (some limited access via PSGA, often supplemented with AddressBase).&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Check out our &lt;a href="https://coordable.co/country-analysis/best-geocoding-providers-united-kingdom/"&gt;comparison of UK geocoding providers&lt;/a&gt; to find the best API for your needs.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Royal Mail is a commercial company, and PAF is valuable intellectual property. Maintaining and updating the database requires significant resources, funded through licensing fees.&lt;/p&gt;
&lt;hr&gt;
&lt;h4 id="what-is-the-public-sector-geospatial-agreement-psga"&gt;What is the Public Sector Geospatial Agreement (PSGA)?&lt;/h4&gt;
&lt;p&gt;The &lt;strong&gt;PSGA&lt;/strong&gt; is a UK government initiative that provides &lt;strong&gt;free access&lt;/strong&gt; to Ordnance Survey data for public sector organizations.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Who qualifies?&lt;/strong&gt; UK public sector organizations, including central government departments, local councils and authorities, NHS organizations, police and fire services, educational institutions (schools, universities), and other public bodies.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;What data is included?&lt;/strong&gt; The PSGA provides access to AddressBase Core (free), AddressBase Plus (free), AddressBase Premium (limited access, may require additional licenses), OS MasterMap and other Ordnance Survey datasets, plus API access for online services.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;What are the terms?&lt;/strong&gt; The data is free to use for public sector business but cannot be shared with commercial third parties, cannot be resold or used for purely commercial purposes, and must be used for public sector functions.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;How to access PSGA data:&lt;/strong&gt; Check if your organization qualifies, register on the &lt;a href="https://www.ordnancesurvey.co.uk/business-government/public-sector-geospatial-agreement"&gt;Ordnance Survey website&lt;/a&gt;, download data or access APIs, and use in compliance with PSGA terms.&lt;/p&gt;
&lt;hr&gt;
&lt;h4 id="what-are-the-alternatives-to-addressbase-and-paf"&gt;What are the alternatives to AddressBase and PAF?&lt;/h4&gt;
&lt;p&gt;If you need free or open UK address data, consider these alternatives:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;OpenAddresses UK&lt;/strong&gt; is a crowdsourced, open-source address database with good coverage in many areas (though not complete), available under open data (public domain) license at &lt;a href="https://openaddresses.io"&gt;openaddresses.io&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;OpenStreetMap (OSM)&lt;/strong&gt; offers community-maintained map data with UK addresses. Coverage varies by area (excellent in cities, patchy in rural areas), licensed under ODbL (Open Database License), accessible at &lt;a href="https://www.openstreetmap.org"&gt;openstreetmap.org&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;ONS Postcode Directory (ONSPD)&lt;/strong&gt; from the Office for National Statistics provides all UK postcodes with geographic info under the Open Government License at &lt;a href="https://geoportal.statistics.gov.uk/"&gt;ONS Geoportal&lt;/a&gt;. Note: it contains postcodes and coordinates, not full addresses.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Local Authority open data:&lt;/strong&gt; Some councils publish their address data (coverage varies widely by council), usually under the Open Government License. Check individual council open data portals.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Good to know:&lt;/strong&gt; AddressBase and PAF are more complete and accurate, commercial data is updated more frequently, licensed data comes with support while open data is "as-is", and commercial licenses are clear while open data usage can be complex.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr&gt;
&lt;h4 id="how-do-uprn-addressbase-and-paf-work-together"&gt;How do UPRN, AddressBase, and PAF work together?&lt;/h4&gt;
&lt;p&gt;In short, they complement each other in the UK address ecosystem.&lt;/p&gt;
&lt;p&gt;Here's an example workflow: imagine a utility company needs to manage customer accounts. A customer signs up with address "10 Downing Street, London SW1A 2AA". The system looks up the address in AddressBase, gets UPRN &lt;code&gt;10008517798&lt;/code&gt; and coordinates &lt;code&gt;51.5034, -0.1276&lt;/code&gt;, validates the postcode using PAF to confirm it's a mail delivery point, stores the UPRN as the primary identifier, and links all services to this UPRN (billing, service calls, maintenance history).&lt;/p&gt;
&lt;figure&gt;
  &lt;img src="https://coordable.co/images/uk-address-faq/ecosystem-diagram.png" alt="Diagram showing how UPRN, AddressBase, and PAF relate to each other"&gt;
  &lt;figcaption&gt;The UK address ecosystem: UPRNs identify properties, AddressBase provides comprehensive data, and PAF focuses on mail delivery.&lt;/figcaption&gt;
&lt;/figure&gt;

&lt;p&gt;The benefits are clear: if the address changes, the UPRN stays the same; coordinates enable field service routing; the postcode confirms mail delivery is possible; and there are no duplicate customer records.&lt;/p&gt;
&lt;hr&gt;
&lt;h4 id="which-should-i-use-addressbase-or-paf"&gt;Which should I use: AddressBase or PAF?&lt;/h4&gt;
&lt;p&gt;It depends on your use case:&lt;/p&gt;
&lt;p&gt;Use &lt;strong&gt;PAF&lt;/strong&gt; if you need postcode validation, mail delivery confirmation, address formatting for postal services, Northern Ireland addresses, or simple address lookup by postcode.&lt;/p&gt;
&lt;p&gt;Use &lt;strong&gt;AddressBase&lt;/strong&gt; if you need UPRNs for data linking, geographic coordinates, all addressable locations (not just postal), property classification, local authority boundaries, or historical address data.&lt;/p&gt;
&lt;p&gt;Use &lt;strong&gt;both&lt;/strong&gt; if you need complete address intelligence, geocoding with postal validation, maximum coverage and accuracy, or integration with multiple systems.&lt;/p&gt;
&lt;p&gt;Many organizations use both: AddressBase for the authoritative address register and UPRNs, and PAF for postal validation and formatting.&lt;/p&gt;
&lt;hr&gt;
&lt;h4 id="can-i-geocode-uk-addresses-without-addressbase-or-paf"&gt;Can I geocode UK addresses without AddressBase or PAF?&lt;/h4&gt;
&lt;p&gt;Yes! You have several options:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Global geocoding providers&lt;/strong&gt; include Google Maps Geocoding API (excellent for UK addresses), HERE Geocoding (good UK coverage), Mapbox Geocoding (uses OpenStreetMap + proprietary data), and TomTom Geocoding (commercial-grade accuracy). These services have their own address databases, often incorporating multiple sources.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;UK-specific geocoding services&lt;/strong&gt; include Ideal Postcodes (uses OS data, licensed), Loqate (uses PAF and other data), and Postcode Anywhere (UK-focused address validation).&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Open-source geocoding&lt;/strong&gt; options include Nominatim (OpenStreetMap geocoder, free and open-source) and Pelias (open-source geocoder that can use OpenAddresses).&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Learn more&lt;/strong&gt; in our comparison of UK geocoding providers: &lt;a href="https://coordable.co/country-analysis/best-geocoding-providers-united-kingdom/"&gt;Best Geocoding Providers for the United Kingdom&lt;/a&gt;.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr&gt;
&lt;h4 id="where-can-i-learn-more"&gt;Where can I learn more?&lt;/h4&gt;
&lt;p&gt;&lt;strong&gt;Official sources:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Ordnance Survey:&lt;/strong&gt; &lt;a href="https://www.ordnancesurvey.co.uk/"&gt;ordnancesurvey.co.uk&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;GeoPlace (UPRN):&lt;/strong&gt; &lt;a href="https://www.geoplace.co.uk/"&gt;geoplace.co.uk&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Royal Mail PAF:&lt;/strong&gt; &lt;a href="https://www.royalmail.com/business/services/marketing/data-optimisation/paf"&gt;royalmail.com/business/services/marketing/data-optimisation/paf&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;PSGA Information:&lt;/strong&gt; &lt;a href="https://www.ordnancesurvey.co.uk/business-government/public-sector-geospatial-agreement"&gt;ordnancesurvey.co.uk/psga&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Related articles:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://coordable.co/blog/how-geocoding-works-a-simple-guide/"&gt;How geocoding works: A simple guide&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://coordable.co/country-analysis/best-geocoding-providers-united-kingdom/"&gt;UK Country Analysis&lt;/a&gt; — Geocoding performance in the UK&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Need help with UK addresses?&lt;/strong&gt; &lt;a href="https://coordable.co"&gt;Coordable&lt;/a&gt; can help you geocode, validate, and manage UK addresses with high accuracy, supporting multiple providers and data sources.&lt;/p&gt;
&lt;/blockquote&gt;</description><category>addresses</category><category>faq</category><category>geocoding</category><category>guides</category><category>uk</category><guid>https://coordable.co/blog/uk-address-postal-data-faq/</guid><pubDate>Sun, 02 Nov 2025 10:00:00 GMT</pubDate></item><item><title>How geocoding works ? A simple guide</title><link>https://coordable.co/blog/how-geocoding-works-a-simple-guide/</link><dc:creator>François Andrieux</dc:creator><description>&lt;h3 id="what-is-geocoding-and-why-it-matters"&gt;What is geocoding and why it matters?&lt;/h3&gt;
&lt;p&gt;Every day, we interact with addresses and places; whether we're searching for a nearby coffee shop on our phone, or entering our delivery address at checkout. But here's the thing: computers don't naturally understand "123 Main Street" or "Central Park." They work with numbers and more specifically, with latitude and longitude coordinates.&lt;/p&gt;
&lt;p&gt;That's where geocoding comes in: &lt;strong&gt;Geocoding is the process of translating human-readable addresses into geographic coordinates that computers can use to pinpoint locations on a map&lt;/strong&gt;. It's the invisible bridge between how we describe places and how machines navigate, analyze, and visualize them.&lt;/p&gt;
&lt;figure&gt;
  &lt;img src="https://coordable.co/images/geocoding-guide/geocoding-example.png" alt="A geocoding example: 57 Rue de Matignon, 75007 Paris, France → 48° 51′ 15″ N, 2° 19′ 14,36″ E"&gt;
  &lt;figcaption&gt;A simple geocoding example.&lt;/figcaption&gt;
&lt;/figure&gt;

&lt;p&gt;This guide will walk you through what geocoding is, &lt;strong&gt;how it works behind the scenes&lt;/strong&gt;, &lt;strong&gt;what can go wrong&lt;/strong&gt;, and &lt;strong&gt;how to get the best results&lt;/strong&gt;. Let's dive in! 🙂&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Note&lt;/strong&gt;: You don't need to be technical to use geocoding well. Understanding a few key concepts will help you troubleshoot issues and make better decisions.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr&gt;
&lt;p&gt;&lt;strong&gt;Table of contents:&lt;/strong&gt;&lt;/p&gt;
&lt;div class="toc"&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://coordable.co/blog/how-geocoding-works-a-simple-guide/#what-is-geocoding-and-why-it-matters"&gt;What is geocoding and why it matters?&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://coordable.co/blog/how-geocoding-works-a-simple-guide/#the-two-ways-of-geocoding"&gt;The two ways of geocoding&lt;/a&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href="https://coordable.co/blog/how-geocoding-works-a-simple-guide/#forward-geocoding-turning-addresses-into-coordinates"&gt;Forward geocoding: turning addresses into coordinates&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://coordable.co/blog/how-geocoding-works-a-simple-guide/#reverse-geocoding-turning-coordinates-into-addresses"&gt;Reverse geocoding: turning coordinates into addresses&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="https://coordable.co/blog/how-geocoding-works-a-simple-guide/#how-geocoding-works-simplified-version"&gt;How geocoding works (simplified version)&lt;/a&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href="https://coordable.co/blog/how-geocoding-works-a-simple-guide/#step-1-address-normalization"&gt;Step 1: Address normalization&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://coordable.co/blog/how-geocoding-works-a-simple-guide/#step-2-parsing-components"&gt;Step 2: Parsing components&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://coordable.co/blog/how-geocoding-works-a-simple-guide/#step-3-database-lookup-finding-the-match"&gt;Step 3: Database lookup - finding the match&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://coordable.co/blog/how-geocoding-works-a-simple-guide/#step-4-scoring-and-ranking-choosing-the-best-match"&gt;Step 4: Scoring and ranking - choosing the best match&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="https://coordable.co/blog/how-geocoding-works-a-simple-guide/#what-could-go-wrong-understanding-geocoding-failures"&gt;What could go wrong? Understanding geocoding failures&lt;/a&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href="https://coordable.co/blog/how-geocoding-works-a-simple-guide/#problem-1-database-issues-missing-incorrect"&gt;Problem #1: Database issues (missing, incorrect, ...)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://coordable.co/blog/how-geocoding-works-a-simple-guide/#example-1-google-maps"&gt;Example 1: Google Maps&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://coordable.co/blog/how-geocoding-works-a-simple-guide/#example-2-here-wrong-example"&gt;Example 2: HERE wrong example&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://coordable.co/blog/how-geocoding-works-a-simple-guide/#problem-2-parsing-failures-when-the-system-cant-make-sense-of-the-input"&gt;Problem #2: Parsing failures when the system can't make sense of the input&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://coordable.co/blog/how-geocoding-works-a-simple-guide/#example-1-basic-encoding-issue"&gt;Example 1: basic encoding issue&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://coordable.co/blog/how-geocoding-works-a-simple-guide/#example-2-noise-issue"&gt;Example 2: noise issue&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://coordable.co/blog/how-geocoding-works-a-simple-guide/#example-3-typos"&gt;Example 3: typos&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="https://coordable.co/blog/how-geocoding-works-a-simple-guide/#best-practices-how-to-get-reliable-geocoding-results"&gt;Best practices: how to get reliable geocoding results&lt;/a&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href="https://coordable.co/blog/how-geocoding-works-a-simple-guide/#1-pick-the-right-geocoding-provider"&gt;1. Pick the right geocoding provider&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://coordable.co/blog/how-geocoding-works-a-simple-guide/#2-always-add-context-country-region-postal-code"&gt;2. Always add context (country, region, postal code)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://coordable.co/blog/how-geocoding-works-a-simple-guide/#3-clean-your-addresses-before-you-geocode"&gt;3. Clean your addresses before you geocode&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://coordable.co/blog/how-geocoding-works-a-simple-guide/#4-help-the-parser-if-possible"&gt;4. Help the parser if possible&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://coordable.co/blog/how-geocoding-works-a-simple-guide/#5-understand-what-you-are-geocoding"&gt;5. Understand what you are geocoding&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://coordable.co/blog/how-geocoding-works-a-simple-guide/#6-dont-trust-results-blindly"&gt;6. Don't trust results blindly&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="https://coordable.co/blog/how-geocoding-works-a-simple-guide/#conclusion"&gt;Conclusion&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;hr&gt;
&lt;h3 id="the-two-ways-of-geocoding"&gt;The two ways of geocoding&lt;/h3&gt;
&lt;p&gt;Geocoding actually works in two directions, and each serves a different purpose.&lt;/p&gt;
&lt;h4 id="forward-geocoding-turning-addresses-into-coordinates"&gt;Forward geocoding: turning addresses into coordinates&lt;/h4&gt;
&lt;p&gt;Forward geocoding takes a text address (like &lt;code&gt;57 Rue de Varenne, Paris, France&lt;/code&gt;) or place name (like &lt;code&gt;Tour Eiffel&lt;/code&gt;) and returns a pair of coordinates (latitude and longitude).&lt;/p&gt;
&lt;p&gt;This is the exact process that happens when you search for a location in Google Maps or Apple Maps on your phone:&lt;/p&gt;
&lt;figure&gt;
  &lt;img src="https://coordable.co/images/geocoding-guide/geocoding-example-gmaps.png" alt="Google Maps search on the phone: 57 Rue de Varenne, Paris, France" width="600"&gt;
  &lt;figcaption&gt;In Google Maps, typing "57 Rue de Varenne, Paris, France" and getting the coordinates is a forward geocoding process.&lt;/figcaption&gt;
&lt;/figure&gt;

&lt;p&gt;Forward geocoding is an essential tool for a wide variety of operations. I don't want to sound too boring already by listing all the examples, but here are just a few.&lt;/p&gt;
&lt;p&gt;For consumers:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Finding places&lt;/strong&gt;: Forward geocoding lets you search for locations in navigation apps, just type a name or address to find a coffee shop, pharmacy, or tourist site.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Getting directions&lt;/strong&gt;: All navigations apps use geocoding to get the coordinates of the destination and display it on the map. Then, the best route is computed by the navigation engine.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Package delivery&lt;/strong&gt;: Addresses are sent to the delivery driver to help them find your address and drop off your package.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;For businesses:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Address validation&lt;/strong&gt;: Online stores and delivery services geocode addresses to check and standardize them at checkout.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Route optimization&lt;/strong&gt;: Companies geocode address lists to plan deliveries efficiently and save resources.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Customer analytics&lt;/strong&gt;: Businesses geocode customer addresses to spot trends and improve marketing or logistics.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Store locators&lt;/strong&gt;: Retailers use geocoding so customers can easily find the nearest shop from their address.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;And this list is not exhaustive. Yes, geocoding is everywhere! 😀&lt;/p&gt;
&lt;h4 id="reverse-geocoding-turning-coordinates-into-addresses"&gt;Reverse geocoding: turning coordinates into addresses&lt;/h4&gt;
&lt;p&gt;Reverse geocoding does the opposite: you start with a GPS point (latitude and longitude) and get back the nearest address or place name.&lt;/p&gt;
&lt;p&gt;That's what happens when you pin a place on the map in Google Maps or Apple Maps:&lt;/p&gt;
&lt;figure&gt;
  &lt;img src="https://coordable.co/images/geocoding-guide/geocoding-example-gmaps-reverse.png" alt="Google Maps reverse geocoding example" width="600"&gt;
  &lt;figcaption&gt;In Google Maps, pinpointing a location and getting a suggestion for the address is a reverse geocoding process. &lt;/figcaption&gt;
&lt;/figure&gt;

&lt;p&gt;Again, here are some real world examples:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;When you drop a pin on a map to show a friend where you are, the app reverse geocodes that point to display &lt;code&gt;57 Rue de Varenne, Paris, France&lt;/code&gt; instead of &lt;code&gt;48.8589, 2.3514&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Photos taken with your smartphone often store GPS coordinates in their metadata. Apps reverse geocode those coordinates to label your photos with &lt;code&gt;Central Park, New York&lt;/code&gt; or &lt;code&gt;Eiffel Tower, Paris&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;A delivery driver scans a package at your door. The handheld device logs the GPS coordinates at that moment, and the system reverse geocodes it to confirm delivery at the correct address.&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Good to know&lt;/strong&gt;: In most cases, when people mention "geocoding", they’re talking about &lt;em&gt;forward geocoding&lt;/em&gt;. If reverse geocoding is meant, it’s usually specified directly.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr&gt;
&lt;h3 id="how-geocoding-works-simplified-version"&gt;How geocoding works (simplified version)&lt;/h3&gt;
&lt;p&gt;Now let's walk through what happens when you provide an address to a geocoding system. Understanding these steps will help you recognize why some addresses work perfectly and others struggle.&lt;/p&gt;
&lt;p&gt;Basically, &lt;strong&gt;geocoding involves matching an input address to the most similar entry in a large address database&lt;/strong&gt;. In other words, it's a process of looking up an address in a database:&lt;/p&gt;
&lt;figure&gt;
  &lt;img src="https://coordable.co/images/geocoding-guide/address-lookup-table.png" alt="Address lookup table illustration"&gt;
  &lt;figcaption&gt;Address lookup: the geocoding system checks your input against a massive database of known addresses and places to find the best match.&lt;/figcaption&gt;
&lt;/figure&gt;

&lt;p&gt;When I type &lt;code&gt;57 ru de varenne Paris&lt;/code&gt; in Google Maps (yes, with the typo), the system will compare this input with Google's database of addresses and POIs (Points of Interest) and will return the closest match.&lt;/p&gt;
&lt;p&gt;This simple address lookup is made of 4 steps:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Address normalization&lt;/li&gt;
&lt;li&gt;Parsing&lt;/li&gt;
&lt;li&gt;Database lookup&lt;/li&gt;
&lt;li&gt;Scoring and ranking&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Let's go through each step in detail. &lt;/p&gt;
&lt;h4 id="step-1-address-normalization"&gt;Step 1: Address normalization&lt;/h4&gt;
&lt;p&gt;Addresses can be entered in many different ways: with typos, all uppercase, extra or missing information (like country or postal code), or with unnecessary details.&lt;/p&gt;
&lt;p&gt;The normalization process aims to standardize addresses so they can be easily compared to those in the database. Here are some typical normalization steps:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Standardization:&lt;/strong&gt; Convert to lowercase, remove extra spaces and symbols, etc. Example: &lt;code&gt;57 ,  AV des  Champs-élysées (paris)&lt;/code&gt; becomes &lt;code&gt;57 avenue des champs elysees Paris&lt;/code&gt;.  &lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Expanding abbreviations:&lt;/strong&gt; &lt;code&gt;57 R de Varenne&lt;/code&gt; may be expanded to &lt;code&gt;57 Rue de Varenne&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Correcting small typos:&lt;/strong&gt; Obvious small errors can be fixed, e.g., &lt;code&gt;57 Reu de Varenne&lt;/code&gt; becomes &lt;code&gt;57 Rue de Varenne&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Removing filler words:&lt;/strong&gt; We can remove words like "de", "la" (in french) or "of", "the", "in", e.g. &lt;code&gt;57 Rue de la Varenne in Paris&lt;/code&gt; could become &lt;code&gt;57 Rue Varenne Paris&lt;/code&gt;. &lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Note&lt;/strong&gt;: The amount and type of normalization and cleaning depends on the geocoding provider. Google Maps will have different rules than HERE, and Mapbox, and so on. This is part of each provider's "secret sauce", and that's why a provider can fail where another succeeds.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h4 id="step-2-parsing-components"&gt;Step 2: Parsing components&lt;/h4&gt;
&lt;p&gt;Once the address is normalized, we can try to parse it, i.e., split it into recognized component parts: house number, street name, unit/apartment number, city, postal code, region/state, and country.&lt;/p&gt;
&lt;figure&gt;
  &lt;img src="https://coordable.co/images/geocoding-guide/address-parsing-example.png" alt="Address parsing: the geocoding system splits the address into recognizable components." width="500"&gt;
  &lt;figcaption&gt;Address parsing: the geocoding system splits the address into recognizable components.&lt;/figcaption&gt;
&lt;/figure&gt;

&lt;p&gt;This is needed in order to specify the search. When I type &lt;code&gt;57 rue de Varenne paris&lt;/code&gt;, should I check all addresses in the World? Probably not! &lt;/p&gt;
&lt;p&gt;Because &lt;code&gt;Paris&lt;/code&gt; strongly suggests that we are in France (or at least, it's highly probable... we could, for example, also be in &lt;a href="https://www.google.com/maps/place/Paris,+Texas,+%C3%89tats-Unis/@33.6795523,-95.6873858,12z/data=!3m1!4b1!4m6!3m5!1s0x864a580616272b9b:0xc9b909662fd3f349!8m2!3d33.6609389!4d-95.555513!16s%2Fm%2F0gfgglz?entry=ttu&amp;amp;g_ep=EgoyMDI1MTAyMi4wIKXMDSoASAFQAw%3D%3D"&gt;Paris, Texas, United States&lt;/a&gt; 😅). &lt;/p&gt;
&lt;p&gt;Parsing works by identifying patterns. For example:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Countries are usually placed at the end of the address (like in &lt;code&gt;57 Rue de Varenne, Paris, France&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;Postal codes are usually codes between 3 to 10 digits (or characters), depending on the country&lt;/li&gt;
&lt;li&gt;Housenumbers are usually the first numbers encountered &lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;But all these rules can be unreliable, and the geocoding system must deal with a lot of inconsistencies. &lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Missing components:&lt;/strong&gt; Sometimes components are missing (I didn't type the country and the postal code for my search)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Abbreviations:&lt;/strong&gt; People write &lt;code&gt;St&lt;/code&gt; (street? saint?), &lt;code&gt;Av&lt;/code&gt; (avenue? aviation?), &lt;code&gt;Dr&lt;/code&gt; (drive? doctor?). The system must use context to decide.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Different country formats:&lt;/strong&gt; In the U.S., postal codes come at the end. In the UK, they're often in the middle. In Japan, the structure is completely different (country, postal code, prefecture, city, district, block, building).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Multiple languages:&lt;/strong&gt; &lt;code&gt;Rue&lt;/code&gt; (French), &lt;code&gt;Calle&lt;/code&gt; (Spanish), &lt;code&gt;Rua&lt;/code&gt; (Portuguese), &lt;code&gt;Ulica&lt;/code&gt; (Polish) — they all mean "street," and the system needs to recognize them.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;As an example, Google Maps still works well if I type &lt;code&gt;75015 Paris - Rue de Varenne 57&lt;/code&gt; even if it does not respect the usual format.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Why parsing is powerful:&lt;/strong&gt; Once the address is parsed, the geocoding engine can use the country or state or city to filter out billions of irrelevant addresses. A postal code narrows it even further often to just a few hundred possibilities. This is how geocoding systems stay fast and accurate even when dealing with enormous datasets.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr&gt;
&lt;h4 id="step-3-database-lookup-finding-the-match"&gt;Step 3: Database lookup - finding the match&lt;/h4&gt;
&lt;p&gt;Now that we have clean, parsed components, it's time to look them up in a reference database. 
This is an example of process:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Take only addresses within the same country or state or city (if available, let's say France for our example)&lt;/li&gt;
&lt;li&gt;Find addresses that match the most of our components: house number, street name, city, postal code.&lt;/li&gt;
&lt;/ol&gt;
&lt;figure&gt;
  &lt;img src="https://coordable.co/images/geocoding-guide/address-lookup-table2.png" alt="Address lookup table illustration for components"&gt;
  &lt;figcaption&gt;Illustration of the address lookup by components.&lt;/figcaption&gt;
&lt;/figure&gt;

&lt;p&gt;In this above example, we find 4 possible matches (that have at least one component in common with our input):&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;57 Rue de Varenne, Riom, France&lt;/li&gt;
&lt;li&gt;57 Rue de Varenne, Paris, France&lt;/li&gt;
&lt;li&gt;58 Rue de Varenne, Paris, France&lt;/li&gt;
&lt;li&gt;57 Av. des Champs-Elysées, Paris, France&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;For the sake of simplicity, we used a strict matching, i.e. we only match if the input is exactly the same as the database. However, in reality, geocoding systems often use distance functions, like the Levenshtein distance, which helps match addresses even when they contain typos or abbreviations (e.g. &lt;code&gt;57 Rue de Varene&lt;/code&gt; with a missing letter &lt;code&gt;n&lt;/code&gt;). &lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Tokenization:&lt;/strong&gt; Some geocoding systems use a process called tokenization, which means splitting an address into smaller pieces (tokens), usually words. Instead of trying to match the entire street name as one string, the system can match individual tokens. For example, &lt;code&gt;champs elysées&lt;/code&gt; might be split into tokens like &lt;code&gt;champs&lt;/code&gt;, &lt;code&gt;elysées&lt;/code&gt;, &lt;code&gt;champs elysées&lt;/code&gt;, and &lt;code&gt;champs-elysées&lt;/code&gt;. This approach increases the chances of finding a match even if the address format varies or contains minor errors. Geocoding engines use different strategies to generate and compare tokens: some rely on phonetic similarity, others use techniques like stemming (reducing words to their base form) or lemmatization. The exact methods may vary between systems.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;You also now understand that the goal is to have the most complete list of addresses possible but also to include street names, administrative boundaries, cities, neighborhoods, POIs, and more.
This is also why some providers can give much different results than others. Commercial providers like Google or Apple have their own private data, whereas some well-known open source initiatives like OpenStreetMap and OpenAddresses.io can give you good coverage of the world.&lt;/p&gt;
&lt;p&gt;Google Maps, for instance, excels with commercial data like restaurant names or shop names. The US Census geocoder will never be able to match a restaurant name with a location; it's simply not in their database.&lt;/p&gt;
&lt;hr&gt;
&lt;h4 id="step-4-scoring-and-ranking-choosing-the-best-match"&gt;Step 4: Scoring and ranking - choosing the best match&lt;/h4&gt;
&lt;p&gt;As we saw, the database lookup often returns &lt;em&gt;multiple&lt;/em&gt; candidates. Maybe there are two &lt;code&gt;57 Rue de Varenne&lt;/code&gt; addresses in neighboring towns. Or the postal code matches perfectly, but the street name is slightly off. How does the system decide which one to return?&lt;/p&gt;
&lt;p&gt;If you look at the example above, it's clear that not all matches are equal. Some are more likely to be the correct one than others. If our input is &lt;code&gt;57 Rue de Varenne, Paris, France&lt;/code&gt;, we have: &lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;57 Rue de Varenne, Riom, France&lt;/code&gt;: same housenumber &amp;amp; street name but different city&lt;/li&gt;
&lt;li&gt;&lt;code&gt;57 Rue de Varenne, Paris, France&lt;/code&gt;: same housenumber &amp;amp; street name &amp;amp; city&lt;/li&gt;
&lt;li&gt;&lt;code&gt;58 Rue de Varenne, Paris, France&lt;/code&gt;: same street name &amp;amp; city&lt;/li&gt;
&lt;li&gt;&lt;code&gt;57 Av. des Champs-Elysées, Paris, France&lt;/code&gt;: same housenumber &amp;amp; city&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;It becomes obvious that some components are more important than others, i.e. matching the right city is probably more important than matching the right housenumber. 
For our example, let's attribute a score with ponderationnal weighting:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;1 point for the housenumber&lt;/li&gt;
&lt;li&gt;2 points for the street name&lt;/li&gt;
&lt;li&gt;3 points for the city&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The result would be:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;57 Rue de Varenne, Riom, France&lt;/code&gt;: 1 + 2 = 3 points&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;57 Rue de Varenne, Paris, France&lt;/code&gt;: 1 + 2 + 3 = 6 points 🏆&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;58 Rue de Varenne, Paris, France&lt;/code&gt;: 2 + 3 = 5 points&lt;/li&gt;
&lt;li&gt;&lt;code&gt;57 Av. des Champs-Elysées, Paris, France&lt;/code&gt;: 1 + 3 = 4 points&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The database lookup with &lt;code&gt;57 Rue de Varenne, Paris, France&lt;/code&gt; has 6 points, being the highest score, so that's the one that will be returned ! 🎉&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Good to know&lt;/strong&gt;: It's a way for geocoding providers to score their results and return confidence scores. Some may use different weighting, some may use different distance functions, etc. But you get the idea. Again, it's a way for some geocoding providers to achieve better performance than others.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Coming up with a good scoring system isn't easy, and there's no single right answer. Is the city name always worth 3 points, or should that change if the name's a bit ambiguous? What about situations where parts of the address are missing or not very reliable? Tweaking the weights for each component can have a big effect on your results, and it often depends on where your data is from and the types of addresses you get. &lt;/p&gt;
&lt;p&gt;In practice, building these ranking rules usually involves a lot of testing, tweaking, and sometimes even a dash of machine learning to get the best possible matches.&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id="what-could-go-wrong-understanding-geocoding-failures"&gt;What could go wrong? Understanding geocoding failures&lt;/h3&gt;
&lt;p&gt;Now that you understand how geocoding works, let's talk about what could go wrong. You will be surprised to see how often geocoding fails, and how often it's not obviously stated by the geocoding provider 😅.&lt;/p&gt;
&lt;h4 id="problem-1-database-issues-missing-incorrect"&gt;Problem #1: Database issues (missing, incorrect, ...)&lt;/h4&gt;
&lt;p&gt;Geocoding systems are only as good as the data they use. If the underlying database has missing information or is out of date, even perfect input won't produce accurate results.&lt;/p&gt;
&lt;p&gt;Missing data:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Rural areas:&lt;/strong&gt; A farmhouse on a county road might not have a specific street address in the database. The geocoder might place it at the road centerline or at the entrance to the property close, but not exact.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;New construction:&lt;/strong&gt; A brand-new apartment building might not yet appear in the address database. It could take weeks or months for mapping providers to update their data after construction is complete.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Private roads and gated communities:&lt;/strong&gt; These are often excluded from public datasets. If you're trying to geocode an address inside a private community, the system might only get you to the main entrance.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Ambiguous data:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Street renaming:&lt;/strong&gt; A city renames &lt;code&gt;Washington Avenue&lt;/code&gt; to &lt;code&gt;Martin Luther King Jr. Boulevard&lt;/code&gt;. For months, the old name still appears in the database, and geocoding requests using the new name fail or return low-confidence results.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Multiple languages:&lt;/strong&gt; Some addresses must exist in multiple languages, e.g. &lt;code&gt;9 Rue des pensées, 1030 Schaerbeek&lt;/code&gt; should as well exist as &lt;code&gt;Penseestraat 9, 1030 Schaarbeek&lt;/code&gt; (street name and even city name are different). They both represent the exact same address, but with different languages (French and Dutch).&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;How to deal with this issue?&lt;/strong&gt; You must not just trust the geocoding provider's result. You must always check the result and if it's not correct, you must try to correct it manually. &lt;a href="https://coordable.co"&gt;Coordable&lt;/a&gt; automatically detects these issues for you.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h4 id="example-1-google-maps"&gt;Example 1: Google Maps&lt;/h4&gt;
&lt;p&gt;At the time of writing (2025, October), Google Maps does not have the address &lt;code&gt;12 rue sur le rang, Bourogne&lt;/code&gt; in France. Instead, it would insist in returning the address &lt;code&gt;12 Rue Vivaldi, 90140 Bourogne, France&lt;/code&gt;. &lt;/p&gt;
&lt;figure&gt;
  &lt;img src="https://coordable.co/images/geocoding-guide/google-maps-wrong.png" alt="Google Maps wrong example"&gt;
  &lt;figcaption&gt;Google Maps wrong example: the address &lt;code&gt;12 rue sur le rang, Bourogne&lt;/code&gt; is not located correctly. &lt;br&gt;Mapbox is correct because it probably uses the open source French database for this example. &lt;/figcaption&gt;
&lt;/figure&gt;

&lt;p&gt;This example is not &lt;em&gt;that bad&lt;/em&gt; in the sense that the result is pretty close to the correct location. However, that's still a &lt;em&gt;false positive&lt;/em&gt;: a result that is returned and is confident about it, but it's not the correct one.&lt;/p&gt;
&lt;h4 id="example-2-here-wrong-example"&gt;Example 2: HERE wrong example&lt;/h4&gt;
&lt;p&gt;To be fair, all geocoding providers have their flaws. Here is another example with HERE, where Google actually works better.&lt;/p&gt;
&lt;p&gt;In this example, we geocode the address &lt;code&gt;38 b faubourg de montbéliard, Delle&lt;/code&gt;. It's still unsure if there are two addresses with the same housenumber there (38 and 38B), but HERE returns something completely wrong with a high score (1.0).&lt;/p&gt;
&lt;figure&gt;
  &lt;img src="https://coordable.co/images/geocoding-guide/here-wrong.png" alt="HERE wrong example"&gt;
  &lt;figcaption&gt;HERE wrong example: the address &lt;code&gt;38 b faubourg de montbéliard, Delle&lt;/code&gt; is not located correctly. &lt;br&gt;Google Maps is correct in this case. &lt;/figcaption&gt;
&lt;/figure&gt;

&lt;p&gt;The problem here seems a lack of update in the open source French database. As HERE uses it, it also inherits its errors.&lt;/p&gt;
&lt;hr&gt;
&lt;h4 id="problem-2-parsing-failures-when-the-system-cant-make-sense-of-the-input"&gt;Problem #2: Parsing failures when the system can't make sense of the input&lt;/h4&gt;
&lt;p&gt;Most of the time, addresses are messy. They contain extra noise, typos, mixed languages, and other formatting issues.&lt;/p&gt;
&lt;p&gt;But sometimes, the parser can't understand the input at all:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;CALL JOHN AT 555-239-4829 120 MAIN STREET APT 5B, BROOKLYN, NY, USA&lt;/code&gt;: too many noise, phone number, instructions, etc.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;1234ElmStreetLosAngelesCA90001&lt;/code&gt;: no spaces or wrong order, no city or postal code.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;ru Saint cathrine West, Montreal QC H3B 1B5 Canda&lt;/code&gt;: typo, mixed languages, etc.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;RUE DES F?TES, 75019 PARIS&lt;/code&gt;: encoding issue, special character (should be &lt;code&gt;Rue des Fêtes&lt;/code&gt;)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Try these examples with your favorite maps application. You would be surprised to see how often they fail.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Parsing errors are a real problem:&lt;/strong&gt; businesses processing thousands of global addresses using poorly designed parsers often see failed deliveries or mismatched addresses, all due to small parsing errors that could have been avoided with better cleaning and normalization.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;How to deal with this issue?&lt;/strong&gt; Cleaning the input is a good way to improve the results. E.g. if you know that your addresses have encoding issues, fix it before sending it to the geocoding provider. &lt;a href="https://coordable.co"&gt;Coordable&lt;/a&gt; has automated AI cleaning that deals with all the above issues and more.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h4 id="example-1-basic-encoding-issue"&gt;Example 1: basic encoding issue&lt;/h4&gt;
&lt;p&gt;In this example, the address &lt;code&gt;RUE DES F?TES, 75019 PARIS&lt;/code&gt; cannot be geocoded correctly in both Mapbox and Nominatim (the OpenStreetMap geocoder).&lt;/p&gt;
&lt;figure&gt;
  &lt;img src="https://coordable.co/images/geocoding-guide/encoding-issue-1.png" alt="Encoding issue example 1"&gt;
  &lt;figcaption&gt;Illustration of an encoding issue: the address &lt;code&gt;RUE DES F?TES, 75019 PARIS&lt;/code&gt; is not properly geocoded.&lt;/figcaption&gt;
&lt;/figure&gt;

&lt;p&gt;In both cases, they will return the correct location if &lt;code&gt;f?tes&lt;/code&gt; is replaced by &lt;code&gt;fêtes&lt;/code&gt;.&lt;/p&gt;
&lt;h4 id="example-2-noise-issue"&gt;Example 2: noise issue&lt;/h4&gt;
&lt;p&gt;In this example, we consecutively try &lt;code&gt;CALL JOHN AT 555-239-4829 120 MAIN STREET APT 5B, BROOKLYN, NY, USA&lt;/code&gt; and &lt;code&gt;MAIN STREET APT 5B, BROOKLYN, NY, USA&lt;/code&gt; in Google Maps.&lt;/p&gt;
&lt;figure&gt;
  &lt;img src="https://coordable.co/images/geocoding-guide/noise-issue-1.png" alt="Encoding issue example 2"&gt;
  &lt;figcaption&gt;Example of noise: extra phone numbers and instructions prevent the geocoder from finding the correct address.&lt;/figcaption&gt;
&lt;/figure&gt;

&lt;p&gt;The result is that noise is not being filtered by Google Maps (which has, to be honest, one of the best parsers out there). Is it Google Maps fault? No, probably not. At this point, we should have cleaned the input ourselves.&lt;/p&gt;
&lt;p&gt;You may think it's a silly example, but it's not 🫠. It happens a lot to see mixed fields because of human errors. &lt;/p&gt;
&lt;h4 id="example-3-typos"&gt;Example 3: typos&lt;/h4&gt;
&lt;p&gt;In this example, we try to geocode the address &lt;code&gt;ru Saint cathrine West, Montreal QC H3B 1B5 Canda&lt;/code&gt; in HERE and Mapbox. It's a mix of French and English with many typos. A correct address could be &lt;code&gt;Rue Sainte-Catherine Ouest, Montreal QC H3B 1B5 Canada&lt;/code&gt; or &lt;code&gt;St-Catherine West, Montreal QC H3B 1B5 Canada&lt;/code&gt;.&lt;/p&gt;
&lt;figure&gt;
  &lt;img src="https://coordable.co/images/geocoding-guide/typo-issue-1.png" alt="Typo issue example 1"&gt;
  &lt;figcaption&gt;Example of typos and mixed languages that can cause geocoding failures.&lt;/figcaption&gt;
&lt;/figure&gt;

&lt;p&gt;HERE returns the correct address, but Mapbox can't find it and returns &lt;code&gt;Montreal, QC, Canada&lt;/code&gt;.
It's interesting to play around with the suggestions in the HERE dropdown. It shows that both English and French versions are available, and it's not affected by the typo &lt;code&gt;ru&lt;/code&gt; instead of &lt;code&gt;Rue&lt;/code&gt;.&lt;/p&gt;
&lt;hr&gt;
&lt;!--
### Problem #3: False positives when the system finds the wrong match

Sometimes the geocoder returns a result with high confidence, but it's the *wrong* result. This happens when the input is ambiguous or when multiple legitimate matches exist.

**Ambiguous place names:**

Many cities, streets, and landmarks share the same name. Without enough context, the system has to guess and it might guess wrong.

- **Example: Springfield**   There are dozens of cities named Springfield in the United States alone (Illinois, Massachusetts, Missouri, Oregon, and more). If you search "Springfield" without specifying the state, the geocoder might return the largest or most famous one (Springfield, Illinois), even if you meant a different one.
- **Example: Main Street**   Almost every town has a Main Street. Without a city or postal code, "123 Main Street" could match thousands of addresses.

**Real example:** A retail chain geocodes "Store #47, Springfield" for a sales report. The system returns Springfield, Illinois, but the store is actually in Springfield, Oregon. The error goes unnoticed until the regional manager flies to the wrong state for a site visit.

**Language and transliteration differences:**

Many cities and streets have multiple names or spellings depending on the language.

- **Roma vs Rome:** The Italian name for the capital is "Roma," but many English speakers call it "Rome." Geocoders need to recognize both.
- **Köln vs Cologne:** The German city is "Köln" in German but "Cologne" in English and French.
- **Transliteration:** Cities in non-Latin alphabets (Russian, Arabic, Chinese) can be spelled many ways in Latin characters. "Beijing" vs "Peking," "Mumbai" vs "Bombay," "Kiev" vs "Kyiv."

**Real example:** A travel app geocodes "Roma" and places the user in Rome, Italy. But the user actually meant Roma, Texas a small town in the southern United States. The app confidently shows Italian restaurants nearby, leaving the user very confused.

![Ambiguous results list](assets/article/ambiguous-results.png)
&gt; Illustration: A search results list showing five different cities named "Springfield" in different U.S. states, each with a confidence score.

---

--&gt;

&lt;h3 id="best-practices-how-to-get-reliable-geocoding-results"&gt;Best practices: how to get reliable geocoding results&lt;/h3&gt;
&lt;p&gt;Now that you understand how geocoding works and what can go wrong, let's talk about how to improve your results 😎.  Whether you're a consumer troubleshooting a single address or a business processing thousands, these practices will help.&lt;/p&gt;
&lt;h4 id="1-pick-the-right-geocoding-provider"&gt;1. Pick the right geocoding provider&lt;/h4&gt;
&lt;p&gt;You can get better results by picking the right geocoding provider.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Why:&lt;/strong&gt; All providers rely on different data, different parsing rules, different scoring systems, etc. This makes many ways to differentiate them.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;How:&lt;/strong&gt; You should try different geocoding providers and see which one works best for you. You can also try to use the geocoding provider's API to get the best results. &lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Good to know:&lt;/strong&gt; on Coordable, you can select the geocoding provider from a dropdown in the address input field. &lt;/p&gt;
&lt;/blockquote&gt;
&lt;h4 id="2-always-add-context-country-region-postal-code"&gt;2. Always add &lt;em&gt;context&lt;/em&gt; (country, region, postal code)&lt;/h4&gt;
&lt;p&gt;Geocoding accuracy improves dramatically when you provide strong context: country, state/region, and especially postal code.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Why:&lt;/strong&gt; Cities, streets, and even building names can be duplicated across the world (or even within a single country). "Paris" could mean Paris, France or Paris, Texas. "There are thousands of streets named Main Street in the United States alone." &lt;/p&gt;
&lt;p&gt;&lt;strong&gt;How:&lt;/strong&gt; At least, always concatenate the country to the address. It's a quick win. And if possible, a postal code is a strong hint of the correct location.&lt;/p&gt;
&lt;!-- &gt; **Example:** On Coordable, you can select country/region from a dropdown and enter postal code to maximize geocoding accuracy. --&gt;

&lt;h4 id="3-clean-your-addresses-before-you-geocode"&gt;3. Clean your addresses before you geocode&lt;/h4&gt;
&lt;p&gt;Messy, incomplete, or inconsistent addresses are the #1 cause of poor geocoding results. Cleaning (a.k.a. "address normalization") means fixing typos, filling in missing parts, converting to a canonical format, and removing extraneous noise.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Why:&lt;/strong&gt; Geocoding engines often struggle with extra info ("Attn: John", "call before delivery", phone numbers), bad capitalization, spelling/formatting variations, or misplaced address parts. Clean inputs = far fewer errors.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;How:&lt;/strong&gt; You can implement some of the rules we presented earlier in this article: normalization, replacement of abbreviations, encoding issues, etc.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Tools:&lt;/strong&gt; Basic cleaning can be handled with spreadsheet formulas, or specialized software/APIs like &lt;a href="https://coordable.co/"&gt;Coordable&lt;/a&gt;, &lt;a href="https://github.com/openvenues/libpostal"&gt;libpostal&lt;/a&gt;, or your geocoding provider's normalization endpoint.&lt;/p&gt;
&lt;h4 id="4-help-the-parser-if-possible"&gt;4. Help the parser if possible&lt;/h4&gt;
&lt;p&gt;If possible, provide the information of your address components to the geocoding provider. This can help the parser to understand the address better.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Why:&lt;/strong&gt; Parsing is one of the most important steps in geocoding. If it's failing, you will get poor results.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;How:&lt;/strong&gt; Some geocoding providers can accept a structured address input like a JSON object with the address components: &lt;code&gt;{house_number: "57", street: "Rue de Varenne", city: "Paris", state: "Île-de-France", country: "France", postal_code: "75015"}&lt;/code&gt;.&lt;/p&gt;
&lt;h4 id="5-understand-what-you-are-geocoding"&gt;5. Understand what you are geocoding&lt;/h4&gt;
&lt;p&gt;Are you sending residential addresses or POIs? Do you have mostly street names alone or do you have house numbers?&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Why:&lt;/strong&gt; Understanding what you are sending can help you to understand the quality of your results. It's obvious, but if only 50% of your addresses are residential addresses, you should expect less than 50% of results with housenumbers.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;How:&lt;/strong&gt; You can implement your own rules to classify addresses. For instance, you could write a &lt;a href="https://en.wikipedia.org/wiki/Regular_expression"&gt;regex rule&lt;/a&gt; to parse postal codes and housenumbers. &lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Good to know:&lt;/strong&gt; when uploading a dataset or starting a geocoding job on Coordable, we automatically classify the addresses for you.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h4 id="6-dont-trust-results-blindly"&gt;6. Don't trust results blindly&lt;/h4&gt;
&lt;p&gt;Geocoding systems return results even when they're not confident. If you blindly accept the first result, you might get the wrong location. Even the confidence score is not a guarantee of the correctness of the result.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Why:&lt;/strong&gt; The confidence score is not a guarantee of the correctness of the result. It's a score given by the geocoding provider to indicate the confidence in the result. It's not a guarantee of the correctness of the result.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;How to avoid it:&lt;/strong&gt; Implement your own rules to measure accuracy and correctness of the result, based on the information the provider gives you, as well as your own manual verification. &lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Good to know:&lt;/strong&gt; the Coordable platform embeds a powerful verification engine that can help you quickly identify false positives and incorrect results.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr&gt;
&lt;h3 id="conclusion"&gt;Conclusion&lt;/h3&gt;
&lt;p&gt;I hope you enjoyed this guide. I tried to explain how geocoding works in a simple way, with examples and practical tips to improve your results.&lt;/p&gt;
&lt;p&gt;A lot of technical details are omitted, such as &lt;em&gt;tokenization&lt;/em&gt;, &lt;em&gt;distance functions&lt;/em&gt;, or &lt;em&gt;scoring rules&lt;/em&gt;. I will probably write a follow-up article to cover these topics. But at least it presents the &lt;strong&gt;big picture of a geocoding process&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;If you are a business and want to improve your geocoding results, please contact us at &lt;a href="mailto:contact@coordable.co"&gt;contact@coordable.co&lt;/a&gt;. &lt;/p&gt;
&lt;p&gt;After that, if you want to learn more, here are some resources that I found interesting:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.youtube.com/watch?v=qKvO5yeXsFE&amp;amp;t=773s"&gt;Why Geocoding is Hard and How You and OSM Can Help&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://opencagedata.com/guides/how-to-think-about-geocoding-accuracy"&gt;How to think about geocoding accuracy&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.justinobeirne.com/google-maps-moat"&gt;Google Maps Moat - How far ahead of Apple Maps is Google Maps?&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Happy geocoding! ⭐&lt;/p&gt;</description><category>business</category><category>geocoding</category><category>guides</category><guid>https://coordable.co/blog/how-geocoding-works-a-simple-guide/</guid><pubDate>Wed, 22 Oct 2025 10:00:00 GMT</pubDate></item></channel></rss>