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.
/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:
| Code | Format | Length | Common use |
|---|---|---|---|
| UPC-A | GTIN-12 | 12 digits | North American retail (the common "barcode" on US products) |
| EAN-13 | GTIN-13 | 13 digits | European / global retail |
| EAN-8 | GTIN-8 | 8 digits | Small-package retail |
| ISBN-13 | GTIN-13 | 13 digits | Books |
| JAN | GTIN-13 | 13 digits | Japan 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
- Cross-retailer matching. An agent answering "where to buy Allbirds Wool Runners size 9 black" finds GTIN
0012345678905in your product feed and matches it to the same GTIN in Amazon's, Zappos's, and Allbirds.com's feeds. Without your GTIN, you don't appear in the candidate set — even if you have the lowest price. - Manufacturer-listing trust. A GTIN ties your listing to the manufacturer's official record (registered with GS1). That's a trust signal: stores selling the same GTIN as the manufacturer rank higher than stores listing what looks like the same product but with no GTIN to verify it.
- Variant-precision queries. "Wool Runners in size 9" needs to map to a single variant, not the parent product. GTIN per variant is how that resolution happens. Without per-variant GTINs, agents fall back to inferring from variant titles, which is error-prone.
- Google Shopping eligibility. Google Merchant Center now requires GTINs for almost every product category. Stores without GTINs are silently excluded from Google Shopping ads and the AI Mode shopping-result rail.
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
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.
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.
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.
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