Home · The 15 signals · GTIN coverage

Shopify GTIN coverage across variants

A GTIN — Global Trade Item Number — is the manufacturer-issued UPC, EAN, ISBN, or JAN that uniquely identifies a physical product across every retailer in the world. Shopify stores them per variant under variants[].barcode. AI shopping agents use GTINs to match your product to the same product on other retailers, to the manufacturer's listing, to Google's product knowledge graph, and to your store's own listings on Amazon and Google Shopping. Without GTINs, your product is a standalone text string — and you almost never win the commodity "where to buy X" queries that drive the largest share of AI-shopping referral traffic.

Last updated 2026-04-30 · Ranking-spread signal · 10 pts · 100% failure rate as of the launch scan

10 / 70Ranking-spread weight
≥90%Variant coverage = full credit
100%Launch-scan failure rate
What this signal scores: the percentage of variants in your /products.json feed that have a non-empty barcode field. ≥90% of sampled variants = full 10 pts. 50–89% = 5 pts (half credit). Under 50% = 0 pts. We sample up to 100 variants per scan to get a stable percentage.

What it is

"GTIN" is the umbrella term for the family of unique-identifier formats:

CodeFormatLengthCommon use
UPC-AGTIN-1212 digitsNorth American retail (the common "barcode" on US products)
EAN-13GTIN-1313 digitsEuropean / global retail
EAN-8GTIN-88 digitsSmall-package retail
ISBN-13GTIN-1313 digitsBooks
JANGTIN-1313 digitsJapan retail

In Shopify, all of these are stored in the same barcode field on the variant — Shopify doesn't care about the format, but agents and Google Shopping validate against the GS1 check digit, so the value has to be a real GTIN, not a made-up string.

We covered the dependent issue ("what happens if you don't have GTINs") in our long-form post: Shopify GTIN requirements for AI shopping agents.

Why AI shopping agents care

How to test it on your store

One jq one-liner against your public feed:

curl -s https://yourstore.com/products.json?limit=250 \
  | jq '[.products[].variants[].barcode] as $all
       | ($all | map(select(. != null and . != "")) | length) as $f
       | ($all | length) as $t
       | "\($f)/\($t) (\($f * 100 / $t | floor)%)"'

Expect output like "485/532 (91%)". Aim for ≥90%. If you get 0/N, every barcode field is empty — most common cause is that products were imported via a CSV that didn't include the Barcode column, or via a third-party PIM that doesn't sync barcodes back to Shopify.

The free CatalogScan scan reports both the percentage and a short snippet showing which variants are missing barcodes — to make the bulk-fill list one click away.

How to fix it

Bulk-fill from CSV30 minfree

Export Products → Export → All products from Shopify admin to CSV. Open in a spreadsheet, fill the Variant Barcode column with the GTINs you have on file (sourced from your manufacturer, your packaging, or a previous PIM/ERP export). Re-import via Products → Import → Update existing. Validate by re-running the jq test above.

Edit per-variant in Shopify admin15 min for ≤50 variantsfree

For small catalogs: open each product, scroll to Variants, click each variant, paste the barcode in the Barcode field. Tedious but reliable. Use the bulk editor (Products → Bulk edit → Add fields → Barcode) if you have a few hundred variants instead.

Buy GTINs from GS11–2 weeks for issuance$30/yr to $1k+ depending on count

If you don't have GTINs at all (private-label, custom-manufactured, or DTC-only products), buy a GS1 prefix and issue your own. Pricing scales with how many SKUs you need to issue. GS1 US for North America; GS1 country offices elsewhere. Don't buy "resold" or "GS1-compatible" GTINs — agents and Google Merchant Center silently reject those once they detect the prefix isn't registered to your brand.

CatalogScan Pro: GS1 lookup auto-enrichment5 min$49/mo

Pro reads your variant titles and SKUs, performs a GS1 lookup against the public registry, and surfaces match candidates with confidence scores. You approve in batch. See Pro pricing.

4 mistakes we keep finding

1. Made-up "GTINs" that fail check-digit validation

Some stores fill the Barcode field with internal SKUs, sequential numbers, or random 12-digit strings. Agents and Google validate the GS1 check digit; bad values get silently rejected (the field reads as present but invalid). Only use real, manufacturer-issued GTINs.

2. GTIN on parent product but not on variants

A common pattern: one GTIN entered at the product level, all variants empty. Agents need a GTIN per variant — five sizes = five GTINs. Variants of the same product (different sizes, colors) usually have different GTINs in real-world manufacturing.

3. "barcode": "12345" — too short

A real UPC-A is 12 digits, EAN-13 is 13, ISBN-13 is 13. Numbers shorter than 8 digits will never validate. If you have shorter internal codes, store them in a custom metafield, not the Barcode field.

4. Headless front-end strips barcode from /products.json

Custom proxies for headless storefronts sometimes serialize a reduced product shape that omits barcode (along with sku, vendor, and other "internal" fields). Agents read the omitted fields as missing. Always pass through the full Shopify shape.

See also

What's your GTIN coverage right now?

Free 2-minute scan. We tell you the exact percentage and which variants are missing a barcode.

Scan my store → See all 15 signals