GTIN enrichment with GTINNER
How GTINNER fills missing barcodes by matching your products against external databases only where a confident match exists, never inventing numbers, and flagging the rest for you.
Missing GTINs quietly suppress a big share of Shopping visibility, because products with valid barcodes get matched to Google's catalog and win richer placements. GTINNER fills the gaps by matching your products against external barcode databases, but only where the match is confident. Where no confident match exists, it flags the product for you rather than guessing, it never invents a number.
Why a missing GTIN costs more than it looks
Google uses the GTIN to match your offer to a catalog entry it already understands: pooling reviews, spec data and demand signals across every merchant selling the same item. Matched products are eligible for richer placements and typically see meaningfully higher click-through. A product with no GTIN can't be matched, so it competes with a thinner signal and shows in fewer places.
The damage hides in aggregates. A 5,000-product catalogue can be "mostly fine" and still have 800 products effectively invisible because their barcodes never made it into the feed. GTINNER exists to close that gap safely.
What GTINNER does
GTINNER looks at each product missing a GTIN and matches it against external barcode databases using the identifying signals you already have: brand, MPN, title, and other attributes. When the evidence points confidently to a single real barcode, it fills that GTIN into the supplemental layer. When it doesn't, the product is flagged for you.
The word doing the work is confident. GTINNER would rather leave a gap than fill a wrong number, because a wrong GTIN is worse than a missing one: it can trigger an "incorrect product identifier" disapproval that suppresses far more than the single item.
The two outcomes
| Outcome | What happens |
|---|---|
| Confident match found | The real, validated GTIN is written to the supplemental layer and served to Google. Your source barcode field is untouched. |
| No confident match | The product is flagged in a list with the reason. You supply the GTIN from packaging, or set identifier_exists: false if it genuinely has none. |
There is no third outcome. GTINNER never fabricates a plausible-looking number to make a gap disappear.
Deep dive What "confident" means, and why guessing fails validation
Google applies real validation to every GTIN you submit, which is exactly why a guessed number is dangerous rather than merely useless.
- Check digit. The final digit is a modulo-10 checksum of the preceding digits. A fabricated GTIN almost always fails this and is rejected outright: and a batch of failures can raise an account-level "incorrect product identifiers" warning that suppresses far more than the affected items.
- Prefix legitimacy. The leading digits encode the GS1 member prefix. A number that passes the check digit but sits in a reserved, retired, or someone else's registered prefix still flags as incorrect. You can't reason your way to a valid GTIN from a SKU.
- It must be the right product's barcode. Even a real, valid GTIN is wrong if it belongs to a different product. Matching therefore has to be confident about which barcode, not just that a barcode is well-formed.
So GTINNER treats a match as confident only when the identifying signals converge on one real barcode with enough agreement to clear that bar. Everything below the bar is flagged, not filled. This is the same principle as the honest use of identifier_exists: it's better to tell Google "this needs a human answer" than to submit something that pattern-matches a known disapproval trigger. GTIN coverage is the heaviest-weighted input to your Feed Health Score, so closing real gaps moves the score: while a flagged remainder is shown honestly rather than papered over.
Handling the flagged remainder
The products GTINNER couldn't confidently match are the ones needing a human answer. For each, you have two correct options:
- Supply the GTIN: it's the number under the barcode on the packaging; the manufacturer or distributor is the source of truth.
- Set
identifier_exists: false: the right answer for handmade, custom, vintage or own-brand products that genuinely have no barcode. Don't invent one and don't submit your SKU as an MPN unless it truly is the manufacturer part number.
See GTIN, MPN and brand for the full identifier rules.
Where to go next
- See how GTIN sits among the other identifiers in The 20 enriched fields
- Understand identifier weighting in Feed Health Score explained
Frequently asked questions
Does GTINNER ever make up a barcode?
Never. It only fills a GTIN where it can confidently match your product to a real barcode in an external database. An invented number would fail Google's check-digit or prefix validation and risk a disapproval, GTINNER doesn't guess.
What happens to products it can't match?
They're flagged for you in a list, each with the reason it couldn't be matched. You can then supply the GTIN from the product's packaging, or set identifier_exists to false if the product genuinely has no barcode.
Does the filled GTIN get written into my Shopify product?
No. Like every enrichment, the GTIN is written to the supplemental layer and served to Google through your feed URL. Your Shopify barcode field is untouched.