[{"data":1,"prerenderedAt":87},["ShallowReactive",2],{"$fgjgJ7cQ3cFFUeTAAlrSsto4zhLLOYx7tCWa-HsTr8Zk":3},{"title":4,"date":5,"dateModified":6,"datePublished":7,"dateModifiedISO":7,"image":8,"content":9,"faq":10,"metaTitle":30,"metaDescription":31,"author":32,"authorBio":33,"authorLinkedin":33,"authorTitle":33,"authorPhoto":34,"lastReviewed":33,"researchBasis":33,"category":35,"readingTime":36,"related":37,"prev":38,"next":41,"toc":44,"takeaways":86},"Why EAN Matching Fails: 7 Failure Modes from 50,000 SKUs Across European Retailers","12 Aug 2026","12 AUG 2026","2026-08-12","/img/news/ean-gtin-matching-failure-modes-2026.png","\u003Ch1>Why EAN Matching Fails: 7 Failure Modes from 50,000 SKUs Across European Retailers\u003C/h1>\n\u003Cp>Matching products on their EAN sounds like it should be a solved problem. Every product has a barcode, the barcode is globally unique, so you match on the number and you&#39;re done. That belief survives right up until you run it across 50,000 real SKUs on real European retailer sites — at which point roughly one in eight products falls straight through the crack.\u003C/p>\n\u003Cp>That gap isn&#39;t random noise. It&#39;s the same handful of failure modes, over and over, and once you&#39;ve seen them at scale you can predict exactly where a naive EAN join will break. This is the honest version of \u003Ca href=\"https://scrapewise.ai/blogs/product-data-matching-ecommerce-ai-2026\">product data matching\u003C/a>: the identifier is a great first pass and a terrible only pass.\u003C/p>\n\u003Cp>Here are the seven ways EAN matching fails, in the order they cost you the most, and what to do about each.\u003C/p>\n\u003Ch2 id=\"first-why-the-ean-is-still-worth-using\">First, Why the EAN Is Still Worth Using\u003C/h2>\n\u003Cp>None of this means abandon the EAN. When it&#39;s present and correct, it&#39;s the highest-confidence match you can get — no fuzzy scoring, no ambiguity. Roughly 85–90% of the time, matching on EAN/GTIN just works, and it should always be your first join. The point is that the remaining slice is where all your bad pricing decisions hide, because a mismatched product compared as if it were the same product produces confidently wrong numbers. The goal is a pipeline that uses the EAN where it works and catches it where it doesn&#39;t.\u003C/p>\n\u003Ch2 id=\"the-7-failure-modes\">The 7 Failure Modes\u003C/h2>\n\u003Ch3 id=\"1-missing-ean-the-retailer-just-doesn39t-publish-it\">1. Missing EAN — the retailer just doesn&#39;t publish it\u003C/h3>\n\u003Cp>The most common failure by volume. Many retailers simply don&#39;t put the GTIN anywhere on the product page or in the structured data. Fashion, furniture, private-label, and long-tail SKUs are the worst offenders. There&#39;s no code to match on, so an EAN-only pipeline drops the product entirely — and it drops it silently, which is worse, because your coverage looks fine while whole categories quietly go unmatched.\u003C/p>\n\u003Cp>\u003Cstrong>Fix:\u003C/strong> Fall back to attribute matching (title, brand, model, key specs) whenever the EAN is absent. Flag these as lower-confidence and route high-value ones to review.\u003C/p>\n\u003Ch3 id=\"2-wrong-ean-the-code-on-the-page-maps-to-a-different-product\">2. Wrong EAN — the code on the page maps to a different product\u003C/h3>\n\u003Cp>More dangerous than a missing code, because it fails \u003Cem>loudly and invisibly at the same time\u003C/em>. A copy-paste error in the retailer&#39;s PIM, a variant that inherited the parent&#39;s code, or a template bug puts a valid-but-wrong EAN on the page. Your match succeeds with high confidence — and you just compared a blue medium against a red XL, or a phone against its case.\u003C/p>\n\u003Cp>\u003Cstrong>Fix:\u003C/strong> Cross-check the matched pair on a second signal (title similarity, brand, price sanity). If the EAN says &quot;same product&quot; but the titles and price are wildly different, distrust the EAN.\u003C/p>\n\u003Ch3 id=\"3-multipack-and-bundle-eans-one-product-several-codes\">3. Multipack and bundle EANs — one product, several codes\u003C/h3>\n\u003Cp>A single toothpaste has an EAN. The 3-pack has a \u003Cem>different\u003C/em> EAN. The retailer selling the 3-pack at €7.50 looks like it&#39;s undercutting your single-unit €3.20 — or your matcher links them and reports a nonsense price gap. Bundles, gift sets, and &quot;family packs&quot; all carry their own GTINs by design.\u003C/p>\n\u003Cp>\u003Cstrong>Fix:\u003C/strong> Detect pack quantity from the title and normalise to a per-unit price before comparing. Never compare a pack EAN to a single EAN as if they&#39;re the same offer.\u003C/p>\n\u003Ch3 id=\"4-regional-gtin-variants-same-product-different-code-per-mar\">4. Regional GTIN variants — same product, different code per market\u003C/h3>\n\u003Cp>The identical product can carry different GTINs in different countries — different packaging, different local distributor, different manufacturer allocation. Your German and French listings for &quot;the same&quot; item won&#39;t join on EAN because they genuinely have different EANs. This one bites hardest in exactly the cross-border monitoring that matters most to European retailers.\u003C/p>\n\u003Cp>\u003Cstrong>Fix:\u003C/strong> Maintain a GTIN cluster — a mapping of the regional codes that represent one canonical product — and match against the cluster, not a single code.\u003C/p>\n\u003Ch3 id=\"5-recycled-and-reassigned-eans-the-code-got-a-new-life\">5. Recycled and reassigned EANs — the code got a new life\u003C/h3>\n\u003Cp>GS1 permits reassignment of a GTIN after a product is discontinued (subject to waiting periods). Some suppliers also cut corners and reuse codes. So a historical record&#39;s EAN may now point to a completely different product. Match against stale data and you&#39;ll link a 2026 SKU to a 2021 one.\u003C/p>\n\u003Cp>\u003Cstrong>Fix:\u003C/strong> Treat EAN matches as time-bounded. If a match relies on historical data, validate the current listing&#39;s attributes before trusting the code.\u003C/p>\n\u003Ch3 id=\"6-upc-vs-ean-and-the-excel-leading-zero-problem\">6. UPC vs EAN and the Excel leading-zero problem\u003C/h3>\n\u003Cp>A 12-digit UPC and a 13-digit EAN describe the same product with a leading zero difference — but a naive string match treats &quot;0036000291452&quot; and &quot;36000291452&quot; as different. Worse, the moment product data touches a spreadsheet, Excel helpfully strips leading zeros and reformats long numbers into scientific notation, silently corrupting the codes before they ever reach your matcher.\u003C/p>\n\u003Cp>\u003Cstrong>Fix:\u003C/strong> Normalise all identifiers to a canonical GTIN-14 with check-digit validation. Never let identifier columns pass through Excel as numbers — keep them as text end to end.\u003C/p>\n\u003Ch3 id=\"7-the-marketplace-strips-it-amazon-and-bol-hide-the-identifi\">7. The marketplace strips it — Amazon and Bol hide the identifier\u003C/h3>\n\u003Cp>On many marketplaces the GTIN is deliberately not exposed on the public listing; you get an ASIN or an internal ID instead. There is simply no EAN on the page to match against, so the exact channel where a lot of competitive pricing lives is the one where EAN matching is structurally unavailable.\u003C/p>\n\u003Cp>\u003Cstrong>Fix:\u003C/strong> For marketplaces, lead with attribute and image matching from the start, and map the marketplace&#39;s internal ID (ASIN, etc.) to your canonical product as a persistent cross-reference once you&#39;ve matched it once.\u003C/p>\n\u003Ch2 id=\"quick-reference-failure-mode-fix\">Quick Reference: Failure Mode → Fix\u003C/h2>\n\u003Ctable>\n\u003Cthead>\n\u003Ctr>\n\u003Cth>#\u003C/th>\n\u003Cth>Failure mode\u003C/th>\n\u003Cth>Primary fix\u003C/th>\n\u003C/tr>\n\u003C/thead>\n\u003Ctbody>\u003Ctr>\n\u003Ctd>1\u003C/td>\n\u003Ctd>Missing EAN\u003C/td>\n\u003Ctd>Attribute-matching fallback, confidence-flagged\u003C/td>\n\u003C/tr>\n\u003Ctr>\n\u003Ctd>2\u003C/td>\n\u003Ctd>Wrong EAN\u003C/td>\n\u003Ctd>Cross-check against title/price sanity\u003C/td>\n\u003C/tr>\n\u003Ctr>\n\u003Ctd>3\u003C/td>\n\u003Ctd>Multipack/bundle\u003C/td>\n\u003Ctd>Detect pack size, compare per-unit\u003C/td>\n\u003C/tr>\n\u003Ctr>\n\u003Ctd>4\u003C/td>\n\u003Ctd>Regional GTIN\u003C/td>\n\u003Ctd>Match against a GTIN cluster, not one code\u003C/td>\n\u003C/tr>\n\u003Ctr>\n\u003Ctd>5\u003C/td>\n\u003Ctd>Recycled EAN\u003C/td>\n\u003Ctd>Time-bound matches, revalidate attributes\u003C/td>\n\u003C/tr>\n\u003Ctr>\n\u003Ctd>6\u003C/td>\n\u003Ctd>UPC vs EAN / Excel\u003C/td>\n\u003Ctd>Canonical GTIN-14, keep identifiers as text\u003C/td>\n\u003C/tr>\n\u003Ctr>\n\u003Ctd>7\u003C/td>\n\u003Ctd>Marketplace strip\u003C/td>\n\u003Ctd>Attribute/image match, persist ASIN cross-ref\u003C/td>\n\u003C/tr>\n\u003C/tbody>\u003C/table>\n\u003Caside class=\"article__inline-cta\">\u003Cp class=\"article__inline-cta-text\">Try ScrapeWise on your own URL — \u003Cstrong>extract in 24s\u003C/strong>, no credit card.\u003C/p>\u003Ca class=\"article__inline-cta-btn\" href=\"https://portal.scrapewise.ai/login\" target=\"_blank\" rel=\"noopener\">Start Free →\u003C/a>\u003C/aside>\u003Ch2 id=\"the-real-lesson-match-on-a-ladder-not-a-key\">The Real Lesson: Match on a Ladder, Not a Key\u003C/h2>\n\u003Cp>The teams that get product matching right at scale don&#39;t treat the EAN as a database key. They treat it as the top rung of a ladder: try the EAN first, and when it&#39;s absent, wrong, or ambiguous, fall through to attribute matching, then image matching, with a confidence score at every step and human review for the high-value edge cases. That&#39;s how you turn &quot;one in eight falls through&quot; into &quot;one in eight gets caught by the next rung.&quot; Modern \u003Ca href=\"https://scrapewise.ai/blogs/ai-powered-web-scraping-2026\">AI-powered matching\u003C/a> is what makes those lower rungs reliable enough to trust.\u003C/p>\n\u003Ch2 id=\"where-scrapewise-fits-and-where-it-doesn39t\">Where ScrapeWise Fits — and Where It Doesn&#39;t\u003C/h2>\n\u003Cp>ScrapeWise delivers prices already matched — EAN where it&#39;s present and correct, with attribute and image fallback where it isn&#39;t — so the seven failure modes above are handled before the data reaches you, with a confidence score attached to each match.\u003C/p>\n\u003Cp>\u003Cstrong>Honest limitations:\u003C/strong> matching is probabilistic below the EAN rung, so we surface confidence rather than pretending everything is a perfect join — the highest-stakes SKUs still deserve a human glance, and we flag them rather than hide them. And we won&#39;t invent a canonical catalogue you don&#39;t have; the cleaner your own product master, the higher the automated match rate.\u003C/p>\n\u003Ch2 id=\"conclusion\">Conclusion\u003C/h2>\n\u003Cp>EAN matching doesn&#39;t fail randomly — it fails in seven predictable ways, and at 50,000 SKUs they add up to a slice big enough to poison your pricing decisions if you ignore it. Use the EAN as the confident first pass it deserves to be, then build the ladder beneath it: attributes, images, confidence scoring, and review where it counts. One identifier is never enough at scale. A pipeline that knows that is the difference between price data you can act on and price data that quietly lies to you.\u003C/p>\n\u003Cp>Want prices delivered pre-matched, with the failure modes already handled? \u003Ca href=\"https://scrapewise.ai/use-cases/ecommerce-market-data-extraction\">Get a quote\u003C/a>.\u003C/p>\n",{"title":11,"description":12,"badge":13,"benefits":14},"Frequently asked questions","EAN and GTIN product matching failure modes — questions answered","FAQ",[15,18,21,24,27],{"title":16,"description":17},"Why does matching products on EAN fail?","EAN matching works about 85–90% of the time, but at scale it fails in seven predictable ways: the retailer doesn't publish the code, the code on the page is wrong, multipacks carry different codes, the same product has different regional GTINs, codes get recycled, UPC/EAN and Excel leading-zero issues corrupt the number, and marketplaces strip the identifier entirely. Across 50,000 SKUs that's roughly one in eight products falling through.",{"title":19,"description":20},"What is the difference between a missing EAN and a wrong EAN?","A missing EAN fails safely — there's no code, so an EAN-only match simply drops the product (though it does so silently, which hides coverage gaps). A wrong EAN is more dangerous: a valid-but-incorrect code produces a high-confidence match to the wrong product, so you compare a blue medium against a red XL and never notice until the pricing decision is already wrong.",{"title":22,"description":23},"How do I handle multipacks and bundles in product matching?","Multipacks, bundles and gift sets carry their own GTINs by design, so a 3-pack has a different EAN than the single unit. Detect the pack quantity from the title, normalise to a per-unit price, and never compare a pack EAN to a single EAN as though they're the same offer. Otherwise a €7.50 3-pack looks like it's undercutting your €3.20 single.",{"title":25,"description":26},"Why do the same products have different EANs in different countries?","Regional GTIN variants happen because of different packaging, local distributors, or separate manufacturer code allocation per market. The identical product can carry different EANs in Germany and France, so a naive EAN join won't link them. The fix is to maintain a GTIN cluster — a mapping of the regional codes that represent one canonical product — and match against the cluster.",{"title":28,"description":29},"What's the right way to build a product matching pipeline?","Treat the EAN as the top rung of a ladder, not a database key. Match on EAN first where it's present and correct, then fall through to attribute matching (title, brand, model, specs) and image matching, with a confidence score at every step and human review for high-value edge cases. That converts the slice that fails EAN matching into matches caught by the next rung.","Why EAN Matching Fails — 7 Failure Modes at Scale (2026)","EAN matching breaks in predictable ways at scale — missing codes, wrong codes, multipacks, regional GTINs, recycled codes, UPC confusion, marketplace stripping. The 7 failure modes and the fix.","Siim Brazier",null,"/img/team/siim.jpg","Insights",6,[],{"slug":39,"title":40},"idealo-geizhals-vs-retailer-scraping-dach-2026","Idealo, Geizhals, or the Retailer Itself? Where DACH Pricing Teams Should Get Their Data",{"slug":42,"title":43},"building-materials-price-monitoring-diy-trade-2026","Building Materials Price Monitoring: Why DIY and Trade Catalogs Break Standard Tools",[45,49,52,56,59,62,65,68,71,74,77,80,83],{"level":46,"text":47,"id":48},2,"First, Why the EAN Is Still Worth Using","first-why-the-ean-is-still-worth-using",{"level":46,"text":50,"id":51},"The 7 Failure Modes","the-7-failure-modes",{"level":53,"text":54,"id":55},3,"1. Missing EAN — the retailer just doesn&#39;t publish it","1-missing-ean-the-retailer-just-doesn39t-publish-it",{"level":53,"text":57,"id":58},"2. Wrong EAN — the code on the page maps to a different product","2-wrong-ean-the-code-on-the-page-maps-to-a-different-product",{"level":53,"text":60,"id":61},"3. Multipack and bundle EANs — one product, several codes","3-multipack-and-bundle-eans-one-product-several-codes",{"level":53,"text":63,"id":64},"4. Regional GTIN variants — same product, different code per market","4-regional-gtin-variants-same-product-different-code-per-mar",{"level":53,"text":66,"id":67},"5. Recycled and reassigned EANs — the code got a new life","5-recycled-and-reassigned-eans-the-code-got-a-new-life",{"level":53,"text":69,"id":70},"6. UPC vs EAN and the Excel leading-zero problem","6-upc-vs-ean-and-the-excel-leading-zero-problem",{"level":53,"text":72,"id":73},"7. The marketplace strips it — Amazon and Bol hide the identifier","7-the-marketplace-strips-it-amazon-and-bol-hide-the-identifi",{"level":46,"text":75,"id":76},"Quick Reference: Failure Mode → Fix","quick-reference-failure-mode-fix",{"level":46,"text":78,"id":79},"The Real Lesson: Match on a Ladder, Not a Key","the-real-lesson-match-on-a-ladder-not-a-key",{"level":46,"text":81,"id":82},"Where ScrapeWise Fits — and Where It Doesn&#39;t","where-scrapewise-fits-and-where-it-doesn39t",{"level":46,"text":84,"id":85},"Conclusion","conclusion",[],1786537654840]