Guides · 7 min read

Product matching without EAN or GTIN: why it's the hard part

With barcodes, matching products across e-shops is a database join. Without them, it's the hardest problem in e-commerce data, and the reason most “price monitoring” quietly stops at the shops that make it easy.

Every tool that compares products across shops rests on one assumption: that you can tell when two listings are the same product. Price intelligence, market analytics, aggregators, repricing engines, all of them. If every shop published a clean EAN or GTIN for every product, that would be a solved problem. You would join two tables on a barcode column and go home.

Then you leave big-brand electronics, and the assumption collapses.

In short: around four in ten product matches have no shared EAN or GTIN across shops. In our production data, 40.6% of 9 million confirmed matches between Czech e-shops share no published EAN or SKU (October 2026), from 7% in bathroom fittings to 73% in musical instruments. Name, image and price similarity each fail on their own. What works is combining every signal, then validating each candidate pair with an independent yes/no verdict.

See for yourself

Below are four pairs of real listings from Czech e-shops, scraped from production and anonymized, photos included. No electronics: a dish rack, a trash bin, a bundt pan, a garden swing. You have every advantage software doesn't: context, intuition, and the ability to squint. Same product, or not?

Same product? You decide · 1 / 4
Design & living e-shop
Kave Home Bílý odkapávač na nádobí Extend Steel

Kave Home Bílý odkapávač na nádobí Extend Steel

2 699 Kč
Kitchen specialist
Odkapávač na nádobí EXTEND 851692 36 x 32 cm, rozšiřitelný, béžová, nerezová ocel, Joseph Joseph

Odkapávač na nádobí EXTEND 851692 36 x 32 cm, rozšiřitelný, béžová, nerezová ocel, Joseph Joseph

2 859 Kč

Where the identifiers went

EANs aren't missing because shops are lazy. They're missing structurally:

  • Private labels and own brands often never get a public barcode. The shop is the only seller, so nobody registers one.
  • Long-tail verticals like furniture, fashion, cosmetics and spare parts run on supplier codes and internal SKUs that mean nothing outside one warehouse.
  • Resellers rename products. The trash bin in the quiz is a brandless “ODPADKOVÝ KOŠ 54 l” in one shop and a Curver Verto in the other, and the two listings even disagree about who manufactures it. Neither shop is wrong; there is simply no shared naming authority.
  • Even existing EANs go unpublished. Plenty of shops have the barcode in their ERP and never print it on the product page.

This is not a corner case. Across 9 million product matches our engine has confirmed between Czech e-shops, 40.6% share no published EAN or SKU, and the further from electronics, the higher it gets. A tool that only joins on barcodes misses four in ten matches.

The further you go from flagship electronics, the more of the catalog becomes invisible to identifier-based matching. The products where price comparison would be most valuable, the ones nobody else is watching, are exactly the ones without a join key.

Why the obvious fixes fail

The first instinct is fuzzy matching on names: normalize them, compute a string distance, set a threshold. The quiz above is why that doesn't survive contact with reality:

  • Names lie in both directions. The two bundt pan listings agree on 63% of their letters and are different products. The trash bin pair agrees on barely half and is one product. Electronics has the same disease: a Logitech MX Master 3 and 3S differ by one character and a full generation.
  • Prices cluster. Colorways, generations and pack sizes of related products all live in the same price range. A small gap can mean a competitor's discount, or a different product.
  • Images betray you both ways. Shops reuse manufacturer renders for different variants, and photograph the same product on different backgrounds. The bundt pan pair scored 86% image similarity and is two different products.

Whatever threshold you pick, some real pair sits on the wrong side of it. Tighten it and you lose true matches. Loosen it and you invent false ones, which are the expensive kind: a repricing engine that thinks the caramel pan is the graphite pan will happily misprice both.

What actually works

In data-engineering terms this is entity resolution, or record linkage, applied to product catalogs. No single signal is trustworthy, so don't trust a single signal. Matching that works in the long tail reads the product the way a human does: name, parameters, images, description, price context, and any identifier fragments (MPN, model code, supplier SKU) that happen to exist. A model code buried in a title is evidence, even when the barcode field is empty. Each signal contributes; none of them alone gets to decide.

Similarity proposes. Validation decides. The second half, the part most matching projects skip, is a final yes/no verdict on each candidate pair, made independently of the similarity scores that nominated it. That verdict is what keeps the colorway and variant traps out of your data. It's also exactly what you saw after each quiz answer: the recorded reasoning, not a threshold.

How to match products without EAN: 5 steps

  1. Use identifiers where they exist. A shared EAN, GTIN or MPN is the cheapest evidence there is. Just don't expect it to cover the catalog.
  2. Extract attributes from titles and descriptions. Brand, model code, size, color, pack size. Without structured attributes there is nothing to compare.
  3. Generate candidates from combined signals. Fuzzy name matching, attributes, image similarity and price context together. A candidate is a proposal, not a match.
  4. Validate every candidate pair independently. A yes/no verdict that looks hard at variants: color, size, generation, pack. This is where data quality is decided.
  5. Record the reasoning. Store why each verdict was made, so a wrong pair can be traced and fixed.

This is how matching works in DeepScout (deepscout.ai) under the hood, and it's why it doesn't need EANs. 88,646 confirmed matches between two Czech electronics retailers were built this way, including all the products those two shops never published a barcode for. You can watch the same engine work through live examples on the DeepScout API page, or call it from Claude and other AI agents through the DeepScout MCP server.

$ claude mcp add --transport http deepscout https://mcp.deepscout.ai/mcp

Read next: Why scrapers rot: build vs buy when you scrape hundreds of shops. Matching needs the data first, and keeping hundreds of shops scraped correctly is its own problem.

Get started with the API

Scrape any e-shop into clean product JSON, then match it against the shops you pick. No EAN or barcode required. Usage-based, from €0.40 per 1,000 products.

To make it all work

We use marketing and analytics cookies to learn how you use the product. That helps us improve it and show you relevant ads.

Product matching without EAN or GTIN: how it works (2026 guide)