<?xml version="1.0" encoding="utf-8"?>
<?xml-stylesheet type="text/xsl" href="../assets/xml/rss.xsl" media="all"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Coordable (Posts about llm)</title><link>https://coordable.co/</link><description></description><atom:link href="https://coordable.co/categories/llm.xml" rel="self" type="application/rss+xml"></atom:link><language>en</language><copyright>Contents © 2026 &lt;a href="mailto:contact@coordable.co"&gt;Nikola Tesla&lt;/a&gt; </copyright><lastBuildDate>Mon, 22 Jun 2026 12:46:43 GMT</lastBuildDate><generator>Nikola (getnikola.com)</generator><docs>http://blogs.law.harvard.edu/tech/rss</docs><item><title>AI for address quality in geocoding: clean the input, verify the output</title><link>https://coordable.co/blog/ai-address-quality-clean-verify/</link><dc:creator>Julien Crétin</dc:creator><description>&lt;p&gt;&lt;em&gt;The hidden cost of addresses that look resolved but are not, and two ways AI closes it. Measured on 500 real French logistics addresses.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;A bad address rarely announces itself. The geocoder returns coordinates, the order looks clean, and the problem only surfaces when a driver is standing in front of the wrong building. In this benchmark, about one in seven of the addresses Google returned as resolved were not the right street and city, and none of them were flagged. By the time a wrong one surfaces it is a failed delivery, a redelivery, a support call, and a customer who remembers it. The expensive part of address quality is not the addresses you already know are wrong. It is the ones that pass silently, all the way to the van.&lt;/p&gt;
&lt;p&gt;Two things help, and both can be measured rather than assumed: cleaning the address before it is geocoded, and checking each result before you trust it. We tested both on 500 real French logistics addresses.&lt;/p&gt;
&lt;p&gt;There is also a strategic shift behind this. In our &lt;a href="https://coordable.co/blog/cut-geocoding-costs-79-percent-europe/"&gt;European benchmark&lt;/a&gt;, a cascade of free OpenStreetMap, HERE, and Google beat Google alone at roughly a fifth of the cost. In France, fully open-source geocoding already rivals a paid Google setup, a result we detail in a companion piece. When the provider you pick stops being the differentiator, what you feed the geocoder and how you verify what it returns becomes the differentiator instead. That is the layer this article is about.&lt;/p&gt;
&lt;figure style="max-width: 520px; margin: 2rem auto; text-align: center;"&gt;
&lt;img src="https://coordable.co/images/ai-address-quality-hero.png" alt="The pipeline: a messy input address is cleaned by an AI step, sent through a geocoder cascade of BAN, Photon, HERE and Google, then an AI verification step checks the result before it is trusted." style="width: 100%; height: auto;"&gt;
&lt;/figure&gt;

&lt;p&gt;&lt;strong&gt;Table of contents:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://coordable.co/blog/ai-address-quality-clean-verify/#why-this-matters"&gt;Why this matters&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://coordable.co/blog/ai-address-quality-clean-verify/#the-test"&gt;The test&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://coordable.co/blog/ai-address-quality-clean-verify/#cleaning-the-input"&gt;Cleaning the input&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://coordable.co/blog/ai-address-quality-clean-verify/#verifying-the-output"&gt;Verifying the output&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://coordable.co/blog/ai-address-quality-clean-verify/#honest-limitations"&gt;Honest limitations&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://coordable.co/blog/ai-address-quality-clean-verify/#what-this-means-for-your-stack"&gt;What this means for your stack&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://coordable.co/blog/ai-address-quality-clean-verify/#what-comes-next"&gt;What comes next&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://coordable.co/blog/ai-address-quality-clean-verify/#methodology-recap"&gt;Methodology recap&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://coordable.co/blog/ai-address-quality-clean-verify/#where-to-go-from-here"&gt;Where to go from here&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h4 id="why-this-matters"&gt;Why this matters&lt;/h4&gt;
&lt;p&gt;A national address registry is clean. Real logistics data is not. The addresses that flow through an order management system arrive in capital letters, with accents dropped, house numbers missing, street types abbreviated, and trailing noise from whatever field the data passed through on its way in. On the sample in this benchmark, roughly four addresses in five were fully uppercase, about one in four carried no house number, and a meaningful share had lost accents or been truncated mid word.&lt;/p&gt;
&lt;p&gt;Two instincts follow from that mess, and both are worth testing rather than assuming. The first is to clean the input before geocoding. The second is to trust that a provider which returns an answer has actually found the address. Our European benchmark showed the second instinct is dangerous, because the hard part of geocoding is not getting an answer, it is knowing whether the answer is right. This benchmark puts numbers on both instincts, using a language model in each role: once to clean, once to verify.&lt;/p&gt;
&lt;hr&gt;
&lt;h4 id="the-test"&gt;The test&lt;/h4&gt;
&lt;p&gt;We took 500 addresses from a real French logistics dataset, deliberately weighted toward the difficult cases that production data actually contains. We geocoded each one through five geocoders reached from a single API: the French national BAN, OpenStreetMap through Photon, OpenStreetMap through Nominatim, HERE, and Google. To isolate the effect of input quality, we ran every address in three versions: raw, cleaned with deterministic regex rules, and cleaned with a language model. That is about 7,500 geocoding calls in total.&lt;/p&gt;
&lt;p&gt;Scoring is the hard part, and it is where the language model earns its place a second time. Rather than measure distance to a reference coordinate, we built an LLM-based evaluator that qualifies each returned address against the one that was requested. Throughout this piece, a pass means the result resolves to the right street and the right city, the level of correctness that matters for routing and sectoring. House number precision is a separate question, and we treat it separately. We calibrated the evaluator against 25 hand checked cases before running it at scale, and it agreed with the human verdict on all 25.&lt;/p&gt;
&lt;p&gt;One aside worth keeping, because it is a common trap. We reached Nominatim through its public API, which is heavily throttled and capped, and on these messy inputs it resolved about 5%. A self-hosted Nominatim, given enough hardware, does considerably better, but at a real infrastructure cost. The same OpenStreetMap data through Photon resolved the large majority out of the box. The result you get from OpenStreetMap depends far more on the engine and how it is deployed than on the underlying data.&lt;/p&gt;
&lt;hr&gt;
&lt;h4 id="cleaning-the-input"&gt;Cleaning the input&lt;/h4&gt;
&lt;p&gt;Start with the cleaning instinct, because the result is blunt. Deterministic regex rules, uppercasing fixes, abbreviation expansion, separator normalization, did essentially nothing. Across every provider and every difficulty bucket, the rule cleaned input scored within noise of the raw input. Regex tidies the surface. It does not solve lost accents, truncations, or inline noise, which are the failures that actually break a geocode.&lt;/p&gt;
&lt;p&gt;The language model is a different story, but a more interesting one than a single headline number suggests. Pooled across providers, LLM cleaning lifted the pass rate from 83.9% to 86.8%, a gain of 2.9 points. That average hides almost everything that matters. The gain is concentrated on the hardest addresses and is close to zero everywhere else.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Pass rate by address type, pooled across all four providers&lt;/strong&gt;&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Address type&lt;/th&gt;
&lt;th&gt;Raw&lt;/th&gt;
&lt;th&gt;Rule cleaned&lt;/th&gt;
&lt;th&gt;LLM cleaned&lt;/th&gt;
&lt;th&gt;Gain from LLM&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Lost accents&lt;/td&gt;
&lt;td&gt;77.2%&lt;/td&gt;
&lt;td&gt;76.8%&lt;/td&gt;
&lt;td&gt;91.5%&lt;/td&gt;
&lt;td&gt;+14.3&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Truncated&lt;/td&gt;
&lt;td&gt;62.9%&lt;/td&gt;
&lt;td&gt;62.9%&lt;/td&gt;
&lt;td&gt;71.6%&lt;/td&gt;
&lt;td&gt;+8.6&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Hard cases overall&lt;/td&gt;
&lt;td&gt;68.7%&lt;/td&gt;
&lt;td&gt;68.8%&lt;/td&gt;
&lt;td&gt;74.8%&lt;/td&gt;
&lt;td&gt;+6.0&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Clean cases&lt;/td&gt;
&lt;td&gt;94.6%&lt;/td&gt;
&lt;td&gt;94.8%&lt;/td&gt;
&lt;td&gt;95.3%&lt;/td&gt;
&lt;td&gt;+0.7&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;All addresses&lt;/td&gt;
&lt;td&gt;83.9%&lt;/td&gt;
&lt;td&gt;84.0%&lt;/td&gt;
&lt;td&gt;86.8%&lt;/td&gt;
&lt;td&gt;+2.9&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;figure style="max-width: 520px; margin: 2rem auto; text-align: center;"&gt;
&lt;img src="https://coordable.co/images/ai-address-quality-cleaning.png" alt="Bar chart of the pass rate gain from LLM cleaning by address type: lost accents +14.3, truncated +8.6, hard cases +6.0, clean cases +0.7, against an average of +2.9." style="width: 100%; height: auto;"&gt;
&lt;/figure&gt;

&lt;p&gt;The ratio is the point. LLM cleaning buys about 6 points on the hard addresses and 0.7 of a point on the clean ones, roughly eight times more where the input is broken. On a clean address, cleaning it again is wasted compute. The single largest effect was on lost accents, the addresses where a character had been replaced by a placeholder, and it held across all four providers, as the next table shows.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Lost-accent addresses only: pass rate by provider, raw versus LLM cleaned&lt;/strong&gt;&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Provider&lt;/th&gt;
&lt;th&gt;Raw&lt;/th&gt;
&lt;th&gt;LLM cleaned&lt;/th&gt;
&lt;th&gt;Gain&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;BAN&lt;/td&gt;
&lt;td&gt;80.4%&lt;/td&gt;
&lt;td&gt;91.1%&lt;/td&gt;
&lt;td&gt;+10.7&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Photon&lt;/td&gt;
&lt;td&gt;75.0%&lt;/td&gt;
&lt;td&gt;89.3%&lt;/td&gt;
&lt;td&gt;+14.3&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;HERE&lt;/td&gt;
&lt;td&gt;78.6%&lt;/td&gt;
&lt;td&gt;92.9%&lt;/td&gt;
&lt;td&gt;+14.3&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Google&lt;/td&gt;
&lt;td&gt;75.0%&lt;/td&gt;
&lt;td&gt;92.9%&lt;/td&gt;
&lt;td&gt;+17.9&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;Two honest caveats keep this from being overstated. First, our model cleans conservatively: it repairs what is there and never invents what is missing. So on the quarter of addresses that arrive with no house number at all, cleaning lifts almost nothing, because there is nothing to recover. Cleaning repairs, it does not complete. Second, the size of the accent effect depends on how you measure it. A naive text comparison, sensitive to the mangled characters in the raw string, would report a swing closer to thirty points. The geocoders themselves already tolerate some of that damage, so the true lift, measured by whether the address actually resolved, is the +14 above, not +30.&lt;/p&gt;
&lt;p&gt;There is a larger point hiding in the regional detail. France is, for this purpose, an easy market: Latin script, a strong national registry, fairly regular conventions. We have run the same preprocessing in markets that are none of those things, and the effect is substantially larger. The messier the local conventions and the further from clean Latin script, the more input cleaning pays. Read the French numbers here as a conservative floor, not a ceiling.&lt;/p&gt;
&lt;hr&gt;
&lt;h4 id="verifying-the-output"&gt;Verifying the output&lt;/h4&gt;
&lt;p&gt;The cleaning question has a modest, targeted answer. The verification question has a bigger one, and it is the one our European benchmark flagged as the real unsolved problem: deciding whether a result is correct when you have no reference coordinate to check it against.&lt;/p&gt;
&lt;p&gt;The usual approaches fail in opposite directions, and a language model corrects both. A simple textual rule, does the input street and number appear in the returned address, is the standard mechanical check. It agrees with our evaluator on the large majority of cases. The disagreements fall into two revealing buckets.&lt;/p&gt;
&lt;p&gt;The first is false positives, where the mechanical rule says match but the result is wrong. The classic case is a returned address that shares the input's house number and city but sits on a different street: the tokens line up, the street does not, and a token rule waves it through. A language model compares street against street and rejects it. A token counter cannot.&lt;/p&gt;
&lt;p&gt;The second is false negatives, where the rule says no match but the result is fine. These are surface differences that a person reads straight through: minor spelling variants, trailing noise the rule cannot tell apart from the address, postal-format variants, or alternate but equivalent names for the same road. A language model reads through them too. A text rule scores them as failures and quietly discards good results.&lt;/p&gt;
&lt;figure style="max-width: 520px; margin: 2rem auto; text-align: center;"&gt;
&lt;img src="https://coordable.co/images/ai-address-quality-text-rule.png" alt="Three illustrative cases where a text matching rule and the AI evaluator disagree. In each the text rule is wrong and the evaluator is right: a wrong street accepted as a match, and two correct results wrongly rejected over a spelling variant and a CEDEX postal form." style="width: 100%; height: auto;"&gt;
&lt;/figure&gt;

&lt;p&gt;The cleanest illustration of why this matters is Google. Google returns a formatted address for every single input in our test, a 100% response rate. Our evaluator confirms the right street and city for 86% of them. The gap is not addresses Google failed to find, it is addresses Google answered without resolving: roughly one in seven Google responses looks resolved and is not. A hit rate, the most common metric teams track, scores all of these as successes. The silent miss is invisible until something downstream goes to the wrong place. This is exactly the layer a language model verifier replaces: it reads the input and the output together and flags the answer that arrived dressed as a success.&lt;/p&gt;
&lt;figure style="max-width: 520px; margin: 2rem auto; text-align: center;"&gt;
&lt;img src="https://coordable.co/images/ai-address-quality-silent-miss.png" alt="Google returns an answer for 100% of inputs, but only 86% are actually resolved to the right street and city; the remaining 14%, one in seven, look resolved but are not, the silent miss." style="width: 100%; height: auto;"&gt;
&lt;/figure&gt;

&lt;hr&gt;
&lt;h4 id="honest-limitations"&gt;Honest limitations&lt;/h4&gt;
&lt;p&gt;A few caveats matter and we want to name them.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;One dataset, one country, one snapshot.&lt;/strong&gt; These are 500 French addresses from a single logistics source, geocoded once. The directional findings are robust. The second decimal place is not, and another dataset would shift the exact percentages.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;The evaluator is itself a model.&lt;/strong&gt; We use a language model to grade language model cleaning, which is a circularity worth stating plainly. We mitigated it by calibrating the evaluator against hand checked cases and by holding its scoring format fixed, but a model graded benchmark is not a ground truth measured against surveyed coordinates. It measures whether a result reads as correct, which is the same judgment a dispatcher makes, not whether the pin is within a fixed distance of a registry point.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Pass means street and city, not the doorstep.&lt;/strong&gt; We score correctness at the level that matters for routing. House number precision is a separate axis with a different answer, and we keep it for the open-source piece. Read these numbers as resolution quality, not rooftop accuracy.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Conservative cleaning by design.&lt;/strong&gt; Our model never fabricates missing data. That is the right choice for trust, but it caps the cleaning lift: an address with no house number cannot be completed, only tidied.&lt;/p&gt;
&lt;hr&gt;
&lt;h4 id="what-this-means-for-your-stack"&gt;What this means for your stack&lt;/h4&gt;
&lt;p&gt;If you are running geocoding on real, messy address data, four things follow.&lt;/p&gt;
&lt;p&gt;First, &lt;strong&gt;drop deterministic cleaning as a quality lever&lt;/strong&gt;. Regex normalization is fine for storage hygiene, but on these results it moves geocoding quality by nothing. Do not expect a rules pass to recover failed addresses.&lt;/p&gt;
&lt;p&gt;Second, &lt;strong&gt;treat LLM cleaning as a targeted instrument, not a blanket step&lt;/strong&gt;. The gain is real but it lives almost entirely on the hard fraction of your data. Clean the addresses your pipeline already struggles with, the ones with dropped accents, truncations, and inline noise, and leave the clean majority alone. Cleaning every address spends compute to buy a fraction of a point on the ones that did not need it.&lt;/p&gt;
&lt;p&gt;Third, &lt;strong&gt;expect the payoff to scale with how hard your market is&lt;/strong&gt;. France is a conservative case. If your addresses come from markets with non Latin scripts, weaker registries, or looser conventions, the cleaning lift is larger, sometimes much larger. The harder the market, the higher the return on a local cleaning model.&lt;/p&gt;
&lt;p&gt;Fourth, &lt;strong&gt;stop trusting your hit rate, and verify the output&lt;/strong&gt;. A returned address is not a resolved address. The most useful thing a language model does in a geocoding pipeline is not cleaning the input, it is reading each result against its input and catching the silent failures that confidence scores and token rules let through. That verification layer is what lets a cascade run unattended without quietly sending packages down the wrong street.&lt;/p&gt;
&lt;hr&gt;
&lt;h4 id="what-comes-next"&gt;What comes next&lt;/h4&gt;
&lt;p&gt;We have kept one half of the story for its own piece. This benchmark measured correctness at the street and city level, where fully open-source geocoding in France is already strong. The rooftop question, how precisely each provider places the house number, and how far the national BAN plus OpenStreetMap can carry a stack with no paid API at all, is a different and equally surprising result. That is the next post.&lt;/p&gt;
&lt;hr&gt;
&lt;h4 id="methodology-recap"&gt;Methodology recap&lt;/h4&gt;
&lt;p&gt;For readers who want to audit the analysis:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Dataset: 500 addresses from a single real French logistics source, weighted toward difficult cases (uppercase, lost accents, missing house numbers, truncations, lieu-dit and point-of-interest forms).&lt;/li&gt;
&lt;li&gt;Geocoders: BAN, OpenStreetMap via Photon, OpenStreetMap via the public Nominatim API, HERE, Google, all reached through one orchestration API.&lt;/li&gt;
&lt;li&gt;Input versions: raw, deterministic rule cleaning, and language model cleaning. The cleaning model is conservative and never invents missing data.&lt;/li&gt;
&lt;li&gt;Scoring: an LLM-based evaluator scores each result on house number, street name, postal code, and city. A pass requires the correct street and the correct city. It was calibrated against 25 hand checked cases, with 25 of 25 agreement, before running at scale.&lt;/li&gt;
&lt;li&gt;Volume: about 7,500 geocoding calls across the five providers and three input versions.&lt;/li&gt;
&lt;li&gt;We report verdicts and aggregate rates only. No individual customer address appears in this article.&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h4 id="where-to-go-from-here"&gt;Where to go from here&lt;/h4&gt;
&lt;p&gt;If you are improving a geocoding stack, these go deeper on the pieces this benchmark touches:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;The parent benchmark: &lt;a href="https://coordable.co/blog/cut-geocoding-costs-79-percent-europe/"&gt;how we cut geocoding costs by 79% across Europe&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Country deep dive: &lt;a href="https://coordable.co/country-analysis/best-geocoding-providers-france/"&gt;best geocoding providers in France&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Provider guides: &lt;a href="https://coordable.co/provider/google-maps-geocoding-api/"&gt;Google Maps Geocoding API&lt;/a&gt;, &lt;a href="https://coordable.co/provider/here-geocoding-api/"&gt;HERE Geocoding API&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;p&gt;&lt;em&gt;Coordable builds multi-provider geocoding cascades with a cleaning and verification layer at every step. If you already run a geocoding stack, we help you improve what you have in place, adding local cleaning and verification models tuned to the markets where generic providers struggle most. &lt;a href="https://coordable.co"&gt;Talk to us about your stack&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;</description><category>address quality</category><category>benchmark</category><category>cleaning</category><category>france</category><category>llm</category><category>verification</category><guid>https://coordable.co/blog/ai-address-quality-clean-verify/</guid><pubDate>Mon, 22 Jun 2026 09:00:00 GMT</pubDate></item></channel></rss>