<?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</title><link>https://coordable.co/</link><description>Coordable.co is the all-in-one geocoding platform: AI-powered address cleaning, fast global geocoding, and integrated analytics. Use via API or Excel.</description><atom:link href="https://coordable.co/fr/rss.xml" rel="self" type="application/rss+xml"></atom:link><language>fr</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:41 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/fr/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/fr/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/fr/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/fr/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/fr/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/fr/blog/free-tool-benchmark-geocoding-providers/#conclusion"&gt;Conclusion&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://coordable.co/fr/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><guid>https://coordable.co/fr/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/fr/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/fr/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/fr/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/fr/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/fr/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/fr/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/fr/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/fr/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/fr/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/fr/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><guid>https://coordable.co/fr/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/fr/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/fr/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/fr/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/fr/blog/geocoding-routing-impact-france-2026/#results"&gt;Results&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://coordable.co/fr/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/fr/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/fr/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/fr/blog/geocoding-routing-impact-france-2026/#limitations"&gt;Limitations&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://coordable.co/fr/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/fr/blog/geocoding-routing-impact-france-2026/#methodology"&gt;Methodology&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://coordable.co/fr/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><guid>https://coordable.co/fr/blog/geocoding-routing-impact-france-2026/</guid><pubDate>Tue, 14 Apr 2026 14:00:00 GMT</pubDate></item><item><title>Fuel is cheaper in the US, yet failed deliveries cost more</title><link>https://coordable.co/fr/blog/cost-failed-delivery-eu-vs-us-2026/</link><dc:creator>Julien Crétin</dc:creator><description>&lt;p&gt;Over the past three posts, we built a bottom-up cost model for failed last-mile deliveries: &lt;a href="https://coordable.co/blog/cost-failed-delivery-urban-europe-2026/"&gt;urban (€15.30)&lt;/a&gt;, &lt;a href="https://coordable.co/blog/cost-failed-delivery-peri-urban-europe-2026/"&gt;peri-urban (€22.26)&lt;/a&gt;, &lt;a href="https://coordable.co/blog/cost-failed-delivery-rural-europe-2026/"&gt;rural (€42.14)&lt;/a&gt;. All three used European benchmarks - specifically French labor costs and fuel prices.&lt;/p&gt;
&lt;p&gt;A natural question follows: how does this model hold up in the US?&lt;/p&gt;
&lt;p&gt;The answer is worse than expected. Despite cheaper diesel, US failed deliveries cost &lt;strong&gt;67–70% more&lt;/strong&gt; than their European equivalents across all three contexts. The reason is labor - and the gap is remarkably consistent.&lt;/p&gt;
&lt;p&gt;This post runs the same four-component model with US inputs, compares the results side by side, and explains what drives the gap.&lt;/p&gt;
&lt;div class="toc"&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://coordable.co/fr/blog/cost-failed-delivery-eu-vs-us-2026/#why-us-costs-are-higher-despite-cheaper-fuel"&gt;Why US costs are higher despite cheaper fuel&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://coordable.co/fr/blog/cost-failed-delivery-eu-vs-us-2026/#us-model-assumptions"&gt;US model assumptions&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://coordable.co/fr/blog/cost-failed-delivery-eu-vs-us-2026/#urban-context"&gt;Urban context&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://coordable.co/fr/blog/cost-failed-delivery-eu-vs-us-2026/#peri-urban-context"&gt;Peri-urban context&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://coordable.co/fr/blog/cost-failed-delivery-eu-vs-us-2026/#rural-context"&gt;Rural context&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://coordable.co/fr/blog/cost-failed-delivery-eu-vs-us-2026/#the-full-comparison"&gt;The full comparison&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://coordable.co/fr/blog/cost-failed-delivery-eu-vs-us-2026/#what-this-means-for-geocoding-investment"&gt;What this means for geocoding investment&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://coordable.co/fr/blog/cost-failed-delivery-eu-vs-us-2026/#a-note-on-model-limitations-for-the-us"&gt;A note on model limitations for the US&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://coordable.co/fr/blog/cost-failed-delivery-eu-vs-us-2026/#want-to-run-the-numbers-on-your-operation"&gt;Want to run the numbers on your operation?&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://coordable.co/fr/blog/cost-failed-delivery-eu-vs-us-2026/#sources-and-assumptions"&gt;Sources and assumptions&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;hr&gt;
&lt;h3 id="why-us-costs-are-higher-despite-cheaper-fuel"&gt;Why US costs are higher despite cheaper fuel&lt;/h3&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Labor is the driver.&lt;/strong&gt; The fully loaded cost of a US delivery driver is ~$30/h vs ~€17/h in France - a 76% gap that cascades through every time-based component of the model.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;strong&gt;Diesel is significantly cheaper in the US - but not enough to offset labor.&lt;/strong&gt; The average US retail diesel price in 2025 was ~$3.68/gallon ($0.97/L), giving a fuel cost of approximately &lt;strong&gt;$0.11/km&lt;/strong&gt;. The French average was €1.62/L, giving &lt;strong&gt;€0.18/km&lt;/strong&gt;. The US fuel advantage (~39% cheaper per km) is real, but modest relative to the labor gap.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;The reason for the price difference is structural: US federal and state fuel taxes represent ~15–20% of the pump price, vs ~60–65% in France (TICPE + TVA). Same crude oil, very different fiscal treatment.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;strong&gt;PUDO networks are structurally limited in the US.&lt;/strong&gt; Europe has over 500,000 out-of-home delivery points, with dense carrier-agnostic networks (Pickup, Mondial Relay, InPost, DHL Packstations). In the US, out-of-home options exist - Amazon Locker, UPS Access Point, FedEx OnSite - but they are carrier-specific, less dense, and not structured around a merchant commission model. For most US operators, redelivery remains the dominant failure resolution path.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;We include a PUDO column for the US model for completeness and comparability, but note that it applies only to operators with access to a compatible carrier locker network - which is far from universal.&lt;/em&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id="us-model-assumptions"&gt;US model assumptions&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Parameter&lt;/th&gt;
&lt;th&gt;EU (France)&lt;/th&gt;
&lt;th&gt;US&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Driver hourly wage (fully loaded)&lt;/td&gt;
&lt;td&gt;€17/h&lt;/td&gt;
&lt;td&gt;$30/h&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Fuel cost per km&lt;/td&gt;
&lt;td&gt;€0.18/km&lt;/td&gt;
&lt;td&gt;$0.11/km&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Vehicle depreciation per km&lt;/td&gt;
&lt;td&gt;€0.12/km&lt;/td&gt;
&lt;td&gt;$0.14/km&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Dispatch/support hourly wage&lt;/td&gt;
&lt;td&gt;€15/h&lt;/td&gt;
&lt;td&gt;$26/h&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;em&gt;Vehicle depreciation for US: IRS standard mileage rate 2025, depreciation component for light commercial vehicles, ~$0.14/km. Dispatch/support: estimated at ~$24/h gross × 1.08 employer FICA ≈ $26/h.&lt;/em&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id="urban-context"&gt;Urban context&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Component&lt;/th&gt;
&lt;th&gt;EU Redelivery&lt;/th&gt;
&lt;th&gt;US Redelivery&lt;/th&gt;
&lt;th&gt;EU PUDO&lt;/th&gt;
&lt;th&gt;US PUDO&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;1. On-site failure&lt;/td&gt;
&lt;td&gt;€2.70&lt;/td&gt;
&lt;td&gt;$4.77&lt;/td&gt;
&lt;td&gt;€2.70&lt;/td&gt;
&lt;td&gt;$4.77&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;2. Resolution path&lt;/td&gt;
&lt;td&gt;€4.30&lt;/td&gt;
&lt;td&gt;$6.26&lt;/td&gt;
&lt;td&gt;€2.83&lt;/td&gt;
&lt;td&gt;$4.07&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;3. Route disruption&lt;/td&gt;
&lt;td&gt;€5.90&lt;/td&gt;
&lt;td&gt;$10.43&lt;/td&gt;
&lt;td&gt;€2.95&lt;/td&gt;
&lt;td&gt;$5.22&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;4. Customer support&lt;/td&gt;
&lt;td&gt;€2.40&lt;/td&gt;
&lt;td&gt;$4.16&lt;/td&gt;
&lt;td&gt;€0.80&lt;/td&gt;
&lt;td&gt;$1.39&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;€15.30&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;$25.62&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;€9.28&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;$15.45&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;The US urban redelivery cost at $25.62 is 67% higher than the EU equivalent (€15.30).&lt;/strong&gt; The gap is almost entirely driven by the labor differential - the fuel saving over a 3 km urban detour amounts to only $0.21 per failed delivery, which barely registers.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr&gt;
&lt;h3 id="peri-urban-context"&gt;Peri-urban context&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Component&lt;/th&gt;
&lt;th&gt;EU Redelivery&lt;/th&gt;
&lt;th&gt;US Redelivery&lt;/th&gt;
&lt;th&gt;EU PUDO&lt;/th&gt;
&lt;th&gt;US PUDO&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;1. On-site failure&lt;/td&gt;
&lt;td&gt;€2.70&lt;/td&gt;
&lt;td&gt;$4.77&lt;/td&gt;
&lt;td&gt;€2.70&lt;/td&gt;
&lt;td&gt;$4.77&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;2. Resolution path&lt;/td&gt;
&lt;td&gt;€9.23&lt;/td&gt;
&lt;td&gt;$14.37&lt;/td&gt;
&lt;td&gt;€6.45&lt;/td&gt;
&lt;td&gt;$9.97&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;3. Route disruption&lt;/td&gt;
&lt;td&gt;€7.53&lt;/td&gt;
&lt;td&gt;$13.33&lt;/td&gt;
&lt;td&gt;€3.77&lt;/td&gt;
&lt;td&gt;$6.67&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;4. Customer support&lt;/td&gt;
&lt;td&gt;€2.80&lt;/td&gt;
&lt;td&gt;$4.85&lt;/td&gt;
&lt;td&gt;€0.96&lt;/td&gt;
&lt;td&gt;$1.66&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;€22.26&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;$37.32&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;€13.88&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;$23.07&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;The peri-urban gap widens further: &lt;strong&gt;$37.32 vs €22.26, a 68% premium for US operators.&lt;/strong&gt; Longer detours amplify the labor cost gap - more minutes of driving at $30/h rather than €17/h.&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id="rural-context"&gt;Rural context&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Component&lt;/th&gt;
&lt;th&gt;EU Redelivery&lt;/th&gt;
&lt;th&gt;US Redelivery&lt;/th&gt;
&lt;th&gt;EU PUDO*&lt;/th&gt;
&lt;th&gt;US PUDO*&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;1. On-site failure&lt;/td&gt;
&lt;td&gt;€4.04&lt;/td&gt;
&lt;td&gt;$7.14&lt;/td&gt;
&lt;td&gt;€4.04&lt;/td&gt;
&lt;td&gt;$7.14&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;2. Resolution path&lt;/td&gt;
&lt;td&gt;€24.37&lt;/td&gt;
&lt;td&gt;$40.26&lt;/td&gt;
&lt;td&gt;€14.90&lt;/td&gt;
&lt;td&gt;$24.55&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;3. Route disruption&lt;/td&gt;
&lt;td&gt;€10.13&lt;/td&gt;
&lt;td&gt;$17.92&lt;/td&gt;
&lt;td&gt;€5.07&lt;/td&gt;
&lt;td&gt;$8.96&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;4. Customer support&lt;/td&gt;
&lt;td&gt;€3.60&lt;/td&gt;
&lt;td&gt;$6.24&lt;/td&gt;
&lt;td&gt;€1.20&lt;/td&gt;
&lt;td&gt;$2.08&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;€42.14&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;$71.56&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;€25.21&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;$42.73&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;em&gt;*PUDO path in rural US is even more constrained than in rural EU. Apply with significant caution.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Rural is the starkest divergence: &lt;strong&gt;$71.56 vs €42.14, a 70% premium.&lt;/strong&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id="the-full-comparison"&gt;The full comparison&lt;/h3&gt;
&lt;figure style="text-align:center;margin:2em 0;"&gt;
&lt;svg width="580" viewbox="0 0 580 330" role="img" xmlns="http://www.w3.org/2000/svg"&gt;
  &lt;title&gt;Failed delivery redelivery cost — EU vs US by context (€/$)&lt;/title&gt;
  &lt;desc&gt;Grouped bar chart comparing EU and US redelivery costs across urban, peri-urban and rural contexts. US costs are 67-70% higher in all contexts.&lt;/desc&gt;

  &lt;text x="290" y="16" text-anchor="middle" font-family="system-ui,-apple-system,sans-serif" font-size="12" font-weight="600" fill="#2C2C2A"&gt;Redelivery cost per failed delivery — EU vs US (€/$)&lt;/text&gt;

  &lt;!-- Legend --&gt;
  &lt;rect x="140" y="30" width="10" height="10" rx="2" fill="#378ADD"&gt;&lt;/rect&gt;
  &lt;text x="155" y="39" font-family="system-ui,-apple-system,sans-serif" font-size="11" fill="#5F5E5A"&gt;EU&lt;/text&gt;
  &lt;rect x="200" y="30" width="10" height="10" rx="2" fill="#D85A30"&gt;&lt;/rect&gt;
  &lt;text x="215" y="39" font-family="system-ui,-apple-system,sans-serif" font-size="11" fill="#5F5E5A"&gt;US&lt;/text&gt;
  &lt;rect x="260" y="30" width="28" height="10" rx="2" fill="#378ADD" opacity="0.25"&gt;&lt;/rect&gt;
  &lt;text x="294" y="39" font-family="system-ui,-apple-system,sans-serif" font-size="11" fill="#5F5E5A"&gt;+67-70%&lt;/text&gt;

  &lt;!-- Grid lines --&gt;
  &lt;line x1="60" y1="282" x2="540" y2="282" stroke="#B4B2A9" stroke-width="0.5"&gt;&lt;/line&gt;
  &lt;line x1="60" y1="237" x2="540" y2="237" stroke="#D3D1C7" stroke-width="0.5" stroke-dasharray="3 3"&gt;&lt;/line&gt;
  &lt;line x1="60" y1="192" x2="540" y2="192" stroke="#D3D1C7" stroke-width="0.5" stroke-dasharray="3 3"&gt;&lt;/line&gt;
  &lt;line x1="60" y1="147" x2="540" y2="147" stroke="#D3D1C7" stroke-width="0.5" stroke-dasharray="3 3"&gt;&lt;/line&gt;
  &lt;line x1="60" y1="102" x2="540" y2="102" stroke="#D3D1C7" stroke-width="0.5" stroke-dasharray="3 3"&gt;&lt;/line&gt;

  &lt;text x="54" y="286" text-anchor="end" font-family="system-ui,-apple-system,sans-serif" font-size="11" fill="#888780"&gt;€0&lt;/text&gt;
  &lt;text x="54" y="241" text-anchor="end" font-family="system-ui,-apple-system,sans-serif" font-size="11" fill="#888780"&gt;€20&lt;/text&gt;
  &lt;text x="54" y="196" text-anchor="end" font-family="system-ui,-apple-system,sans-serif" font-size="11" fill="#888780"&gt;€40&lt;/text&gt;
  &lt;text x="54" y="151" text-anchor="end" font-family="system-ui,-apple-system,sans-serif" font-size="11" fill="#888780"&gt;€60&lt;/text&gt;
  &lt;text x="54" y="106" text-anchor="end" font-family="system-ui,-apple-system,sans-serif" font-size="11" fill="#888780"&gt;€80&lt;/text&gt;

  &lt;!-- Urban EU --&gt;
  &lt;rect x="88" y="243.5" width="44" height="38.5" fill="#378ADD"&gt;&lt;/rect&gt;
  &lt;text x="110" y="239" text-anchor="middle" font-family="system-ui,-apple-system,sans-serif" font-size="11" fill="#378ADD"&gt;€15.30&lt;/text&gt;
  &lt;!-- Urban US --&gt;
  &lt;rect x="138" y="217.6" width="44" height="64.4" fill="#D85A30"&gt;&lt;/rect&gt;
  &lt;text x="160" y="213" text-anchor="middle" font-family="system-ui,-apple-system,sans-serif" font-size="11" fill="#D85A30"&gt;$25.62&lt;/text&gt;
  &lt;!-- +67% --&gt;
  &lt;text x="160" y="300" text-anchor="middle" font-family="system-ui,-apple-system,sans-serif" font-size="10" font-weight="600" fill="#888780"&gt;+67%&lt;/text&gt;
  &lt;text x="135" y="310" text-anchor="middle" font-family="system-ui,-apple-system,sans-serif" font-size="11" fill="#5F5E5A"&gt;Urban&lt;/text&gt;

  &lt;!-- Peri-urban EU --&gt;
  &lt;rect x="228" y="226.0" width="44" height="56.0" fill="#378ADD"&gt;&lt;/rect&gt;
  &lt;text x="250" y="221" text-anchor="middle" font-family="system-ui,-apple-system,sans-serif" font-size="11" fill="#378ADD"&gt;€22.26&lt;/text&gt;
  &lt;!-- Peri-urban US --&gt;
  &lt;rect x="278" y="188.1" width="44" height="93.9" fill="#D85A30"&gt;&lt;/rect&gt;
  &lt;text x="300" y="183" text-anchor="middle" font-family="system-ui,-apple-system,sans-serif" font-size="11" fill="#D85A30"&gt;$37.32&lt;/text&gt;
  &lt;!-- +68% --&gt;
  &lt;text x="300" y="300" text-anchor="middle" font-family="system-ui,-apple-system,sans-serif" font-size="10" font-weight="600" fill="#888780"&gt;+68%&lt;/text&gt;
  &lt;text x="275" y="310" text-anchor="middle" font-family="system-ui,-apple-system,sans-serif" font-size="11" fill="#5F5E5A"&gt;Peri-urban&lt;/text&gt;

  &lt;!-- Rural EU --&gt;
  &lt;rect x="368" y="176.0" width="44" height="106.0" fill="#378ADD"&gt;&lt;/rect&gt;
  &lt;text x="390" y="171" text-anchor="middle" font-family="system-ui,-apple-system,sans-serif" font-size="11" fill="#378ADD"&gt;€42.14&lt;/text&gt;
  &lt;!-- Rural US --&gt;
  &lt;rect x="418" y="102.0" width="44" height="180.0" fill="#D85A30"&gt;&lt;/rect&gt;
  &lt;text x="440" y="97" text-anchor="middle" font-family="system-ui,-apple-system,sans-serif" font-size="11" fill="#D85A30"&gt;$71.56&lt;/text&gt;
  &lt;!-- +70% --&gt;
  &lt;text x="440" y="300" text-anchor="middle" font-family="system-ui,-apple-system,sans-serif" font-size="10" font-weight="600" fill="#888780"&gt;+70%&lt;/text&gt;
  &lt;text x="415" y="310" text-anchor="middle" font-family="system-ui,-apple-system,sans-serif" font-size="11" fill="#5F5E5A"&gt;Rural&lt;/text&gt;
&lt;/svg&gt;
&lt;/figure&gt;

&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Context&lt;/th&gt;
&lt;th&gt;EU Redelivery&lt;/th&gt;
&lt;th&gt;US Redelivery&lt;/th&gt;
&lt;th&gt;Delta&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Urban&lt;/td&gt;
&lt;td&gt;€15.30&lt;/td&gt;
&lt;td&gt;$25.62&lt;/td&gt;
&lt;td&gt;+67%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Peri-urban&lt;/td&gt;
&lt;td&gt;€22.26&lt;/td&gt;
&lt;td&gt;$37.32&lt;/td&gt;
&lt;td&gt;+68%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Rural&lt;/td&gt;
&lt;td&gt;€42.14&lt;/td&gt;
&lt;td&gt;$71.56&lt;/td&gt;
&lt;td&gt;+70%&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Context&lt;/th&gt;
&lt;th&gt;EU PUDO&lt;/th&gt;
&lt;th&gt;US PUDO&lt;/th&gt;
&lt;th&gt;Delta&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Urban&lt;/td&gt;
&lt;td&gt;€9.28&lt;/td&gt;
&lt;td&gt;$15.45&lt;/td&gt;
&lt;td&gt;+66%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Peri-urban&lt;/td&gt;
&lt;td&gt;€13.88&lt;/td&gt;
&lt;td&gt;$23.07&lt;/td&gt;
&lt;td&gt;+66%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Rural&lt;/td&gt;
&lt;td&gt;€25.21&lt;/td&gt;
&lt;td&gt;$42.73&lt;/td&gt;
&lt;td&gt;+70%&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;The delta is remarkably consistent across all contexts and scenarios: US failed deliveries cost roughly 67–70% more than their European equivalents.&lt;/strong&gt; The consistency of this gap confirms that the cause is structural - labor cost differential - rather than context-specific.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr&gt;
&lt;h3 id="what-this-means-for-geocoding-investment"&gt;What this means for geocoding investment&lt;/h3&gt;
&lt;p&gt;The geocoding ROI argument is stronger in the US than in Europe - not because the underlying failure rate differs, but because the cost of each failure is higher. The same logic applies to routing: degraded coordinates add driver time on every route, not just on failed deliveries. We quantified this in a &lt;a href="https://coordable.co/blog/geocoding-routing-impact-france-2026/"&gt;separate routing simulation on 10,000 French addresses&lt;/a&gt; - the mechanism and ROI structure translate directly to US operations, with labor costs amplifying the impact further.&lt;/p&gt;
&lt;p&gt;Applying the same 20–25% address-related failure rate assumption:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;US operator running 50,000 deliveries/month at 8% failure rate:&lt;/strong&gt;
- ~4,000 failed deliveries/month
- ~900 attributable to address/geocoding issues
- At $25.62 per urban failure: &lt;strong&gt;~$23,000/month in avoidable cost&lt;/strong&gt;
- Cost of geocoding pipeline: typically &lt;strong&gt;$20–$200&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;The return is not structurally different from the European model - but the absolute dollar amounts are larger, and the business case lands harder in a market where labor costs are a daily operational pressure.&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id="a-note-on-model-limitations-for-the-us"&gt;A note on model limitations for the US&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;Labor cost variance is higher.&lt;/strong&gt; The $30/h fully loaded figure is a national average. In California, New York, or Washington state, driver costs can reach $35–$40/h. In rural Midwest or Southeast markets, they can be closer to $22–$25/h.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;The subcontractor structure differs.&lt;/strong&gt; In the EU, we documented the salaried vs DSP subcontractor distinction explicitly (CCN overtime thresholds, flat-fee margin loss). In the US, the DSP model dominates Amazon's network, while FedEx Ground relies heavily on independent service providers and UPS uses a mix of Teamsters-represented drivers and contractors. The cost absorption mechanisms differ but the underlying economic logic holds regardless of employment structure.&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;&lt;em&gt;This post completes the four-part series on failed delivery costs. For the full picture: &lt;a href="https://coordable.co/blog/cost-failed-delivery-urban-europe-2026/"&gt;urban EU&lt;/a&gt;, &lt;a href="https://coordable.co/blog/cost-failed-delivery-peri-urban-europe-2026/"&gt;peri-urban EU&lt;/a&gt;, &lt;a href="https://coordable.co/blog/cost-failed-delivery-rural-europe-2026/"&gt;rural EU&lt;/a&gt;, and this EU vs US comparison.&lt;/em&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id="want-to-run-the-numbers-on-your-operation"&gt;Want to run the numbers on your operation?&lt;/h3&gt;
&lt;p&gt;Whether you're operating in Europe or the US, the ROI on address quality is substantial. We'd be happy to talk through how geocoding quality affects your specific setup.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Coordable&lt;/strong&gt; builds multi-provider geocoding pipelines that surface address issues before dispatch, not after. &lt;a href="mailto:contact@coordable.co"&gt;Get in touch&lt;/a&gt; if you want to see what this looks like with your own labor costs and route structure.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr&gt;
&lt;h3 id="sources-and-assumptions"&gt;Sources and assumptions&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;US driver hourly wage ($30/h fully loaded)&lt;/strong&gt; - BLS, &lt;em&gt;Occupational Employment and Wage Statistics: Light Truck Drivers&lt;/em&gt;, May 2024: median $44,140/year (~$21/h gross). BLS, &lt;em&gt;Employer Costs for Employee Compensation&lt;/em&gt;, December 2025: benefits average 29.9% of total compensation for private sector workers. $21/h × 1.43 ≈ $30/h.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;EU driver hourly wage (€17/h fully loaded)&lt;/strong&gt; - CCN Transport routier logistique, May 2025: €11.91–€19.27/h gross. Employer contributions ~30% (Urssaf, 2025). €12.50 × 1.30 ≈ €17/h.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;US fuel cost ($0.11/km)&lt;/strong&gt; - Average US retail diesel 2025: ~$3.68/gallon ($0.97/L). LCV consumption: 11L/100km. $0.97 × 0.11 = $0.11/km.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;EU fuel cost (€0.18/km)&lt;/strong&gt; - Average diesel price France 2025: €1.6186/L (prixdubaril.com / Ministry of Ecological Transition, January 2026). €1.62 × 0.11 = €0.18/km.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;US vehicle depreciation ($0.14/km)&lt;/strong&gt; - IRS standard mileage rate 2025, depreciation/maintenance component for light vehicles, converted from per-mile to per-km.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;EU vehicle depreciation (€0.12/km)&lt;/strong&gt; - French fiscal mileage allowance 2024–2025 (BOFiP, BOI-BAREME-000003).&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;US dispatch/support wage ($26/h)&lt;/strong&gt; - Estimated at ~$24/h gross (BLS Office and Administrative Support, 2024) × 1.08 employer FICA ≈ $26/h.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;US fuel tax differential&lt;/strong&gt; - US federal + state diesel taxes: ~15–20% of pump price (EIA / Tax Foundation). French TICPE + TVA: ~60–65% (Ministry of Ecological Transition).&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;PUDO network comparison&lt;/strong&gt; - &lt;a href="https://nshift.com/blog/eu-parcel-locker-growth-in-2025-what-it-means-for-retailers"&gt;nShift, &lt;em&gt;EU Parcel Locker Growth in 2025&lt;/em&gt;&lt;/a&gt;, 2025 (500,000+ EU OOH points). US carrier-specific networks: Amazon Locker, UPS Access Point, FedEx OnSite - fragmented, carrier-specific.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;First-attempt failure rate (8%)&lt;/strong&gt; - Composite estimate, last-mile industry reports 2021–2025.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Address-related failure rate (20–25%)&lt;/strong&gt; - Composite estimate, industry studies 2021–2024.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Geocoding pipeline cost&lt;/strong&gt; - Estimated using an open-source geocoder (BAN in France, equivalent national APIs elsewhere) as primary, with a premium provider (Google Geocoding API, ~$0.005/address) triggered only on addresses where the primary confidence score falls below threshold - roughly 15-20% of a typical 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;
&lt;/li&gt;
&lt;/ol&gt;</description><guid>https://coordable.co/fr/blog/cost-failed-delivery-eu-vs-us-2026/</guid><pubDate>Tue, 14 Apr 2026 13:00:00 GMT</pubDate></item><item><title>The €17 failed delivery in rural operations: the number no longer holds</title><link>https://coordable.co/fr/blog/cost-failed-delivery-rural-europe-2026/</link><dc:creator>Julien Crétin</dc:creator><description>&lt;p&gt;We have now modeled failed delivery costs for &lt;a href="https://coordable.co/blog/cost-failed-delivery-urban-europe-2026/"&gt;urban (€15.30)&lt;/a&gt; and &lt;a href="https://coordable.co/blog/cost-failed-delivery-peri-urban-europe-2026/"&gt;peri-urban (€22.26)&lt;/a&gt;. Rural is a different category entirely.&lt;/p&gt;
&lt;p&gt;The structural constraints are more severe, the mitigation options largely absent, and the cost profile reflects it: &lt;strong&gt;€42.14 per failed redelivery&lt;/strong&gt; - 175% higher than urban, 89% higher than peri-urban.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;This model covers rural B2C operations - low-density zones, typically &amp;gt;60 km from a major urban center, with dispersed housing, limited road infrastructure in some areas, and thin or absent out-of-home delivery networks.&lt;/em&gt;&lt;/p&gt;
&lt;div class="toc"&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://coordable.co/fr/blog/cost-failed-delivery-rural-europe-2026/#what-makes-rural-structurally-different"&gt;What makes rural structurally different&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://coordable.co/fr/blog/cost-failed-delivery-rural-europe-2026/#the-model"&gt;The model&lt;/a&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href="https://coordable.co/fr/blog/cost-failed-delivery-rural-europe-2026/#component-1-on-site-failure-cost-both-scenarios"&gt;Component 1 — On-site failure cost (both scenarios)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://coordable.co/fr/blog/cost-failed-delivery-rural-europe-2026/#component-2a-redelivery-to-home-address"&gt;Component 2A — Redelivery to home address&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://coordable.co/fr/blog/cost-failed-delivery-rural-europe-2026/#component-2b-redirect-to-pickup-point-pudolocker"&gt;Component 2B — Redirect to pickup point (PUDO/locker)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://coordable.co/fr/blog/cost-failed-delivery-rural-europe-2026/#component-3-route-disruption"&gt;Component 3 — Route disruption&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://coordable.co/fr/blog/cost-failed-delivery-rural-europe-2026/#component-4-customer-support-contact"&gt;Component 4 — Customer support contact&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="https://coordable.co/fr/blog/cost-failed-delivery-rural-europe-2026/#the-full-picture"&gt;The full picture&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://coordable.co/fr/blog/cost-failed-delivery-rural-europe-2026/#the-three-context-summary"&gt;The three-context summary&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://coordable.co/fr/blog/cost-failed-delivery-rural-europe-2026/#what-this-means-for-geocoding-quality"&gt;What this means for geocoding quality&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://coordable.co/fr/blog/cost-failed-delivery-rural-europe-2026/#a-note-on-what-this-model-does-not-include"&gt;A note on what this model does not include&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://coordable.co/fr/blog/cost-failed-delivery-rural-europe-2026/#want-to-run-the-numbers-on-your-operation"&gt;Want to run the numbers on your operation?&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://coordable.co/fr/blog/cost-failed-delivery-rural-europe-2026/#sources-and-assumptions"&gt;Sources and assumptions&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;hr&gt;
&lt;h3 id="what-makes-rural-structurally-different"&gt;What makes rural structurally different&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;Stop density collapses.&lt;/strong&gt; Rural routes average 8–15 stops per day vs 25–40 in urban. Each stop - including each failed stop - carries a much higher share of the day's fixed driver cost.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Inter-stop distances are large.&lt;/strong&gt; Where an urban detour is 3 km and a peri-urban detour is 10 km, a rural detour to reinsert a failed stop can easily be 20–35 km. There is no shortcut.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;PUDO networks are effectively absent.&lt;/strong&gt; The European OOH delivery infrastructure is urban-centric. In many rural zones, the nearest PUDO point is further away than the original delivery address - making redirection economically irrational or simply impossible.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Address data quality is lowest here.&lt;/strong&gt; Rural addressing systems are inconsistent across countries. Hamlets, isolated farms, lieu-dits, and rural routes with non-standard numbering are systematic sources of geocoding failure. New builds in rural areas can take months to appear in any geocoding database. GPS coordinates for rural addresses frequently resolve to road junctions rather than actual building locations.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Dedicated redelivery trips are more likely.&lt;/strong&gt; In rural operations with 8–15 stops per route and large distances between them, reinsertion is often not viable - the failed stop is too far from any other scheduled stop to be absorbed without a near-dedicated trip. This is what makes Component 2 so different in rural operations.&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id="the-model"&gt;The model&lt;/h3&gt;
&lt;h4 id="component-1-on-site-failure-cost-both-scenarios"&gt;Component 1 — On-site failure cost (both scenarios)&lt;/h4&gt;
&lt;p&gt;On-site time is higher in rural than in urban or peri-urban. When a geocode resolves to a road junction or an approximate location, drivers spend additional time locating the actual building - calling the recipient, consulting maps, asking neighbors.&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Item&lt;/th&gt;
&lt;th&gt;Assumption&lt;/th&gt;
&lt;th&gt;Cost&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;On-site time (approach + attempt + departure)&lt;/td&gt;
&lt;td&gt;12 min @ €17/h&lt;/td&gt;
&lt;td&gt;€3.40&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Recipient call attempt (~75% of failures)&lt;/td&gt;
&lt;td&gt;3 min @ €17/h&lt;/td&gt;
&lt;td&gt;€0.64&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Subtotal&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;€4.04&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;em&gt;On-site time is higher than urban and peri-urban (8 min) to reflect address-location difficulty in rural zones. The call rate is higher (75% vs 60%) for the same reason.&lt;/em&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h4 id="component-2a-redelivery-to-home-address"&gt;Component 2A — Redelivery to home address&lt;/h4&gt;
&lt;p&gt;This is where the rural model diverges most sharply from the previous two.&lt;/p&gt;
&lt;p&gt;In a significant share of rural failures, the redelivery cannot be absorbed into an existing route without a near-dedicated trip. We model two sub-scenarios and weight them:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Scenario 2A-i (40% of cases):&lt;/strong&gt; Failed stop is reinserted into a nearby future route with a meaningful but manageable detour (25 km round trip).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Scenario 2A-ii (60% of cases):&lt;/strong&gt; No nearby route exists within a reasonable timeframe. A quasi-dedicated trip is required.&lt;/li&gt;
&lt;/ul&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Item&lt;/th&gt;
&lt;th&gt;Assumption&lt;/th&gt;
&lt;th&gt;Cost&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;2A-i: Reinserted into existing route (40%)&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Driver time&lt;/td&gt;
&lt;td&gt;35 min @ €17/h&lt;/td&gt;
&lt;td&gt;€9.92&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Fuel&lt;/td&gt;
&lt;td&gt;25 km @ €0.18/km&lt;/td&gt;
&lt;td&gt;€4.50&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Vehicle depreciation&lt;/td&gt;
&lt;td&gt;25 km @ €0.12/km&lt;/td&gt;
&lt;td&gt;€3.00&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Weighted subtotal (× 40%)&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;€6.97&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;2A-ii: Near-dedicated redelivery trip (60%)&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Driver time&lt;/td&gt;
&lt;td&gt;60 min @ €17/h&lt;/td&gt;
&lt;td&gt;€17.00&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Fuel&lt;/td&gt;
&lt;td&gt;40 km @ €0.18/km&lt;/td&gt;
&lt;td&gt;€7.20&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Vehicle depreciation&lt;/td&gt;
&lt;td&gt;40 km @ €0.12/km&lt;/td&gt;
&lt;td&gt;€4.80&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Weighted subtotal (× 60%)&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;€17.40&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Combined subtotal&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;€24.37&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;em&gt;The 60/40 split between near-dedicated and reinserted redeliveries is a conservative estimate for genuinely rural operations. This is the assumption we flag most clearly for operators to calibrate against their own data.&lt;/em&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h4 id="component-2b-redirect-to-pickup-point-pudolocker"&gt;Component 2B — Redirect to pickup point (PUDO/locker)&lt;/h4&gt;
&lt;p&gt;In many rural zones, this path is not viable. Where it is available, the economics are poor: the nearest relay point may be 15–25 km away, which partially or fully offsets the consolidation benefit.&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Item&lt;/th&gt;
&lt;th&gt;Assumption&lt;/th&gt;
&lt;th&gt;Cost&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Driver time (detour + PUDO drop)&lt;/td&gt;
&lt;td&gt;30 min @ €17/h&lt;/td&gt;
&lt;td&gt;€8.50&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Fuel&lt;/td&gt;
&lt;td&gt;20 km @ €0.18/km&lt;/td&gt;
&lt;td&gt;€3.60&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Vehicle depreciation&lt;/td&gt;
&lt;td&gt;20 km @ €0.12/km&lt;/td&gt;
&lt;td&gt;€2.40&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Merchant commission&lt;/td&gt;
&lt;td&gt;€0.40&lt;/td&gt;
&lt;td&gt;€0.40&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Subtotal&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;€14.90&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;em&gt;Where no PUDO exists within 20 km, the PUDO path is not a realistic option. For many rural operators, redelivery is the only available resolution.&lt;/em&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h4 id="component-3-route-disruption"&gt;Component 3 — Route disruption&lt;/h4&gt;
&lt;p&gt;In urban and peri-urban operations, a failed stop cascades into the next few stops. In rural, the risk is different: running out of shift time before the route is complete.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;For salaried drivers&lt;/strong&gt;, unplanned time on a failed stop can push the shift past standard hours, triggering overtime costs under the CCN Transport routier (25% premium beyond 39h/week).&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;For subcontracted drivers on a flat daily fee&lt;/strong&gt;, the disruption translates into fewer stops completed for the same fee - a margin loss absorbed by the subcontractor.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;For operators on slot-based markets&lt;/strong&gt;, rural areas with precise delivery commitments face the same SLA penalty risk described in our previous posts - amplified here by the near-impossibility of same-day recovery.&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Item&lt;/th&gt;
&lt;th&gt;Assumption&lt;/th&gt;
&lt;th&gt;Redelivery&lt;/th&gt;
&lt;th&gt;PUDO redirect&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;End-of-day stops missed (25% probability × 1.5 stops × €17/stop avg)&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;€6.38&lt;/td&gt;
&lt;td&gt;€3.19&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Dispatch rescheduling&lt;/td&gt;
&lt;td&gt;15 min @ €15/h&lt;/td&gt;
&lt;td&gt;€3.75&lt;/td&gt;
&lt;td&gt;€1.88&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Subtotal&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;€10.13&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;€5.07&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Route disruption in the rural model represents a different failure mode&lt;/strong&gt; - not a cascade on adjacent stops, but a probability of end-of-day route incompletion. In low-density routes with hard shift-end constraints, this is the more realistic cost driver.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr&gt;
&lt;h4 id="component-4-customer-support-contact"&gt;Component 4 — Customer support contact&lt;/h4&gt;
&lt;p&gt;Rural customers tend to have fewer delivery options and less familiarity with automated rescheduling flows. Combined with the higher incidence of address-related failures, we model a higher human contact rate.&lt;/p&gt;
&lt;p&gt;At 45%, the rural contact rate is 50% higher than urban - reflecting both lower automation adoption and a higher baseline of address-related failures that automated flows cannot resolve.&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Scenario&lt;/th&gt;
&lt;th&gt;Contact rate&lt;/th&gt;
&lt;th&gt;Cost per contact&lt;/th&gt;
&lt;th&gt;Subtotal&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Redelivery&lt;/td&gt;
&lt;td&gt;45%&lt;/td&gt;
&lt;td&gt;€8&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;€3.60&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;PUDO redirect&lt;/td&gt;
&lt;td&gt;15%&lt;/td&gt;
&lt;td&gt;€8&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;€1.20&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;hr&gt;
&lt;h3 id="the-full-picture"&gt;The full picture&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Component&lt;/th&gt;
&lt;th&gt;Redelivery&lt;/th&gt;
&lt;th&gt;PUDO redirect&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;1. On-site failure&lt;/td&gt;
&lt;td&gt;€4.04&lt;/td&gt;
&lt;td&gt;€4.04&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;2. Resolution path&lt;/td&gt;
&lt;td&gt;€24.37&lt;/td&gt;
&lt;td&gt;€14.90&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;3. Route disruption&lt;/td&gt;
&lt;td&gt;€10.13&lt;/td&gt;
&lt;td&gt;€5.07&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;4. Customer support&lt;/td&gt;
&lt;td&gt;€3.60&lt;/td&gt;
&lt;td&gt;€1.20&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;€42.14&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;€25.21&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;figure style="text-align:center;margin:2em 0;"&gt;
&lt;svg width="600" viewbox="0 0 600 330" role="img" xmlns="http://www.w3.org/2000/svg"&gt;
  &lt;title&gt;Cost per failed delivery across three contexts: urban, peri-urban, rural&lt;/title&gt;
  &lt;desc&gt;Stacked bar chart comparing redelivery costs across urban (€15.30), peri-urban (€22.26) and rural (€42.14) scenarios.&lt;/desc&gt;

  &lt;text x="300" y="16" text-anchor="middle" font-family="system-ui,-apple-system,sans-serif" font-size="12" font-weight="600" fill="#2C2C2A"&gt;Redelivery cost per failed delivery — by context (€)&lt;/text&gt;

  &lt;rect x="44" y="32" width="10" height="10" rx="2" fill="#5DCAA5"&gt;&lt;/rect&gt;
  &lt;text x="59" y="41" font-family="system-ui,-apple-system,sans-serif" font-size="11" fill="#5F5E5A"&gt;On-site failure&lt;/text&gt;
  &lt;rect x="165" y="32" width="10" height="10" rx="2" fill="#378ADD"&gt;&lt;/rect&gt;
  &lt;text x="180" y="41" font-family="system-ui,-apple-system,sans-serif" font-size="11" fill="#5F5E5A"&gt;Resolution path&lt;/text&gt;
  &lt;rect x="296" y="32" width="10" height="10" rx="2" fill="#D85A30"&gt;&lt;/rect&gt;
  &lt;text x="311" y="41" font-family="system-ui,-apple-system,sans-serif" font-size="11" fill="#5F5E5A"&gt;Route disruption&lt;/text&gt;
  &lt;rect x="432" y="32" width="10" height="10" rx="2" fill="#888780"&gt;&lt;/rect&gt;
  &lt;text x="447" y="41" font-family="system-ui,-apple-system,sans-serif" font-size="11" fill="#5F5E5A"&gt;Support&lt;/text&gt;

  &lt;line x1="60" y1="282" x2="560" y2="282" stroke="#B4B2A9" stroke-width="0.5"&gt;&lt;/line&gt;
  &lt;line x1="60" y1="239" x2="560" y2="239" stroke="#D3D1C7" stroke-width="0.5" stroke-dasharray="3 3"&gt;&lt;/line&gt;
  &lt;line x1="60" y1="196" x2="560" y2="196" stroke="#D3D1C7" stroke-width="0.5" stroke-dasharray="3 3"&gt;&lt;/line&gt;
  &lt;line x1="60" y1="153" x2="560" y2="153" stroke="#D3D1C7" stroke-width="0.5" stroke-dasharray="3 3"&gt;&lt;/line&gt;
  &lt;line x1="60" y1="102" x2="560" y2="102" stroke="#D3D1C7" stroke-width="0.5" stroke-dasharray="3 3"&gt;&lt;/line&gt;

  &lt;text x="54" y="286" text-anchor="end" font-family="system-ui,-apple-system,sans-serif" font-size="11" fill="#888780"&gt;€0&lt;/text&gt;
  &lt;text x="54" y="243" text-anchor="end" font-family="system-ui,-apple-system,sans-serif" font-size="11" fill="#888780"&gt;€10&lt;/text&gt;
  &lt;text x="54" y="200" text-anchor="end" font-family="system-ui,-apple-system,sans-serif" font-size="11" fill="#888780"&gt;€20&lt;/text&gt;
  &lt;text x="54" y="157" text-anchor="end" font-family="system-ui,-apple-system,sans-serif" font-size="11" fill="#888780"&gt;€30&lt;/text&gt;
  &lt;text x="54" y="106" text-anchor="end" font-family="system-ui,-apple-system,sans-serif" font-size="11" fill="#888780"&gt;€42&lt;/text&gt;

  &lt;!-- Urban: total 65.4px, baseline 282 --&gt;
  &lt;rect x="90" y="271.7" width="90" height="10.3" fill="#888780"&gt;&lt;/rect&gt;
  &lt;rect x="90" y="246.5" width="90" height="25.2" fill="#D85A30"&gt;&lt;/rect&gt;
  &lt;rect x="90" y="228.1" width="90" height="18.4" fill="#378ADD"&gt;&lt;/rect&gt;
  &lt;rect x="90" y="216.6" width="90" height="11.5" fill="#5DCAA5"&gt;&lt;/rect&gt;
  &lt;rect x="90" y="212.6" width="90" height="7" rx="3" fill="#5DCAA5"&gt;&lt;/rect&gt;
  &lt;text x="135" y="204" text-anchor="middle" font-family="system-ui,-apple-system,sans-serif" font-size="13" font-weight="600" fill="#2C2C2A"&gt;€15.30&lt;/text&gt;
  &lt;text x="135" y="300" text-anchor="middle" font-family="system-ui,-apple-system,sans-serif" font-size="12" fill="#5F5E5A"&gt;Urban&lt;/text&gt;

  &lt;!-- Peri-urban: total 95.1px --&gt;
  &lt;rect x="255" y="269.9" width="90" height="12.1" fill="#888780"&gt;&lt;/rect&gt;
  &lt;rect x="255" y="237.7" width="90" height="32.2" fill="#D85A30"&gt;&lt;/rect&gt;
  &lt;rect x="255" y="198.3" width="90" height="39.4" fill="#378ADD"&gt;&lt;/rect&gt;
  &lt;rect x="255" y="186.8" width="90" height="11.5" fill="#5DCAA5"&gt;&lt;/rect&gt;
  &lt;rect x="255" y="182.8" width="90" height="7" rx="3" fill="#5DCAA5"&gt;&lt;/rect&gt;
  &lt;text x="300" y="174" text-anchor="middle" font-family="system-ui,-apple-system,sans-serif" font-size="13" font-weight="600" fill="#2C2C2A"&gt;€22.26&lt;/text&gt;
  &lt;text x="300" y="300" text-anchor="middle" font-family="system-ui,-apple-system,sans-serif" font-size="12" fill="#5F5E5A"&gt;Peri-urban&lt;/text&gt;

  &lt;!-- Rural: total 180px --&gt;
  &lt;rect x="420" y="266.6" width="90" height="15.4" fill="#888780"&gt;&lt;/rect&gt;
  &lt;rect x="420" y="223.3" width="90" height="43.3" fill="#D85A30"&gt;&lt;/rect&gt;
  &lt;rect x="420" y="119.2" width="90" height="104.1" fill="#378ADD"&gt;&lt;/rect&gt;
  &lt;rect x="420" y="101.9" width="90" height="17.3" fill="#5DCAA5"&gt;&lt;/rect&gt;
  &lt;rect x="420" y="97.9" width="90" height="7" rx="3" fill="#5DCAA5"&gt;&lt;/rect&gt;
  &lt;text x="465" y="89" text-anchor="middle" font-family="system-ui,-apple-system,sans-serif" font-size="13" font-weight="600" fill="#2C2C2A"&gt;€42.14&lt;/text&gt;
  &lt;text x="465" y="300" text-anchor="middle" font-family="system-ui,-apple-system,sans-serif" font-size="12" fill="#5F5E5A"&gt;Rural&lt;/text&gt;
&lt;/svg&gt;
&lt;/figure&gt;

&lt;p&gt;With a low–high range across assumptions:&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Scenario&lt;/th&gt;
&lt;th&gt;Low&lt;/th&gt;
&lt;th&gt;Central&lt;/th&gt;
&lt;th&gt;High&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Redelivery&lt;/td&gt;
&lt;td&gt;€27.00&lt;/td&gt;
&lt;td&gt;€42.14&lt;/td&gt;
&lt;td&gt;€57.30&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;PUDO redirect (where available)&lt;/td&gt;
&lt;td&gt;€17.00&lt;/td&gt;
&lt;td&gt;€25.21&lt;/td&gt;
&lt;td&gt;€33.40&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;The rural redelivery cost at €42.14 is 175% higher than urban (€15.30) and 89% higher than peri-urban (€22.26).&lt;/strong&gt; The range is also wider - rural operations are more heterogeneous, and the assumptions around dedicated vs reinserted redeliveries drive significant variance.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr&gt;
&lt;h3 id="the-three-context-summary"&gt;The three-context summary&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Context&lt;/th&gt;
&lt;th&gt;Redelivery&lt;/th&gt;
&lt;th&gt;PUDO redirect&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://coordable.co/blog/cost-failed-delivery-urban-europe-2026/"&gt;Urban&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;€15.30&lt;/td&gt;
&lt;td&gt;€9.28&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://coordable.co/blog/cost-failed-delivery-peri-urban-europe-2026/"&gt;Peri-urban&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;€22.26&lt;/td&gt;
&lt;td&gt;€13.88&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Rural&lt;/td&gt;
&lt;td&gt;€42.14&lt;/td&gt;
&lt;td&gt;€25.21*&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;em&gt;*Where a PUDO point exists within reasonable distance.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;The €15–€20 figure commonly cited in industry reports is at best an urban average. Applied to peri-urban or rural operations, it understates the true cost by a factor of 1.5× to 2.8×.&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id="what-this-means-for-geocoding-quality"&gt;What this means for geocoding quality&lt;/h3&gt;
&lt;blockquote&gt;
&lt;p&gt;Rural is where geocoding quality has the highest leverage - and the most room for improvement.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Address data quality in rural zones is systematically worse than urban. New builds lag. Non-standard addressing is common. Precision degrades. And the cost of a geocoding-related failure is at its highest. Beyond failed deliveries, poor coordinates affect every route passing through those addresses - the routing overhead alone runs to &lt;a href="https://coordable.co/blog/geocoding-routing-impact-france-2026/"&gt;€7.94 per route in rural zones&lt;/a&gt;, at a 138:1 ROI on the geocoding fix.&lt;/p&gt;
&lt;p&gt;Various industry studies estimate 20–25% of delivery failures trace back to incorrect address data. In rural operations, this figure is likely higher - some operators report address-related failures exceeding 30% in rural zones. Applied conservatively:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;An operator running &lt;strong&gt;10,000 deliveries/month&lt;/strong&gt; in rural zones at an &lt;strong&gt;8% failure rate&lt;/strong&gt;:
- ~800 failed deliveries per month
- ~200 attributable to address or geocoding issues
- At €42.14 per failure: &lt;strong&gt;~€8,400/month in avoidable cost&lt;/strong&gt;
- Cost of a quality geocoding pipeline for those same addresses: typically &lt;strong&gt;€4–€45&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;The ROI is higher in rural than anywhere else - precisely because the cost of failure is highest and the baseline data quality is lowest.&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id="a-note-on-what-this-model-does-not-include"&gt;A note on what this model does not include&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;Customer churn.&lt;/strong&gt; Relevant to retailers. Rural customers, with fewer competing delivery options, may show higher churn propensity after a failure.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Return-to-depot logistics.&lt;/strong&gt; Particularly costly in rural operations where the depot may be 60–100 km from the delivery zone.&lt;/p&gt;
&lt;p&gt;Both exclusions make the estimates above conservative.&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;&lt;em&gt;This post is the third in a four-part series. The &lt;a href="https://coordable.co/blog/cost-failed-delivery-eu-vs-us-2026/"&gt;next and final post&lt;/a&gt; applies the same model to US operating conditions - and shows why failed deliveries cost even more on the other side of the Atlantic, despite cheaper fuel.&lt;/em&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id="want-to-run-the-numbers-on-your-operation"&gt;Want to run the numbers on your operation?&lt;/h3&gt;
&lt;p&gt;If you're managing rural or mixed-density routes and want to understand where geocoding quality affects your costs most, we'd be happy to talk through the specifics.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Coordable&lt;/strong&gt; builds multi-provider geocoding pipelines that surface address issues before dispatch, not after. &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="sources-and-assumptions"&gt;Sources and assumptions&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Driver hourly wage (€17/h fully loaded)&lt;/strong&gt; - Median gross wage for delivery drivers in France: €12–€13/h (Indeed, JOBTransport, 2025; CCN Transport routier logistique, May 2025: €11.91–€19.27/h). Employer contributions ~30% (Urssaf, 2025). Fully loaded: €12.50 × 1.30 = €16.25/h, rounded to €17/h.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Fuel cost (€0.18/km)&lt;/strong&gt; - Average diesel price France 2025: €1.6186/L (prixdubaril.com / Ministry of Ecological Transition, January 2026). LCV rural consumption: 11L/100km.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Vehicle depreciation (€0.12/km)&lt;/strong&gt; - French fiscal mileage allowance 2024–2025 (BOFiP, BOI-BAREME-000003).&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Rural stops per route (8–15/day)&lt;/strong&gt; - Upper Inc., &lt;em&gt;Last-Mile Delivery Route Optimization Guide&lt;/em&gt;, 2026.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Detour distances (25 km reinserted / 40 km near-dedicated)&lt;/strong&gt; - Internal estimate based on rural route geometry and stop density data.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;60/40 split between near-dedicated and reinserted redeliveries&lt;/strong&gt; - Internal conservative estimate for rural operations. High variance across operators.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;PUDO availability in rural zones&lt;/strong&gt; - &lt;a href="https://nshift.com/blog/eu-parcel-locker-growth-in-2025-what-it-means-for-retailers"&gt;nShift, &lt;em&gt;EU Parcel Locker Growth in 2025&lt;/em&gt;&lt;/a&gt;, 2025.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;On-site time (12 min)&lt;/strong&gt; - Higher than urban/peri-urban (8 min) to reflect address-location difficulty in rural zones. Internal estimate.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Recipient call rate (75%)&lt;/strong&gt; - Higher than urban (60%) and peri-urban (60%) to reflect greater address ambiguity in rural zones.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Route incompletion disruption model&lt;/strong&gt; - Internal estimate. Shift from "cascade on adjacent stops" to "probability of end-of-day route incompletion", reflecting rural low-density route reality.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Human contact rate (45%)&lt;/strong&gt; - Higher than urban (30%) and peri-urban (35%) to reflect lower automation adoption and higher address-issue incidence in rural zones.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Address-related failure rate in rural zones (&amp;gt;25%)&lt;/strong&gt; - Conservative estimate; some operators report rates exceeding 30% in rural zones. Composite industry data 2021–2024.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Dispatch/support agent wage (€15/h fully loaded)&lt;/strong&gt; - Estimate by analogy with CCN Transport routier, administrative roles.&lt;/p&gt;
&lt;/li&gt;
&lt;li&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;
&lt;/li&gt;
&lt;/ol&gt;</description><guid>https://coordable.co/fr/blog/cost-failed-delivery-rural-europe-2026/</guid><pubDate>Tue, 14 Apr 2026 12:00:00 GMT</pubDate></item><item><title>The €17 failed delivery in peri-urban operations: the math is worse</title><link>https://coordable.co/fr/blog/cost-failed-delivery-peri-urban-europe-2026/</link><dc:creator>Julien Crétin</dc:creator><description>&lt;p&gt;In our &lt;a href="https://coordable.co/blog/cost-failed-delivery-urban-europe-2026/"&gt;previous post&lt;/a&gt;, we rebuilt the cost of a failed delivery from scratch for dense urban B2C operations in Europe. The central estimate: €15.30 for a redelivery scenario, €9.28 for a PUDO redirect.&lt;/p&gt;
&lt;p&gt;Peri-urban changes the math. The detours are longer, the routes are thinner, and the PUDO options are fewer. The result: a redelivery cost of &lt;strong&gt;€22.26&lt;/strong&gt; - 45% higher than urban.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;This model covers peri-urban B2C operations - suburban zones, secondary cities, mixed-density areas typically located 20–60 km from a major urban center.&lt;/em&gt;&lt;/p&gt;
&lt;div class="toc"&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://coordable.co/fr/blog/cost-failed-delivery-peri-urban-europe-2026/#what-makes-peri-urban-different"&gt;What makes peri-urban different&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://coordable.co/fr/blog/cost-failed-delivery-peri-urban-europe-2026/#the-model"&gt;The model&lt;/a&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href="https://coordable.co/fr/blog/cost-failed-delivery-peri-urban-europe-2026/#component-1-on-site-failure-cost-both-scenarios"&gt;Component 1 — On-site failure cost (both scenarios)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://coordable.co/fr/blog/cost-failed-delivery-peri-urban-europe-2026/#component-2a-redelivery-to-home-address"&gt;Component 2A — Redelivery to home address&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://coordable.co/fr/blog/cost-failed-delivery-peri-urban-europe-2026/#component-2b-redirect-to-pickup-point-pudolocker"&gt;Component 2B — Redirect to pickup point (PUDO/locker)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://coordable.co/fr/blog/cost-failed-delivery-peri-urban-europe-2026/#component-3-route-disruption"&gt;Component 3 — Route disruption&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://coordable.co/fr/blog/cost-failed-delivery-peri-urban-europe-2026/#component-4-customer-support-contact"&gt;Component 4 — Customer support contact&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="https://coordable.co/fr/blog/cost-failed-delivery-peri-urban-europe-2026/#the-full-picture"&gt;The full picture&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://coordable.co/fr/blog/cost-failed-delivery-peri-urban-europe-2026/#what-this-means-for-geocoding-quality"&gt;What this means for geocoding quality&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://coordable.co/fr/blog/cost-failed-delivery-peri-urban-europe-2026/#a-note-on-what-this-model-does-not-include"&gt;A note on what this model does not include&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://coordable.co/fr/blog/cost-failed-delivery-peri-urban-europe-2026/#want-to-run-the-numbers-on-your-own-operation"&gt;Want to run the numbers on your own operation?&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://coordable.co/fr/blog/cost-failed-delivery-peri-urban-europe-2026/#sources-and-assumptions"&gt;Sources and assumptions&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;hr&gt;
&lt;h3 id="what-makes-peri-urban-different"&gt;What makes peri-urban different&lt;/h3&gt;
&lt;p&gt;Three structural differences drive the cost gap vs urban:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Lower stop density.&lt;/strong&gt; Urban routes average 25–40 stops per day. Peri-urban routes average 15–25. The same driver cost, spread over fewer deliveries, means a higher cost per stop - and a higher cost per failure.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Longer inter-stop distances.&lt;/strong&gt; Where an urban detour might be 3 km, a peri-urban detour to reinsert a failed stop is closer to 8–12 km. The distances between addresses are simply larger.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Thinner PUDO networks.&lt;/strong&gt; Europe's 500,000+ out-of-home delivery points are concentrated in urban cores. In peri-urban zones, PUDO density drops significantly - the nearest relay point may be 5–10 km away rather than 1–2 km. In some cases there is no viable PUDO option at all, making redelivery the only path.&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id="the-model"&gt;The model&lt;/h3&gt;
&lt;h4 id="component-1-on-site-failure-cost-both-scenarios"&gt;Component 1 — On-site failure cost (both scenarios)&lt;/h4&gt;
&lt;p&gt;This component is largely context-independent. A failed stop costs roughly the same on-site time regardless of geography.&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Item&lt;/th&gt;
&lt;th&gt;Assumption&lt;/th&gt;
&lt;th&gt;Cost&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;On-site time (approach + attempt + departure)&lt;/td&gt;
&lt;td&gt;8 min @ €17/h&lt;/td&gt;
&lt;td&gt;€2.27&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Recipient call attempt (~60% of failures)&lt;/td&gt;
&lt;td&gt;2.5 min @ €17/h&lt;/td&gt;
&lt;td&gt;€0.43&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Subtotal&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;€2.70&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;hr&gt;
&lt;h4 id="component-2a-redelivery-to-home-address"&gt;Component 2A — Redelivery to home address&lt;/h4&gt;
&lt;p&gt;The key difference vs urban: the detour is longer. In a peri-urban route, stops are spread across a wider area. Reinserting a failed stop into a future run means a meaningful additional distance, not just a marginal detour.&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Item&lt;/th&gt;
&lt;th&gt;Assumption&lt;/th&gt;
&lt;th&gt;Cost&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Driver time (detour + stop)&lt;/td&gt;
&lt;td&gt;22 min @ €17/h&lt;/td&gt;
&lt;td&gt;€6.23&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Fuel&lt;/td&gt;
&lt;td&gt;10 km @ €0.18/km&lt;/td&gt;
&lt;td&gt;€1.80&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Vehicle depreciation&lt;/td&gt;
&lt;td&gt;10 km @ €0.12/km&lt;/td&gt;
&lt;td&gt;€1.20&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Subtotal&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;€9.23&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;em&gt;22 minutes and 10 km reflect a realistic marginal detour in a peri-urban route of 15–25 stops spread across a suburban or secondary urban zone.&lt;/em&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h4 id="component-2b-redirect-to-pickup-point-pudolocker"&gt;Component 2B — Redirect to pickup point (PUDO/locker)&lt;/h4&gt;
&lt;p&gt;Where a PUDO network exists in the zone, the redirect path is still cheaper than redelivery - but the economics narrow compared to urban. The nearest relay point is farther, and consolidation benefits are smaller.&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Item&lt;/th&gt;
&lt;th&gt;Assumption&lt;/th&gt;
&lt;th&gt;Cost&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Driver time (detour + PUDO drop)&lt;/td&gt;
&lt;td&gt;15 min @ €17/h&lt;/td&gt;
&lt;td&gt;€4.25&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Fuel&lt;/td&gt;
&lt;td&gt;6 km @ €0.18/km&lt;/td&gt;
&lt;td&gt;€1.08&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Vehicle depreciation&lt;/td&gt;
&lt;td&gt;6 km @ €0.12/km&lt;/td&gt;
&lt;td&gt;€0.72&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Merchant commission&lt;/td&gt;
&lt;td&gt;€0.40&lt;/td&gt;
&lt;td&gt;€0.40&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Subtotal&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;€6.45&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;em&gt;Where no PUDO option exists within a reasonable radius (&amp;gt;10 km), redelivery becomes the only option. This is a meaningful constraint in lower-density peri-urban zones.&lt;/em&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h4 id="component-3-route-disruption"&gt;Component 3 — Route disruption&lt;/h4&gt;
&lt;p&gt;This is where peri-urban diverges most sharply from urban.&lt;/p&gt;
&lt;p&gt;In a dense urban route, a failed stop disrupts the stops immediately following it - the cascade is local and relatively contained. In a peri-urban route with larger inter-stop distances and fewer stops per route, the same time loss has a proportionally larger impact: the driver has less buffer, fewer stops to resequence around, and longer travel legs that make recovering the deficit harder.&lt;/p&gt;
&lt;p&gt;The nature of this disruption - and who absorbs the cost - depends on the operator's model.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;For operators with salaried drivers&lt;/strong&gt;, the disruption translates into route lengthening. Time lost accumulates across the week and can contribute to crossing the overtime threshold - in France, 39 hours under the transport collective agreement, with a 25% premium beyond that.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;For operators using subcontracted drivers on a daily or per-route flat fee&lt;/strong&gt; - which represents the majority of last-mile operations in France for networks such as Amazon, Chronopost, or DHL - the disruption generates a margin loss: if a subcontractor completes 18 stops instead of 20 due to time lost on a failure, they deliver less for the same flat fee.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;A third case: markets with precise delivery slots.&lt;/strong&gt; In peri-urban contexts, this dynamic is more prevalent than in urban - peri-urban operations are more likely to include B2B deliveries with contractual time windows, or premium residential services with narrow slots. A failed stop in this context is a missed contractual commitment, potentially triggering SLA penalties on top of the operational cost.&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Item&lt;/th&gt;
&lt;th&gt;Assumption&lt;/th&gt;
&lt;th&gt;Redelivery&lt;/th&gt;
&lt;th&gt;PUDO redirect&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Cascade delay on following stops&lt;/td&gt;
&lt;td&gt;2 stops × 8 min @ €17/h&lt;/td&gt;
&lt;td&gt;€4.53&lt;/td&gt;
&lt;td&gt;€2.27&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Dispatch rescheduling&lt;/td&gt;
&lt;td&gt;12 min @ €15/h&lt;/td&gt;
&lt;td&gt;€3.00&lt;/td&gt;
&lt;td&gt;€1.50&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Subtotal&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;€7.53&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;€3.77&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Route disruption is the largest single component in the redelivery scenario - €7.53, or 34% of the total.&lt;/strong&gt; In peri-urban contexts, fewer stops and longer legs mean there is less slack to absorb the cascade.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr&gt;
&lt;h4 id="component-4-customer-support-contact"&gt;Component 4 — Customer support contact&lt;/h4&gt;
&lt;p&gt;The contact rate dynamics are similar to urban, with one additional factor: geocoding quality in peri-urban zones tends to be less reliable. New residential developments on the urban periphery lag in address databases. Industrial parks and business zones often have poor coordinate precision. This increases the likelihood that a failure is address-related rather than recipient-absent - which in turn increases the probability of a support contact.&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Item&lt;/th&gt;
&lt;th&gt;Assumption&lt;/th&gt;
&lt;th&gt;Redelivery&lt;/th&gt;
&lt;th&gt;PUDO redirect&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Scenario&lt;/td&gt;
&lt;td&gt;Contact rate&lt;/td&gt;
&lt;td&gt;Cost per contact&lt;/td&gt;
&lt;td&gt;Subtotal&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;---&lt;/td&gt;
&lt;td&gt;---&lt;/td&gt;
&lt;td&gt;---&lt;/td&gt;
&lt;td&gt;---&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Redelivery&lt;/td&gt;
&lt;td&gt;35%&lt;/td&gt;
&lt;td&gt;€8&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;€2.80&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;PUDO redirect&lt;/td&gt;
&lt;td&gt;12%&lt;/td&gt;
&lt;td&gt;€8&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;€0.96&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;em&gt;The slightly higher contact rate vs urban (35% vs 30%) reflects the greater prevalence of address-quality issues in peri-urban zones.&lt;/em&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id="the-full-picture"&gt;The full picture&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Component&lt;/th&gt;
&lt;th&gt;Redelivery&lt;/th&gt;
&lt;th&gt;PUDO redirect&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;1. On-site failure&lt;/td&gt;
&lt;td&gt;€2.70&lt;/td&gt;
&lt;td&gt;€2.70&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;2. Resolution path&lt;/td&gt;
&lt;td&gt;€9.23&lt;/td&gt;
&lt;td&gt;€6.45&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;3. Route disruption&lt;/td&gt;
&lt;td&gt;€7.53&lt;/td&gt;
&lt;td&gt;€3.77&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;4. Customer support&lt;/td&gt;
&lt;td&gt;€2.80&lt;/td&gt;
&lt;td&gt;€0.96&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;€22.26&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;€13.88&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;figure style="text-align:center;margin:2em 0;"&gt;
&lt;svg width="560" viewbox="0 0 560 330" role="img" xmlns="http://www.w3.org/2000/svg"&gt;
  &lt;title&gt;Cost per failed delivery: urban vs peri-urban comparison&lt;/title&gt;
  &lt;desc&gt;Stacked bar chart comparing four cost components across urban and peri-urban redelivery scenarios. Urban totals €15.30, peri-urban totals €22.26.&lt;/desc&gt;

  &lt;text x="280" y="16" text-anchor="middle" font-family="system-ui,-apple-system,sans-serif" font-size="12" font-weight="600" fill="#2C2C2A"&gt;Redelivery cost per failed delivery — urban vs peri-urban (€)&lt;/text&gt;

  &lt;rect x="64" y="32" width="10" height="10" rx="2" fill="#5DCAA5"&gt;&lt;/rect&gt;
  &lt;text x="79" y="41" font-family="system-ui,-apple-system,sans-serif" font-size="11" fill="#5F5E5A"&gt;On-site failure&lt;/text&gt;
  &lt;rect x="185" y="32" width="10" height="10" rx="2" fill="#378ADD"&gt;&lt;/rect&gt;
  &lt;text x="200" y="41" font-family="system-ui,-apple-system,sans-serif" font-size="11" fill="#5F5E5A"&gt;Resolution path&lt;/text&gt;
  &lt;rect x="316" y="32" width="10" height="10" rx="2" fill="#D85A30"&gt;&lt;/rect&gt;
  &lt;text x="331" y="41" font-family="system-ui,-apple-system,sans-serif" font-size="11" fill="#5F5E5A"&gt;Route disruption&lt;/text&gt;
  &lt;rect x="450" y="32" width="10" height="10" rx="2" fill="#888780"&gt;&lt;/rect&gt;
  &lt;text x="465" y="41" font-family="system-ui,-apple-system,sans-serif" font-size="11" fill="#5F5E5A"&gt;Support&lt;/text&gt;

  &lt;line x1="84" y1="282" x2="500" y2="282" stroke="#B4B2A9" stroke-width="0.5"&gt;&lt;/line&gt;
  &lt;line x1="84" y1="237" x2="500" y2="237" stroke="#D3D1C7" stroke-width="0.5" stroke-dasharray="3 3"&gt;&lt;/line&gt;
  &lt;line x1="84" y1="192" x2="500" y2="192" stroke="#D3D1C7" stroke-width="0.5" stroke-dasharray="3 3"&gt;&lt;/line&gt;
  &lt;line x1="84" y1="102" x2="500" y2="102" stroke="#D3D1C7" stroke-width="0.5" stroke-dasharray="3 3"&gt;&lt;/line&gt;

  &lt;text x="78" y="286" text-anchor="end" font-family="system-ui,-apple-system,sans-serif" font-size="11" fill="#888780"&gt;€0&lt;/text&gt;
  &lt;text x="78" y="241" text-anchor="end" font-family="system-ui,-apple-system,sans-serif" font-size="11" fill="#888780"&gt;€5&lt;/text&gt;
  &lt;text x="78" y="196" text-anchor="end" font-family="system-ui,-apple-system,sans-serif" font-size="11" fill="#888780"&gt;€10&lt;/text&gt;
  &lt;text x="78" y="106" text-anchor="end" font-family="system-ui,-apple-system,sans-serif" font-size="11" fill="#888780"&gt;€20&lt;/text&gt;

  &lt;!-- Urbain --&gt;
  &lt;rect x="130" y="262.6" width="100" height="19.4" fill="#888780"&gt;&lt;/rect&gt;
  &lt;rect x="130" y="214.9" width="100" height="47.7" fill="#D85A30"&gt;&lt;/rect&gt;
  &lt;rect x="130" y="180.1" width="100" height="34.8" fill="#378ADD"&gt;&lt;/rect&gt;
  &lt;rect x="130" y="158.3" width="100" height="21.8" fill="#5DCAA5"&gt;&lt;/rect&gt;
  &lt;rect x="130" y="154.3" width="100" height="7" rx="3" fill="#5DCAA5"&gt;&lt;/rect&gt;
  &lt;text x="180" y="146" text-anchor="middle" font-family="system-ui,-apple-system,sans-serif" font-size="13" font-weight="600" fill="#2C2C2A"&gt;€15.30&lt;/text&gt;
  &lt;text x="180" y="300" text-anchor="middle" font-family="system-ui,-apple-system,sans-serif" font-size="12" fill="#5F5E5A"&gt;Urban&lt;/text&gt;

  &lt;!-- Péri-urbain --&gt;
  &lt;rect x="320" y="259.4" width="100" height="22.6" fill="#888780"&gt;&lt;/rect&gt;
  &lt;rect x="320" y="198.5" width="100" height="60.9" fill="#D85A30"&gt;&lt;/rect&gt;
  &lt;rect x="320" y="123.9" width="100" height="74.6" fill="#378ADD"&gt;&lt;/rect&gt;
  &lt;rect x="320" y="102.1" width="100" height="21.8" fill="#5DCAA5"&gt;&lt;/rect&gt;
  &lt;rect x="320" y="98.1" width="100" height="7" rx="3" fill="#5DCAA5"&gt;&lt;/rect&gt;
  &lt;text x="370" y="90" text-anchor="middle" font-family="system-ui,-apple-system,sans-serif" font-size="13" font-weight="600" fill="#2C2C2A"&gt;€22.26&lt;/text&gt;
  &lt;text x="370" y="300" text-anchor="middle" font-family="system-ui,-apple-system,sans-serif" font-size="12" fill="#5F5E5A"&gt;Peri-urban&lt;/text&gt;

  &lt;!-- Flèche +45% --&gt;
  &lt;line x1="230" y1="155" x2="318" y2="100" stroke="#888780" stroke-width="1" stroke-dasharray="3 2"&gt;&lt;/line&gt;
  &lt;text x="278" y="118" text-anchor="middle" font-family="system-ui,-apple-system,sans-serif" font-size="12" font-weight="600" fill="#D85A30"&gt;+45%&lt;/text&gt;
&lt;/svg&gt;
&lt;/figure&gt;

&lt;p&gt;With a low–high range across assumptions:&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Scenario&lt;/th&gt;
&lt;th&gt;Low&lt;/th&gt;
&lt;th&gt;Central&lt;/th&gt;
&lt;th&gt;High&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Redelivery&lt;/td&gt;
&lt;td&gt;€16.00&lt;/td&gt;
&lt;td&gt;€22.26&lt;/td&gt;
&lt;td&gt;€28.50&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;PUDO redirect&lt;/td&gt;
&lt;td&gt;€9.70&lt;/td&gt;
&lt;td&gt;€13.88&lt;/td&gt;
&lt;td&gt;€18.10&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;The peri-urban redelivery cost at €22.26 is 45% higher than the urban equivalent (€15.30).&lt;/strong&gt; This reflects the structural reality of lower stop density and longer detours - not exceptional conditions, just standard peri-urban operations.&lt;/p&gt;
&lt;p&gt;Where PUDO networks exist in peri-urban zones, the savings vs redelivery are even larger than in urban: &lt;strong&gt;€8.38 saved per failure&lt;/strong&gt; vs €6.02 in urban. The rarer the PUDO option, the more valuable it becomes when it's available.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr&gt;
&lt;h3 id="what-this-means-for-geocoding-quality"&gt;What this means for geocoding quality&lt;/h3&gt;
&lt;p&gt;The geocoding problem is more significant in peri-urban contexts for two reasons.&lt;/p&gt;
&lt;p&gt;First, address data quality degrades at the urban periphery. New residential developments, industrial zones, and business parks on city fringes are consistently slower to appear in geocoding databases - and when they do appear, precision is often street-level rather than rooftop.&lt;/p&gt;
&lt;p&gt;Second, the cost of getting it wrong is higher. At €22.26 per failure vs €15.30 in urban, the same root cause generates 45% more damage. And beyond failed deliveries, degraded coordinates affect every route that runs through those addresses - see our &lt;a href="https://coordable.co/blog/geocoding-routing-impact-france-2026/"&gt;routing simulation&lt;/a&gt; for the direct impact on driver time and distance.&lt;/p&gt;
&lt;p&gt;Various industry studies estimate 20–25% of delivery failures trace back to incorrect address data. Applied to peri-urban operations:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;An operator running &lt;strong&gt;30,000 deliveries/month&lt;/strong&gt; in peri-urban zones at an &lt;strong&gt;8% failure rate&lt;/strong&gt;:
- ~2,400 failed deliveries per month
- ~540 attributable to address or geocoding issues
- At €22.26 per failure: &lt;strong&gt;~€12,000/month in avoidable cost&lt;/strong&gt;
- Cost of a quality geocoding pipeline for those same addresses: typically &lt;strong&gt;€12–€110&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr&gt;
&lt;h3 id="a-note-on-what-this-model-does-not-include"&gt;A note on what this model does not include&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;Customer churn.&lt;/strong&gt; Relevant to retailers, not carriers. An e-commerce operator running this model for their own context should add it.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Return-to-depot logistics.&lt;/strong&gt; Particularly significant in peri-urban zones where PUDO is unavailable - an undeliverable parcel must travel further to return to depot. Both exclusions make the estimates above conservative.&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;&lt;em&gt;The figures above apply to peri-urban B2C operations in a European context. Rural contexts are more extreme still - longer distances, near-absent PUDO networks, and substantially higher per-stop costs. We cover those in the &lt;a href="https://coordable.co/blog/cost-failed-delivery-rural-europe-2026/"&gt;next post&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id="want-to-run-the-numbers-on-your-own-operation"&gt;Want to run the numbers on your own operation?&lt;/h3&gt;
&lt;p&gt;If you're working on address quality or last-mile cost reduction in peri-urban or mixed-density contexts, we'd be happy to talk through how geocoding quality affects your specific setup.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Coordable&lt;/strong&gt; helps logistics and operations teams build multi-provider geocoding pipelines that surface address issues before dispatch, not after. &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="sources-and-assumptions"&gt;Sources and assumptions&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Driver hourly wage (€17/h fully loaded)&lt;/strong&gt; - Median gross wage for delivery drivers in France: €12–€13/h (Indeed, JOBTransport, 2025; CCN Transport routier logistique, May 2025: €11.91–€19.27/h). Employer contributions ~30% (Urssaf, 2025). Fully loaded: €12.50 × 1.30 = €16.25/h, rounded to €17/h.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Fuel cost (€0.18/km)&lt;/strong&gt; - Average diesel price France 2025: €1.6186/L (prixdubaril.com / Ministry of Ecological Transition, January 2026). LCV peri-urban consumption: 11L/100km.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Vehicle depreciation (€0.12/km)&lt;/strong&gt; - French fiscal mileage allowance 2024–2025 (BOFiP, BOI-BAREME-000003).&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Peri-urban stops per route (15–25/day)&lt;/strong&gt; - Upper Inc., &lt;em&gt;Last-Mile Delivery Route Optimization Guide&lt;/em&gt;, 2026.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Detour distance and time (10 km / 22 min)&lt;/strong&gt; - Internal estimate based on peri-urban route geometry and stop density data.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;PUDO network density in peri-urban zones&lt;/strong&gt; - &lt;a href="https://nshift.com/blog/eu-parcel-locker-growth-in-2025-what-it-means-for-retailers"&gt;nShift, &lt;em&gt;EU Parcel Locker Growth in 2025&lt;/em&gt;&lt;/a&gt;, 2025.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;PUDO merchant commission (€0.40)&lt;/strong&gt; - Published rates from Pickup, Mondial Relay, Relais Colis, 2025.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Cascade disruption (2 stops × 8 min)&lt;/strong&gt; - Internal estimate. No published benchmark identified.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Human contact rate (35%)&lt;/strong&gt; - Slightly higher than urban (30%) to reflect greater address-quality issues in peri-urban zones. &lt;a href="https://wismolabs.com/what-is-wismo/"&gt;WISMOlabs, &lt;em&gt;What Is WISMO?&lt;/em&gt;&lt;/a&gt;, 2025.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Dispatch/support agent wage (€15/h fully loaded)&lt;/strong&gt; - Estimate by analogy with CCN Transport routier, administrative roles.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Address-related failure rate (20–25%)&lt;/strong&gt; - Composite estimate, last-mile industry studies 2021–2024.&lt;/p&gt;
&lt;/li&gt;
&lt;li&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;
&lt;/li&gt;
&lt;/ol&gt;</description><guid>https://coordable.co/fr/blog/cost-failed-delivery-peri-urban-europe-2026/</guid><pubDate>Tue, 14 Apr 2026 11:00:00 GMT</pubDate></item><item><title>The €17 failed delivery: everyone cites it, nobody shows the math</title><link>https://coordable.co/fr/blog/cost-failed-delivery-urban-europe-2026/</link><dc:creator>Julien Crétin</dc:creator><description>&lt;p&gt;Search for "cost of a failed delivery" and you find the same figure everywhere: somewhere between €15 and €20 per failed order. It shows up in industry reports, logistics blogs, carrier decks. Sometimes €17, sometimes €18, sometimes just "around €17." The number circulates freely.&lt;/p&gt;
&lt;p&gt;What never appears alongside it is a breakdown.&lt;/p&gt;
&lt;p&gt;We rebuilt the estimate from scratch, line by line, with explicit assumptions, for a realistic urban B2C context in Europe in 2026. And we modeled two scenarios, because not all failed deliveries end the same way.&lt;/p&gt;
&lt;div class="toc"&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://coordable.co/fr/blog/cost-failed-delivery-urban-europe-2026/#two-paths-after-a-failed-first-attempt"&gt;Two paths after a failed first attempt&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://coordable.co/fr/blog/cost-failed-delivery-urban-europe-2026/#the-model"&gt;The model&lt;/a&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href="https://coordable.co/fr/blog/cost-failed-delivery-urban-europe-2026/#component-1-on-site-failure-cost-both-scenarios"&gt;Component 1 - On-site failure cost (both scenarios)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://coordable.co/fr/blog/cost-failed-delivery-urban-europe-2026/#component-2a-redelivery-to-home-address"&gt;Component 2A - Redelivery to home address&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://coordable.co/fr/blog/cost-failed-delivery-urban-europe-2026/#component-2b-redirect-to-pickup-point"&gt;Component 2B - Redirect to pickup point&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://coordable.co/fr/blog/cost-failed-delivery-urban-europe-2026/#component-3-route-disruption"&gt;Component 3 - Route disruption&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://coordable.co/fr/blog/cost-failed-delivery-urban-europe-2026/#component-4-customer-support-contact"&gt;Component 4 - Customer support contact&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="https://coordable.co/fr/blog/cost-failed-delivery-urban-europe-2026/#the-full-picture"&gt;The full picture&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://coordable.co/fr/blog/cost-failed-delivery-urban-europe-2026/#what-this-means-for-geocoding-quality"&gt;What this means for geocoding quality&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://coordable.co/fr/blog/cost-failed-delivery-urban-europe-2026/#a-note-on-what-this-model-does-not-include"&gt;A note on what this model does not include&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://coordable.co/fr/blog/cost-failed-delivery-urban-europe-2026/#want-to-run-the-numbers-on-your-own-operation"&gt;Want to run the numbers on your own operation?&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://coordable.co/fr/blog/cost-failed-delivery-urban-europe-2026/#sources-and-assumptions"&gt;Sources and assumptions&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;hr&gt;
&lt;h3 id="two-paths-after-a-failed-first-attempt"&gt;Two paths after a failed first attempt&lt;/h3&gt;
&lt;p&gt;When a delivery attempt fails, operators have two main options:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Redeliver to the home address.&lt;/strong&gt; Schedule a second attempt, slot it into a future route, try again.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Redirect to a pickup point (PUDO/locker).&lt;/strong&gt; Drop the parcel at a nearby relay point, a staffed shop or an automated locker, and notify the recipient to collect at their convenience.&lt;/p&gt;
&lt;figure style="max-width:680px;margin:1.5em 0;"&gt;
&lt;svg width="100%" viewbox="0 0 680 220" role="img" xmlns="http://www.w3.org/2000/svg"&gt;
  &lt;title&gt;Two paths after a failed delivery attempt&lt;/title&gt;
  &lt;desc&gt;A flowchart showing that a failed delivery attempt splits into two paths: redelivery to home address, or redirect to a PUDO pickup point.&lt;/desc&gt;
  &lt;defs&gt;
    &lt;marker id="arr-flow" viewbox="0 0 10 10" refx="8" refy="5" markerwidth="6" markerheight="6" orient="auto-start-reverse"&gt;
      &lt;path d="M2 1L8 5L2 9" fill="none" stroke="#9c9a92" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"&gt;&lt;/path&gt;
    &lt;/marker&gt;
  &lt;/defs&gt;

  &lt;rect x="215" y="20" width="250" height="52" rx="8" fill="#FAECE7" stroke="#993C1D" stroke-width="0.5"&gt;&lt;/rect&gt;
  &lt;text x="340" y="42" text-anchor="middle" dominant-baseline="central" font-family="system-ui,-apple-system,sans-serif" font-size="13" font-weight="600" fill="#712B13"&gt;Failed delivery attempt&lt;/text&gt;
  &lt;text x="340" y="60" text-anchor="middle" dominant-baseline="central" font-family="system-ui,-apple-system,sans-serif" font-size="11" fill="#993C1D"&gt;Driver on-site, recipient absent&lt;/text&gt;

  &lt;path d="M290 72 L175 140" fill="none" stroke="#9c9a92" stroke-width="1" marker-end="url(#arr-flow)"&gt;&lt;/path&gt;
  &lt;path d="M390 72 L505 140" fill="none" stroke="#9c9a92" stroke-width="1" marker-end="url(#arr-flow)"&gt;&lt;/path&gt;

  &lt;rect x="60" y="140" width="230" height="56" rx="8" fill="#E1F5EE" stroke="#0F6E56" stroke-width="0.5"&gt;&lt;/rect&gt;
  &lt;text x="175" y="162" text-anchor="middle" dominant-baseline="central" font-family="system-ui,-apple-system,sans-serif" font-size="13" font-weight="600" fill="#085041"&gt;Redeliver to home&lt;/text&gt;
  &lt;text x="175" y="180" text-anchor="middle" dominant-baseline="central" font-family="system-ui,-apple-system,sans-serif" font-size="11" fill="#0F6E56"&gt;Slotted into a future route&lt;/text&gt;

  &lt;rect x="390" y="140" width="230" height="56" rx="8" fill="#E1F5EE" stroke="#0F6E56" stroke-width="0.5"&gt;&lt;/rect&gt;
  &lt;text x="505" y="162" text-anchor="middle" dominant-baseline="central" font-family="system-ui,-apple-system,sans-serif" font-size="13" font-weight="600" fill="#085041"&gt;Redirect to PUDO&lt;/text&gt;
  &lt;text x="505" y="180" text-anchor="middle" dominant-baseline="central" font-family="system-ui,-apple-system,sans-serif" font-size="11" fill="#0F6E56"&gt;Nearest relay point or locker&lt;/text&gt;
&lt;/svg&gt;
&lt;/figure&gt;

&lt;p&gt;The second path is growing fast. Out-of-home delivery networks in Europe &lt;a href="https://nshift.com/blog/eu-parcel-locker-growth-in-2025-what-it-means-for-retailers"&gt;now exceed 500,000 points&lt;/a&gt;. In France alone, the three main networks (Pickup, Mondial Relay, Relais Colis) cover over 37,000 relay points. Redirecting to a PUDO is no longer a fallback; in many operations it is the default response to a failed first attempt.&lt;/p&gt;
&lt;p&gt;The cost profiles of these two paths are meaningfully different. We modeled both.&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id="the-model"&gt;The model&lt;/h3&gt;
&lt;h4 id="component-1-on-site-failure-cost-both-scenarios"&gt;Component 1 - On-site failure cost (both scenarios)&lt;/h4&gt;
&lt;p&gt;Before any decision about what happens next, a failed stop already costs something. The driver arrived, attempted delivery, documented the failure, and departed. That time is gone regardless of what follows.&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Item&lt;/th&gt;
&lt;th&gt;Assumption&lt;/th&gt;
&lt;th&gt;Cost&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;On-site time (approach + attempt + departure)&lt;/td&gt;
&lt;td&gt;8 min @ €17/h&lt;/td&gt;
&lt;td&gt;€2.27&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Recipient call attempt&lt;/td&gt;
&lt;td&gt;2.5 min @ €17/h (~60% of failures)&lt;/td&gt;
&lt;td&gt;€0.43&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Subtotal&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;€2.70&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;em&gt;The call is not systematic - carriers typically place it when the address is unclear or the recipient was expected to be home. We estimate it occurs in roughly 60% of failed attempts.&lt;/em&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h4 id="component-2a-redelivery-to-home-address"&gt;Component 2A - Redelivery to home address&lt;/h4&gt;
&lt;p&gt;The package gets slotted back into a future route. The marginal cost is the detour: the extra time and distance to work that stop back into an existing run. Not a dedicated trip, just the incremental cost of squeezing it in.&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Item&lt;/th&gt;
&lt;th&gt;Assumption&lt;/th&gt;
&lt;th&gt;Cost&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Driver time (detour + stop)&lt;/td&gt;
&lt;td&gt;12 min @ €17/h&lt;/td&gt;
&lt;td&gt;€3.40&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Fuel&lt;/td&gt;
&lt;td&gt;3 km @ €0.18/km&lt;/td&gt;
&lt;td&gt;€0.54&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Vehicle depreciation&lt;/td&gt;
&lt;td&gt;3 km @ €0.12/km&lt;/td&gt;
&lt;td&gt;€0.36&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Subtotal&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;€4.30&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;em&gt;12 minutes and 3 km reflect a marginal detour within a dense urban route. In peri-urban or rural contexts, these figures are significantly higher.&lt;/em&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h4 id="component-2b-redirect-to-pickup-point"&gt;Component 2B - Redirect to pickup point&lt;/h4&gt;
&lt;p&gt;The driver diverts to the nearest relay point on the same or next run. A PUDO stop is fast: 1.5-2 minutes vs 6-7 minutes for a residential delivery, because consolidation means multiple parcels per stop. Detour distance is short in a dense urban network.&lt;/p&gt;
&lt;p&gt;There is also a cost that most estimates miss: the commission paid by the carrier to the merchant hosting the relay point. In France, this runs €0.30-€0.50 per parcel depending on the network (Mondial Relay, Pickup, Relais Colis). Small, but real, and exactly the kind of line item that gets lost when a figure is simply quoted without a breakdown.&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Item&lt;/th&gt;
&lt;th&gt;Assumption&lt;/th&gt;
&lt;th&gt;Cost&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Driver time (detour + PUDO drop)&lt;/td&gt;
&lt;td&gt;7 min @ €17/h&lt;/td&gt;
&lt;td&gt;€1.98&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Fuel&lt;/td&gt;
&lt;td&gt;1.5 km @ €0.18/km&lt;/td&gt;
&lt;td&gt;€0.27&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Vehicle depreciation&lt;/td&gt;
&lt;td&gt;1.5 km @ €0.12/km&lt;/td&gt;
&lt;td&gt;€0.18&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Merchant commission&lt;/td&gt;
&lt;td&gt;€0.40&lt;/td&gt;
&lt;td&gt;€0.40&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Subtotal&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;€2.83&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;hr&gt;
&lt;h4 id="component-3-route-disruption"&gt;Component 3 - Route disruption&lt;/h4&gt;
&lt;p&gt;This is the component that almost never appears in cost estimates, and the one we think matters most.&lt;/p&gt;
&lt;p&gt;A failed stop does not happen in isolation. The driver spent time on-site. In a tightly scheduled urban run of 20-30 stops, that time ripples downstream. The nature of this disruption, and who absorbs the cost, depends on the operator's model.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;For operators with salaried drivers&lt;/strong&gt;, the disruption translates into route lengthening. Time lost accumulates across the week and can contribute to crossing the overtime threshold: in France, 39 hours under the transport collective agreement, with a 25% premium beyond that. The marginal cost is real but diffuse: it rarely maps cleanly to a single failed stop.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;For operators using subcontracted drivers on a daily or per-route flat fee&lt;/strong&gt;, which represents the majority of last-mile operations in France for networks such as Amazon, Chronopost, or DHL, the disruption does not generate overtime. It generates a margin loss: if a subcontractor completes 18 stops instead of 20 due to time lost on a failure, they deliver less for the same flat fee. The cost is real, but it sits with the subcontractor rather than the network operator. Operators on this model can calibrate the disruption cost by dividing their daily flat rate by the number of planned stops.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;A third case: markets with precise delivery slots.&lt;/strong&gt; In the UK, Germany, and increasingly in premium services across Europe, recipients select a 1-2 hour window at checkout. In this context, a failed stop is not just a time loss; it is a missed contractual commitment, and SLA-based contracts can trigger financial penalties: a cost that does not appear in any per-failed-delivery model, but is very real at scale. We do not include it in our central estimate, but operators on slot-based markets should factor it in.&lt;/p&gt;
&lt;p&gt;In all three cases, dispatch rescheduling remains a fixed cost: someone must handle the failed stop, reassign it, and notify the recipient.&lt;/p&gt;
&lt;p&gt;There is no published benchmark for the cascade effect specifically. We modeled it conservatively and flag it as an assumption operators should calibrate against their own route data.&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Item&lt;/th&gt;
&lt;th&gt;Assumption&lt;/th&gt;
&lt;th&gt;Redelivery&lt;/th&gt;
&lt;th&gt;PUDO redirect&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Cascade delay on following stops&lt;/td&gt;
&lt;td&gt;3 stops × 4 min @ €17/h&lt;/td&gt;
&lt;td&gt;€3.40&lt;/td&gt;
&lt;td&gt;€1.70&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Dispatch rescheduling&lt;/td&gt;
&lt;td&gt;10 min @ €15/h&lt;/td&gt;
&lt;td&gt;€2.50&lt;/td&gt;
&lt;td&gt;€1.25&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Subtotal&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;€5.90&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;€2.95&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;em&gt;The €17/h figure is an approximation of the real operational cost in both salaried and subcontracted models - marginal hourly cost for salaried drivers, opportunity cost per undelivered stop for flat-fee subcontractors.&lt;/em&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Route disruption accounts for roughly 40% of the total cost in the redelivery scenario.&lt;/strong&gt; It is the component most directly amplified by address quality issues - and the one almost entirely invisible in standard last-mile cost reporting.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr&gt;
&lt;h4 id="component-4-customer-support-contact"&gt;Component 4 - Customer support contact&lt;/h4&gt;
&lt;p&gt;In 2026, most platforms automatically notify recipients of a failed attempt and offer self-service rescheduling. The majority of failures do not generate a human support contact. But a meaningful share do: particularly when the address is genuinely unresolvable, the automated flow breaks down, or the delay exceeds the customer's tolerance.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://wismolabs.com/what-is-wismo/"&gt;Industry data on post-failure contact rates&lt;/a&gt; shows that well-optimized operators with proactive SMS/WhatsApp notifications see human contact rates around 15%. Average operators without strong visibility tooling can exceed 40%. We use 30% as a central estimate.&lt;/p&gt;
&lt;p&gt;For PUDO redirects, the contact rate drops significantly: the recipient gets an automatic notification, the package is safe, and there is nothing to escalate.&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Item&lt;/th&gt;
&lt;th&gt;Redelivery&lt;/th&gt;
&lt;th&gt;PUDO redirect&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Human contact rate&lt;/td&gt;
&lt;td&gt;30%&lt;/td&gt;
&lt;td&gt;10%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Cost per contact (internal dispatch or support)&lt;/td&gt;
&lt;td&gt;€8&lt;/td&gt;
&lt;td&gt;€8&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Subtotal&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;€2.40&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;€0.80&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;hr&gt;
&lt;h3 id="the-full-picture"&gt;The full picture&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Component&lt;/th&gt;
&lt;th&gt;Redelivery&lt;/th&gt;
&lt;th&gt;PUDO redirect&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;1. On-site failure&lt;/td&gt;
&lt;td&gt;€2.70&lt;/td&gt;
&lt;td&gt;€2.70&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;2. Resolution path&lt;/td&gt;
&lt;td&gt;€4.30&lt;/td&gt;
&lt;td&gt;€2.83&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;3. Route disruption&lt;/td&gt;
&lt;td&gt;€5.90&lt;/td&gt;
&lt;td&gt;€2.95&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;4. Customer support&lt;/td&gt;
&lt;td&gt;€2.40&lt;/td&gt;
&lt;td&gt;€0.80&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;€15.30&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;€9.28&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;figure style="text-align:center;margin:2em 0;"&gt;
&lt;svg width="560" viewbox="0 0 560 320" role="img" xmlns="http://www.w3.org/2000/svg"&gt;
  &lt;title&gt;Cost breakdown per failed delivery: redelivery vs PUDO redirect&lt;/title&gt;
  &lt;desc&gt;Stacked bar chart comparing four cost components across two scenarios. Redelivery totals €15.30, PUDO redirect totals €9.28. Route disruption is the largest single component in the redelivery scenario.&lt;/desc&gt;

  &lt;text x="280" y="16" text-anchor="middle" font-family="system-ui,-apple-system,sans-serif" font-size="12" font-weight="600" fill="#2C2C2A"&gt;Cost per failed delivery (€)&lt;/text&gt;

  &lt;rect x="64" y="30" width="10" height="10" rx="2" fill="#5DCAA5"&gt;&lt;/rect&gt;
  &lt;text x="79" y="39" font-family="system-ui,-apple-system,sans-serif" font-size="11" fill="#5F5E5A"&gt;On-site failure&lt;/text&gt;
  &lt;rect x="185" y="30" width="10" height="10" rx="2" fill="#378ADD"&gt;&lt;/rect&gt;
  &lt;text x="200" y="39" font-family="system-ui,-apple-system,sans-serif" font-size="11" fill="#5F5E5A"&gt;Resolution path&lt;/text&gt;
  &lt;rect x="316" y="30" width="10" height="10" rx="2" fill="#D85A30"&gt;&lt;/rect&gt;
  &lt;text x="331" y="39" font-family="system-ui,-apple-system,sans-serif" font-size="11" fill="#5F5E5A"&gt;Route disruption&lt;/text&gt;
  &lt;rect x="450" y="30" width="10" height="10" rx="2" fill="#888780"&gt;&lt;/rect&gt;
  &lt;text x="465" y="39" font-family="system-ui,-apple-system,sans-serif" font-size="11" fill="#5F5E5A"&gt;Support&lt;/text&gt;

  &lt;line x1="84" y1="272" x2="500" y2="272" stroke="#B4B2A9" stroke-width="0.5"&gt;&lt;/line&gt;
  &lt;line x1="84" y1="214" x2="500" y2="214" stroke="#D3D1C7" stroke-width="0.5" stroke-dasharray="3 3"&gt;&lt;/line&gt;
  &lt;line x1="84" y1="155" x2="500" y2="155" stroke="#D3D1C7" stroke-width="0.5" stroke-dasharray="3 3"&gt;&lt;/line&gt;
  &lt;line x1="84" y1="96" x2="500" y2="96" stroke="#D3D1C7" stroke-width="0.5" stroke-dasharray="3 3"&gt;&lt;/line&gt;

  &lt;text x="78" y="276" text-anchor="end" font-family="system-ui,-apple-system,sans-serif" font-size="11" fill="#888780"&gt;€0&lt;/text&gt;
  &lt;text x="78" y="218" text-anchor="end" font-family="system-ui,-apple-system,sans-serif" font-size="11" fill="#888780"&gt;€5&lt;/text&gt;
  &lt;text x="78" y="159" text-anchor="end" font-family="system-ui,-apple-system,sans-serif" font-size="11" fill="#888780"&gt;€10&lt;/text&gt;
  &lt;text x="78" y="100" text-anchor="end" font-family="system-ui,-apple-system,sans-serif" font-size="11" fill="#888780"&gt;€15&lt;/text&gt;

  &lt;rect x="130" y="242.2" width="110" height="29.8" fill="#888780"&gt;&lt;/rect&gt;
  &lt;rect x="130" y="172.8" width="110" height="69.4" fill="#D85A30"&gt;&lt;/rect&gt;
  &lt;rect x="130" y="113.0" width="110" height="59.8" fill="#378ADD"&gt;&lt;/rect&gt;
  &lt;rect x="130" y="75.6" width="110" height="37.4" fill="#5DCAA5"&gt;&lt;/rect&gt;
  &lt;rect x="130" y="71.6" width="110" height="8" rx="3" fill="#5DCAA5"&gt;&lt;/rect&gt;

  &lt;text x="185" y="64" text-anchor="middle" font-family="system-ui,-apple-system,sans-serif" font-size="13" font-weight="600" fill="#2C2C2A"&gt;€15.30&lt;/text&gt;
  &lt;text x="185" y="292" text-anchor="middle" font-family="system-ui,-apple-system,sans-serif" font-size="12" fill="#5F5E5A"&gt;Redelivery&lt;/text&gt;

  &lt;rect x="320" y="262.4" width="110" height="9.6" fill="#888780"&gt;&lt;/rect&gt;
  &lt;rect x="320" y="221.6" width="110" height="40.8" fill="#D85A30"&gt;&lt;/rect&gt;
  &lt;rect x="320" y="187.4" width="110" height="34.2" fill="#378ADD"&gt;&lt;/rect&gt;
  &lt;rect x="320" y="149.8" width="110" height="37.6" fill="#5DCAA5"&gt;&lt;/rect&gt;
  &lt;rect x="320" y="145.8" width="110" height="8" rx="3" fill="#5DCAA5"&gt;&lt;/rect&gt;

  &lt;text x="375" y="138" text-anchor="middle" font-family="system-ui,-apple-system,sans-serif" font-size="13" font-weight="600" fill="#2C2C2A"&gt;€9.28&lt;/text&gt;
  &lt;text x="375" y="292" text-anchor="middle" font-family="system-ui,-apple-system,sans-serif" font-size="12" fill="#5F5E5A"&gt;PUDO redirect&lt;/text&gt;
&lt;/svg&gt;
&lt;/figure&gt;

&lt;p&gt;With a low-high range across assumptions:&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Scenario&lt;/th&gt;
&lt;th&gt;Low&lt;/th&gt;
&lt;th&gt;Central&lt;/th&gt;
&lt;th&gt;High&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Redelivery&lt;/td&gt;
&lt;td&gt;€11.00&lt;/td&gt;
&lt;td&gt;€15.30&lt;/td&gt;
&lt;td&gt;€19.60&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;PUDO redirect&lt;/td&gt;
&lt;td&gt;€6.50&lt;/td&gt;
&lt;td&gt;€9.28&lt;/td&gt;
&lt;td&gt;€12.10&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;Our central redelivery estimate of &lt;strong&gt;€15.30&lt;/strong&gt; sits within the €15-€20 range commonly cited in industry reports: a useful sanity check. But where those figures are self-reported averages with no decomposition, this model shows where the money goes. Route disruption is the largest single component, and it is almost entirely invisible in standard last-mile cost reporting.&lt;/p&gt;
&lt;p&gt;The PUDO path at &lt;strong&gt;€9.28&lt;/strong&gt; is meaningfully cheaper - not because the logistics are simpler, but because the cascade is shorter and the customer contact rate drops. The merchant commission is real but minor.&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id="what-this-means-for-geocoding-quality"&gt;What this means for geocoding quality&lt;/h3&gt;
&lt;p&gt;The model above assumes a generic failed delivery: recipient absent, address found, no particular navigation issue. In practice, not all failures are equal.&lt;/p&gt;
&lt;p&gt;When a failure is caused by a bad geocode: the driver is routed to the wrong area, cannot locate the address, and spends additional time on-site trying to find it. Two things happen. First, the on-site time (Component 1) increases. Second, and more importantly, the route disruption (Component 3) is amplified: more time lost on that stop means a larger downstream cascade. We quantified this routing impact separately - &lt;a href="https://coordable.co/blog/geocoding-routing-impact-france-2026/"&gt;see our routing simulation on 10,000 French addresses&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Various industry studies estimate that between 20% and 25% of delivery failures trace back to incorrect or unresolvable address data. Applied to the redelivery scenario:&lt;/p&gt;
&lt;p&gt;An operator running &lt;strong&gt;50,000 deliveries/month&lt;/strong&gt; at an &lt;strong&gt;8% failure rate&lt;/strong&gt;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;~4,000 failed deliveries per month&lt;/li&gt;
&lt;li&gt;~900 of those attributable to address or geocoding issues&lt;/li&gt;
&lt;li&gt;At €15.30 per failure: &lt;strong&gt;~€13,800/month in avoidable cost&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote&gt;
&lt;p&gt;The cost of running those same 50,000 addresses through a quality geocoding pipeline before dispatch: typically &lt;strong&gt;€20-€180&lt;/strong&gt;, depending on provider mix and cascading strategy.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr&gt;
&lt;h3 id="a-note-on-what-this-model-does-not-include"&gt;A note on what this model does not include&lt;/h3&gt;
&lt;p&gt;Two cost categories are deliberately excluded:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Customer churn.&lt;/strong&gt; A failed delivery affects repurchase intent: research consistently shows 20-25% of recipients do not reorder after a poor delivery experience. This is a real and significant cost, but it falls primarily on the retailer, not the carrier. An e-commerce operator building this model for their own operation should add it.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Return-to-depot logistics.&lt;/strong&gt; When a package cannot be delivered and is not redirected to a PUDO point, it must be returned to the depot or sender. We have not modeled this, as handling varies significantly by operator and contract structure.&lt;/p&gt;
&lt;p&gt;Both exclusions make the estimates above conservative.&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;&lt;em&gt;The figures above apply to dense urban B2C operations in a European context. Peri-urban and rural contexts change the calculus significantly: longer detours, fewer PUDO options, higher cascade costs per failed stop. We cover both in the next posts in this series: &lt;a href="https://coordable.co/blog/cost-failed-delivery-peri-urban-europe-2026/"&gt;peri-urban (€22.26)&lt;/a&gt;, &lt;a href="https://coordable.co/blog/cost-failed-delivery-rural-europe-2026/"&gt;rural (€42.14)&lt;/a&gt;, and a &lt;a href="https://coordable.co/blog/cost-failed-delivery-eu-vs-us-2026/"&gt;EU vs US comparison&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id="want-to-run-the-numbers-on-your-own-operation"&gt;Want to run the numbers on your own operation?&lt;/h3&gt;
&lt;p&gt;If you're working on geocoding quality or last-mile cost reduction, we'd be happy to talk through how address data affects your specific setup.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Coordable&lt;/strong&gt; helps logistics and operations teams build multi-provider geocoding pipelines that surface address issues before dispatch, not after. &lt;a href="mailto:contact@coordable.co"&gt;Get in touch&lt;/a&gt; - we're always up for a conversation about how geocoding quality affects delivery performance.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr&gt;
&lt;h3 id="sources-and-assumptions"&gt;Sources and assumptions&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Driver hourly wage (€17/h fully loaded)&lt;/strong&gt; - Median gross wage for delivery drivers in France: €12-€13/h (Indeed, Glassdoor, JOBTransport, 2025; CCN Transport routier logistique, driver pay scale as of May 1, 2025: €11.91-€19.27/h). Employer social contributions: average rate ~30% of gross wage in 2025, range 25-42% depending on company size and applicable exemptions (Urssaf / Staffmatch, 2025). Estimated fully loaded cost: €12.50/h x 1.30 = €16.25/h, rounded to €17/h.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Fuel cost (€0.18/km)&lt;/strong&gt; - Average diesel price in France, annual average 2025: €1.6186/L (prixdubaril.com / French Ministry of Ecological Transition, January 2026). Light commercial vehicle urban fuel consumption: 11L/100km. Fuel cost: €1.62 x 0.11 = €0.178/km, rounded to €0.18/km.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Vehicle depreciation (€0.12/km)&lt;/strong&gt; - French fiscal mileage allowance 2024-2025 (BOFiP, BOI-BAREME-000003), depreciation/maintenance component excluding fuel, light commercial vehicle.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;PUDO stop time (1.5-2 min vs 6-7 min residential)&lt;/strong&gt; - Parcelhive, &lt;em&gt;Last-Mile Delivery Economics: Save 50% with Lockers&lt;/em&gt;, 2025.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;PUDO merchant commission (€0.30-€0.50/parcel)&lt;/strong&gt; - Published rates from Pickup (Groupe La Poste), Mondial Relay, Relais Colis, 2025. Central value: €0.40.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Out-of-home delivery network size (500,000+ points in Europe)&lt;/strong&gt; - &lt;a href="https://nshift.com/blog/eu-parcel-locker-growth-in-2025-what-it-means-for-retailers"&gt;nShift, &lt;em&gt;EU Parcel Locker Growth in 2025&lt;/em&gt;&lt;/a&gt;, 2025.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Address-related failure rate (20-25%)&lt;/strong&gt; - Composite estimate, last-mile industry studies 2021-2024.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Human contact rate on failed deliveries (15-40%)&lt;/strong&gt; - &lt;a href="https://wismolabs.com/what-is-wismo/"&gt;WISMOlabs, &lt;em&gt;What Is WISMO? Definition, Meaning &amp;amp; Rate Benchmarks&lt;/em&gt;&lt;/a&gt;, 2025.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Dispatch/support agent wage (€15/h fully loaded)&lt;/strong&gt; - Estimate by analogy with CCN Transport routier, administrative/operational roles. Gross wage ~€12/h, fully loaded cost ~€15/h.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;First-attempt failure rate (8%)&lt;/strong&gt; - Composite estimate, last-mile industry reports 2021-2025.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Cascade delay assumption (3 stops x 4 min)&lt;/strong&gt; - Internal estimate, no published benchmark identified. Conservative assumption for a dense urban route of 20-30 stops.&lt;/p&gt;
&lt;/li&gt;
&lt;li&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;
&lt;/li&gt;
&lt;/ol&gt;</description><guid>https://coordable.co/fr/blog/cost-failed-delivery-urban-europe-2026/</guid><pubDate>Mon, 13 Apr 2026 10:00:00 GMT</pubDate></item><item><title>String Distance Metrics for Address Comparison: Levenshtein, Damerau, Jaro, and Jaro-Winkler</title><link>https://coordable.co/fr/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/fr/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/fr/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/fr/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/fr/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/fr/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/fr/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/fr/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/fr/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/fr/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/fr/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/fr/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/fr/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/fr/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/fr/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/fr/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/fr/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/fr/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/fr/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/fr/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/fr/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/fr/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/fr/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/fr/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/fr/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/fr/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/fr/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/fr/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/fr/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/fr/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/fr/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><guid>https://coordable.co/fr/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/fr/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/fr/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/fr/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/fr/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/fr/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/fr/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/fr/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/fr/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/fr/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/fr/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/fr/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/fr/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/fr/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/fr/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><guid>https://coordable.co/fr/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/fr/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/fr/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/fr/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/fr/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/fr/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/fr/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/fr/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/fr/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/fr/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/fr/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/fr/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><guid>https://coordable.co/fr/blog/how-to-reduce-geocoding-costs-by-67/</guid><pubDate>Sun, 08 Mar 2026 10:00:00 GMT</pubDate></item></channel></rss>