Guide

How to add GTINs to your Shopify products, and check they're valid

Updated · 7 min read

A GTIN is the number under a product's barcode. Google lists it among the properties it recommends for product markup, and when it's missing Search Console reports No global identifier provided (e.g., gtin, mpn, isbn). It's also how Google and other systems that compare products recognise that your listing is the same item another store sells. On Shopify, GTINs live in each variant's barcode, so getting them right is a data job, not a theme job.

What counts as a GTIN

GTINs are issued through GS1, the standards body behind retail barcodes. The familiar barcode formats are all GTINs of different lengths:

FormatDigitsWhere you'll see it
UPC-A (GTIN-12)12Most products sold in North America
EAN-13 (GTIN-13)13Most products sold elsewhere; a 13-digit ISBN is one too
EAN-8 (GTIN-8)8Small packages
GTIN-1414Cases and multipacks

If you resell other brands' products, the GTIN is printed on the packaging. If you own the brand, you get GTINs from GS1 directly. Numbers sold cheaply by resellers can trace back to another company, which defeats the point of a unique identifier.

Where GTINs go in Shopify

Barcodes are entered in the Inventory section of a product, or of each variant when the product has variants. Since 2026 a variant can hold up to 20 barcodes, each with a type that says which standard it follows:

  • GTIN: 8, 12, 13 or 14 digits
  • UPC: 8 or 12 digits
  • EAN: 8 or 13 digits
  • ISBN: 10 or 13 characters
  • ASIN: Amazon's identifier, not a GTIN
  • Custom: the default, for codes that follow no standard

Give real GTINs the type that matches them rather than leaving them as Custom. Shopify checks a typed barcode against its standard's length and characters, and the type tells every channel which of your codes is the GTIN. Internal stock codes belong in Custom, or better, in the SKU field.

Shopify notes that some sales channels require a GTIN before a product can be published to them, so missing barcodes can cost you more than a Search Console warning.

Adding barcodes in bulk with a CSV

Shopify's product CSV now has a Barcodes column (plural). It takes up to 20 barcodes per row, separated by semicolons, each with an optional type and a colon in front. A barcode with no type is imported as Custom:

Handle,Option1 Value,Barcodes
canvas-tote,Natural,gtin:00614141000036
canvas-tote,Black,gtin:00614141000043; WH-TOTE-BLK

The older singular Barcode column is renamed the next time you export, and a file that contains both columns fails to import.

Watch the leading zeros. Excel and Google Sheets read a cell like 012345678905 as a number, drop the leading zero, and may show long codes in scientific notation. A typed value such as gtin:012345678905 stays text, but an untyped one doesn't. Format the column as plain text before pasting, or turn off number conversion when you import the CSV, and spot-check a few rows before uploading.

Check a check digit by hand

The last digit of every GTIN is a check digit computed from the others, so most typos give themselves away. The rule is the same for every length. Take the UPC 036000291452:

  1. Set the last digit aside. It's the check digit: 2.
  2. Starting with the digit just left of it and moving left, multiply the digits by 3, 1, 3, 1 and so on: 5×3 + 4×1 + 1×3 + 9×1 + 2×3 + 0×1 + 0×3 + 0×1 + 6×3 + 3×1 + 0×3 = 58.
  3. Take the amount needed to reach the next multiple of ten: 60 − 58 = 2.
  4. It matches the check digit, so the number is well formed.

GS1 has a check digit calculator if you'd rather not do arithmetic.

What a valid check digit doesn't prove

It shows the number is well formed, not that it was issued, or that it belongs to this product. A mistyped GTIN that happens to pass, or a real GTIN pasted onto the wrong variant, still passes. GS1's Verified by GS1 service looks up who a GTIN was issued to.

Products that don't have a GTIN

Handmade, custom and many private-label products have no GTIN, and that's fine. Don't invent one to clear a warning. Leave the barcode empty and make sure the product's markup carries its brand, plus an mpn if there's a manufacturer part number. If you make the product yourself, your own part number is that number. In a Google Merchant Center feed, products without identifiers are marked with the identifier_exists attribute set to no.

How the GTIN reaches your markup

Dawn prints a variant's barcode as gtin in its product JSON-LD when there is one. We looked at exactly what it emits. Your theme may differ, so check a product page with Google's Rich Results Test or the SchemaRank scanner after adding barcodes.

SchemaRank, a Shopify app, checks every barcode in your catalog against its check digit, flags the ones that fail, and publishes GTINs in each product's JSON-LD alongside brand and MPN.