PriceBee.co.uk

Getting EAN and MPN right in your product feed

Comparison sites group offers onto one product page using identifiers from your feed. Here is how matching actually works, what breaks it, and how to audit your own data before it costs you listings.

When a shopper looks at a product page on a comparison site, they are looking at a group: one product, several shops, several prices. Your offer either joins that group or it does not. Nothing else in your feed matters as much, because an offer that fails to match sits on its own, gets almost no traffic, and quietly makes the whole channel look like it does not work.

Matching is mostly mechanical. A comparison engine takes the identifiers in your feed — GTIN, brand, MPN, sometimes a category and a title — and tries to decide whether your "Bosch GBH 2-28 F" is the same object as the one eleven other shops are already listing. Get the identifiers right and this is trivial. Get them wrong and the engine either guesses from the title, which is unreliable, or gives up.

What the identifiers actually are

GTIN is the umbrella term for the barcode number on the packaging. In practice you will meet it in a few lengths: GTIN-13 (the EAN you see in Europe), GTIN-12 (the UPC used in North America), GTIN-8 (short codes on small packaging) and GTIN-14 (used for cases and outer packs, not for the consumer unit you are selling). All of them end in a check digit calculated from the preceding digits, which is handy: you can validate the whole column yourself without asking anyone.

MPN is the manufacturer's part number — the code the brand uses in its own catalogue. It is only meaningful together with the brand, because part numbers are not unique across manufacturers. "4051" means nothing on its own.

Brand is the manufacturer, not your shop and not the supplier you buy from. This sounds obvious and is one of the most common errors in feeds, particularly where a distributor's export has been passed through unchanged.

A feed that carries a correct GTIN needs little else to match. A feed with no GTIN but a correct brand and MPN will usually still match. A feed with neither is relying on the title, which means it will match sometimes, match the wrong thing other times, and create duplicate product pages that split the offers.

The failures you are most likely to have right now

Leading zeros eaten by a spreadsheet. A GTIN-13 beginning with 0, or any GTIN-8, loses its first digits the moment someone opens the CSV in Excel and saves it. The number looks fine in the cell and is invalid everywhere else. If any part of your feed pipeline passes through a spreadsheet, this is almost certainly happening somewhere in your catalogue.

Scientific notation. The same route produces values like 4.00638E+12. These are not recoverable without going back to the source.

Your own internal SKU in the GTIN field. Internal codes are frequently 13 characters long, which makes them look plausible and makes the error survive a quick eyeball check. Check digit validation catches them immediately.

One supplier code reused across a size run. Clothing and footwear feeds often carry the same identifier for every size of a garment. Each size has its own barcode in reality. When you send one code for all of them, the comparison engine sees a single product offered at one price while your shop has nine variants, and shoppers click through to something that is out of stock in their size.

Bundles carrying a component's identifier. If you sell a printer with two spare cartridges as a set, it is not the printer. Giving it the printer's EAN puts your higher-priced bundle onto the printer's product page next to shops selling the bare unit. You look expensive and you get no clicks. Multipacks have the same problem: a six-pack is a different GTIN from a single, and if the manufacturer never issued one, treat the pack as an own-product rather than borrowing the single's code.

Refurbished, used and grade-B stock listed on the new product page. Some channels have specific fields for condition; where they exist, use them. Where they do not, an A-grade refurbished unit sitting on the new product page at a lower price generates clicks that convert badly and returns that cost you more than the margin.

Regional variants treated as one. Power tools with different plug types, appliances in different voltages, books in different language editions. These usually have distinct barcodes. When they do not, you need to decide and be consistent, because the shopper who receives the wrong edition will tell you about it.

Auditing your own feed in an afternoon

You do not need a tool for most of this. Export the feed, open it in something that will not mangle numbers, and work through a short list.

  1. Validate every check digit. The rule is simple enough to implement in a spreadsheet formula or ten lines of code: from the right, multiply alternate digits by 3 and 1, sum them, and the check digit is whatever brings the total up to the next multiple of ten. Anything that fails is wrong, full stop.
  2. Count the lengths. Group your identifiers by character count. Anything that is not 8, 12, 13 or 14 is junk. Anything that is 14 is probably a case code and does not belong on a consumer offer.
  3. Look for duplicates. Sort by GTIN and find every value used more than once. Some duplicates are legitimate — the same product listed in two categories — but a block of twelve rows sharing one code is a variant problem.
  4. Check the brand column against a distinct list. Pull the unique values. You will find "Philips", "PHILIPS", "Philips BV" and a distributor name that is not a brand at all. Normalise them.
  5. Measure your coverage by category. Calculate what share of rows carry a valid GTIN, broken down by product category. The gaps will cluster: typically own-brand goods, handmade items, made-to-order furniture, and whatever you bought from the supplier with the worst data.

That last number is the one worth tracking over time. Coverage is a project, not a task.

When there genuinely is no GTIN

Some products do not have one and never will: your own-brand goods, bespoke items, services, parts you assemble yourself. This is fine. Send brand and MPN instead, and make the MPN something stable that you will not renumber next season. For own-brand products, your brand name plus your own SKU is a perfectly good MPN, provided the SKU does not change when the product gets a new photo or a new supplier.

What you should not do is invent a number that looks like a barcode. A fabricated thirteen-digit code either fails validation, or worse, passes validation and collides with a real product belonging to somebody else.

If you do sell own-brand goods in volume and intend to be in retail channels for the long term, getting a GS1 prefix and issuing proper barcodes is worth doing. It solves the problem permanently rather than per-channel.

Filling the gaps from suppliers

Most missing identifiers exist somewhere — they are just not in the file your supplier sends you. Ask specifically: not "can you send product data" but "can you add the EAN column to the export". Distributors are asked for this constantly and usually have it. Where a supplier genuinely cannot provide codes, you can often recover them from manufacturer catalogues, though this is manual work and only worth it for products that sell.

A reasonable approach is to sort your catalogue by revenue, fix identifiers for the top band properly, and let the long tail match on brand and MPN. The top hundred products are where the comparison traffic is anyway, and a hundred rows is an afternoon rather than a quarter.

One last thing worth knowing: identifiers also determine whether your offer appears in comparisons at all when a shopper filters or searches by model number. Clean identifiers are not only about joining the right page. They are what makes your stock findable by the people who already know exactly what they want to buy.

Back to the blog

List your shop

Send us your shop details and we will get in touch.

We only use your details to get back to you.