Product matching: how to match the same SKU across stores and marketplaces
Product matching links listings of the same item across stores. Why it is hard, the main methods, how to measure match quality, and a practical workflow.
Product matching is the process of deciding which listings, from different stores or marketplaces, describe the same physical product. A good product matching system links "the same item, same variant, same pack size" across sources and keeps anything it is unsure about out of the match until a person or a verification step confirms it.
You cannot compare prices, check minimum advertised price (MAP) compliance or find assortment gaps until you know which listings are the same product.
What is product matching?
Product matching (also called SKU matching or product entity matching) takes two or more product records and returns one of three answers: they are the same product, they are different products, or the evidence is not strong enough to decide.
The same product often sells at once through a brand's own store, Amazon, Shopee, Tokopedia and Lazada, under different titles, by different sellers, with different photos. Matching across marketplaces is how you see it as one item instead of many unrelated rows.
The level matters. "Same product line" (one shampoo range) is not "same SKU" (that shampoo, 400 ml, single bottle). Price comparison and most other business uses need the SKU level.
Why is product matching hard?
If every listing carried a correct, shared identifier, matching would be a lookup. In practice, listings disagree in many ways:
- Different titles. Sellers add keywords, promotions or local-language terms, so two titles for one product can share few words.
- Bundles and multipacks. A listing for "3 x 400 ml" is not the same SKU as a single 400 ml bottle, even though the product name is identical. GS1 US notes that a case or set pack is identified by its own GTIN-14 rather than the single-unit GTIN (GS1 US).
- Pack sizes and variants. Color, size, flavor and volume each change the SKU. Google's Merchant Center guidance says each product and each variant has its own GTIN (Google Merchant Center Help). One marketplace listing, however, may hold many variants under one page, while another store lists each variant separately.
- Missing or wrong identifiers. Many listings have no GTIN at all. Google notes that store brands and products sold only by one retailer generally lack a GTIN, and that "accurate matching to products can't be assured when GTIN is missing" (Google Merchant Center Help).
- Platform-specific IDs. An Amazon ASIN is an identifier Amazon assigns within its own catalog, and it usually does not match a UPC or EAN (Plytix glossary). Each marketplace has its own item IDs, which do not carry over to other sites.
- Repurposed listings. A seller may edit an old listing to sell a different product while keeping its URL and reviews, so a match that was correct last month can be wrong today.
- Different units and currencies. Prices may be per item or per pack, sizes in grams or ounces, in different currencies. Two listings can be the same SKU and still need alignment before any comparison.
Research benchmarks reflect this difficulty. The WDC Products benchmark from the University of Mannheim tests matchers on "corner cases" and on products not seen during training, and its authors report that all the matching systems they tested "struggle with unseen entities to varying degrees" (Peeters, Der and Bizer, arXiv).
What are the main product matching methods?
Most production systems combine several methods, because each one is reliable in some cases and weak in others.
Identifier matching (GTIN, UPC, EAN, ASIN, MPN)
Match records that share an identifier. GTIN-12 is the number in a UPC-A barcode, and GTIN-13 is the same as an EAN (GS1 US). Where a GTIN is missing, brand plus manufacturer part number (MPN) is the usual fallback (Google Merchant Center Help). This is fast and precise when the code is present and correct, but a wrong code creates a confident wrong match.
Attribute and rule matching
Extract attributes (brand, model, volume, color, pack count) and write rules such as "same brand, model, volume and pack count". Rules are easy to audit, but they break when fields are missing or written differently ("400ml", "0.4 L"), so they depend on normalization.
Text and image similarity
Compare titles, descriptions or photos. These find candidates when identifiers are missing, and images help when titles are in different languages. Both confuse close neighbors: two sizes of one product have nearly identical titles, and sellers often reuse the brand's photos across SKUs.
Embeddings and LLM-based matching, with verification
Embedding models turn text or images into vectors so that similar items sit close together, and the closest vectors can be found with cosine similarity (Sentence Transformers documentation). This retrieves likely candidates from a large catalog. A large language model can then decide each candidate pair. Peeters and Bizer found that the best LLMs needed no or only a few training examples to perform comparably to models fine-tuned on thousands of examples, but also that there is no single best prompt: prompts need tuning per model and dataset (arXiv). Because an LLM can still be wrong, a verification step (hard checks on pack size, variant and units, plus human review of uncertain pairs) should sit after it.
Comparison of product matching methods
| Method | Works best when | Main weakness | Cost to run | Explainability |
|---|---|---|---|---|
| Identifier match (GTIN, UPC, EAN, MPN) | Both listings carry a correct shared code | No help when codes are missing; wrong codes give confident errors | Very low | High: the code matches or not |
| Platform IDs (ASIN, marketplace item IDs) | Matching within one platform | Do not carry across platforms | Very low | High |
| Attribute and rule matching | Attributes are present and normalized | Breaks on missing or inconsistently written fields | Low | High: the rule that fired is visible |
| Text similarity | Finding candidates without identifiers | Confuses sizes, variants and bundles | Low | Medium |
| Image similarity | Titles differ by language or are full of keywords | Look-alike variants; reused brand photos | Medium | Low to medium |
| Embeddings plus LLM, with verification | Messy, multilingual listings with no identifiers | Needs prompt tuning and a check step; per-pair cost | Medium to high | Medium: an LLM can state its reasons, but they must be checked |
A common pattern is a funnel: identifiers first, then embeddings to pull candidates for the rest, then rules and an LLM to decide, then hard checks and human review for anything uncertain.
How do you measure product matching quality?
Measure matching as a classification problem with two numbers:
- Precision is the share of the pairs you called a match that really are a match: true positives divided by (true positives plus false positives).
- Recall is the share of the real matches that you found: true positives divided by (true positives plus false negatives).
Both definitions follow Google's Machine Learning Crash Course, which also notes that the two often move in opposite directions: a stricter matcher usually has higher precision and lower recall.
To get these numbers for your own data:
- Sample proposed matches and unmatched records at random, and add hard cases on purpose: bundles, multipacks and near-identical variants.
- Have people label each pair as same SKU, different SKU or cannot tell, using written rules such as "different pack count means different SKU".
- Compute precision and recall per source and per category. An overall figure can hide one marketplace where matching is poor.
- Repeat on a schedule, because listings change.
Decide which error costs more before you tune. For price comparison and MAP alerts, a false match (a 3-pack compared to a single unit) leads to wrong actions, so precision matters more. For assortment gap analysis, a missed match makes a product look absent, so recall matters more.
What is product matching used for?
- Price comparison. Compare your price with the same SKU at other retailers. See our guide to tracking competitor pricing across multiple retailers and the broader price monitoring guide.
- MAP monitoring. A brand can only flag a minimum advertised price violation if it knows the listing is its product at the stated pack size. See what MAP pricing is and how to enforce it.
- Assortment gap analysis. Find products a competitor or marketplace carries that you do not, and the reverse.
- Catalog enrichment. Fill missing attributes, images or descriptions by linking a thin record to a fuller record of the same product. See product catalog enrichment and enriching incomplete catalogs.
- Agentic shopping. An AI agent that compares offers for a user has to know that two listings are the same item before it can say one is cheaper. See agentic commerce.
How do you match products across marketplaces? A step-by-step workflow
- Define the match level: same SKU, same variant, same pack count, same condition (new or used).
- Collect structured records from each source: URL, item and variant IDs, title, brand, any GTIN or MPN, variant attributes, pack count, images, price, currency and retrieval time.
- Normalize brand names, units (ml, g, oz), pack counts and currencies. Keep the original values next to the normalized ones.
- Match on identifiers first (valid GTIN, or brand plus MPN), and still check that pack size and variant agree.
- Generate candidates for the rest with text or image embeddings, so the expensive comparison step only sees the closest few records.
- Decide each candidate pair with rules first, then an LLM or trained model for pairs the rules cannot settle. Store the reason for each decision.
- Verify. Reject pairs where pack count, variant or unit size disagree, and send low-confidence pairs to human review.
- Measure precision and recall on a labeled sample, per source and category, and adjust thresholds.
- Re-check over time, especially when a listing's title, images or price change sharply, since sellers can repurpose listings.
How datawebot fits
Matching starts with clean, structured product records from each source. datawebot turns supported store URLs into structured product and variant records, through the workbench or an HTTP API described by an OpenAPI spec, with an llms.txt that points agents to the docs. Store extraction works for Shopify stores today. The records include fields you can use as matching inputs: source product and variant IDs, SKUs, URLs, titles, vendor, images, and prices with their currency. Missing values stay empty rather than guessed. New accounts get 100 trial credits, no card required; see the pricing page.
Frequently asked questions
What is the difference between product matching and SKU matching?
They usually mean the same task. "SKU matching" stresses the strict level: same variant and same pack size, not only the same product line.
Can product matching work without GTINs or barcodes?
Yes. Without identifiers, systems use attributes, text, images and embeddings to find candidates, then rules, a model or an LLM to decide. Precision is harder to keep high without identifiers, so a verification step and human review of uncertain pairs matter more.
How does AI product matching work?
AI product matching usually has two stages. An embedding model retrieves the most similar listings for each product, and a classifier or large language model decides whether each pair is the same item. Research shows strong LLMs can match with few training examples, but prompts need tuning for each dataset (arXiv), so results should be checked against a human-labeled sample.
How accurate is product matching?
There is no general figure that applies to your data. It depends on your categories, sources and definition of "same", so measure precision and recall on a human-labeled sample of your own listings.
Why do bundles and multipacks cause matching errors?
A multipack shares the name, brand and often the images of the single unit, so text and image methods tend to match them, even though it is a different item at a different price. Check pack count before accepting any match.
Sources
- https://support.google.com/merchants/answer/6324461
- https://www.gs1us.org/upcs-barcodes-prefixes/what-is-a-gtin
- https://knowledge.plytix.com/glossary/amazon-standard-identification-number-asin/
- https://developers.google.com/machine-learning/crash-course/classification/accuracy-precision-recall
- https://arxiv.org/abs/2310.11244
- https://arxiv.org/abs/2301.09521
- https://sbert.net/examples/sentence_transformer/applications/semantic-search/README.html
- https://www.datawebot.com/pricing
- https://www.datawebot.com/llms.txt
- https://www.datawebot.com/solutions/product-catalog-enrichment
- https://www.datawebot.com/learn/track-competitor-pricing-multiple-retailers
Put product data in your agent's hands.
Connect a coding agent, or check how page-based credits work before you run anything.