FeedMender

FeedMender/Errors/Identifiers

Common rejections

Identifiers: GTIN, brand and MPN

Product identifiers are where a feed can be wrong in the most baffling way: a barcode that looks perfectly valid, passes its own check digit, and is still refused. Most of that confusion comes from a few rules that are easy to state and rarely explained.

What Google requires

A real barcode, or an honest declaration that there is none

Where a product has a manufacturer barcode, Google wants a valid GTIN: the right length, a correct GS1 mod-10 check digit, and a prefix that is actually issued to companies. A brand is required for most categories, with books, film and music the documented exceptions. An MPN does not substitute for a brand; the two satisfy different rules. If a product genuinely has no GTIN, that is declared with identifier_exists: no, and that declaration must not contradict a GTIN, an MPN, or a brand-and-MPN pair that is also supplied.

What happens if you do not

A valid-looking barcode Google rejects anyway

Several of these produce the disapproval that makes no sense from the merchant's side. A barcode with a correct check digit is refused because it begins with a restricted prefix, 2, 02 or 04, which are reserved for in-store and variable-measure use, or because it sits in a coupon band. Excel is the other frequent culprit: it silently turns a long barcode into scientific notation such as 8.71234E+12, and a leading zero vanishes, so the value that was correct in your database is wrong by the time Google reads it. A contradictory identifier_exists declaration, a placeholder brand like "N/A" or "Generic", or an id over 50 characters or carrying invisible control characters, each blocks the product.

How to fix it by hand

Restore the digits, then check the prefix

  • Store barcodes as text, not numbers, so no leading zero is lost and nothing is converted to scientific notation. In a spreadsheet, that means turning off automatic number conversion on import.
  • Verify the GS1 check digit, and read the prefix off the zero-padded 13-digit form rather than the raw string: a 12-digit UPC-A beginning 98 normalises to 098, which is legitimate.
  • Convert an ISBN-10 to ISBN-13 and expand a UPC-E to UPC-A rather than submitting the short form.
  • Replace placeholder brands with the real one, and give each variant its own GTIN rather than repeating a single barcode across a group.
  • Set identifier_exists: no only when you truly supply no GTIN, MPN, or brand-and-MPN pair, and keep every id unique, under 50 characters, and free of control characters.

Which of our checks apply

The identifier fields FeedMender reads

Nineteen checks, read from the scanner's own registry, cover this area. The prefix and check-digit logic is the part almost nothing else does.

  • gtin_invalidgtin, blocks
  • gtin_repairablegtin, blocks
  • gtin_formattinggtin, at risk
  • gtin_suspectgtin, at risk
  • gtin_duplicategtin, at risk
  • gtin_absentgtin, at risk
  • gtin_absent_fallbackgtin, at risk
  • identifier_exists_contradictionidentifier_exists, blocks
  • identifier_exists_valueidentifier_exists, blocks
  • brand_missingbrand, at risk
  • brand_placeholderbrand, blocks
  • brand_too_longbrand, blocks
  • mpn_placeholdermpn, at risk
  • mpn_suspiciousmpn, underperforming
  • mpn_too_longmpn, blocks
  • id_missingid, blocks
  • id_duplicateid, blocks
  • id_too_longid, blocks
  • id_invalid_unicodeid, blocks

The quicker way

Let the scan find them

A check digit is arithmetic and a restricted prefix is a lookup, which is exactly the sort of thing worth having a machine do across a whole catalogue. The free scan reports every identifier fault, and names the cause when a barcode is valid but still refused.