Skip to content
Back to blog

GMC Error "missing_required_attribute_gtin": What It Means and How to Fix It

Google Merchant Center showing missing_required_attribute_gtin? Here's exactly what Google requires, when it's optional, and the four ways to fix it without losing branded-product visibility.

Alex DiazFounder, SnowPipeMay 8, 202610 min read
google-merchant-centertroubleshootingproduct-feedsguide

You log into Google Merchant Center and Diagnostics is showing a wave of red:

Issue: Missing required attribute [missing_required_attribute_gtin]
Attribute: GTIN [gtin]

Or, in some Diagnostics views:

Missing GTIN
A GTIN is required for this product. Add the gtin attribute to your feed.

You check your Shopify export. The barcode column has values for most products. But Google still says GTIN is missing. Or maybe you sell store-exclusive items with no barcode at all and you're not sure what to do.

missing_required_attribute_gtin is one of the more confusing GMC errors because the rules around when GTIN is required have changed multiple times over the past few years. As of 2026, Google requires GTIN for branded products in most categories but accepts an opt-out for genuinely unbranded merchandise. Misunderstanding that distinction is the most common cause of this error.

This post covers when GTIN is actually required, when it isn't, the four ways to fix it depending on your product type, and how to verify the fix without breaking your other products.

What missing_required_attribute_gtin actually means

Google's product data spec lists gtin as required for "all new products that have been assigned a GTIN by the manufacturer." The phrasing matters: it's required if one exists, not always.

The error fires in three specific cases:

  1. Branded product with a missing gtin field. Google detects from your brand value that the manufacturer is one that issues GTINs (most of them do), and your feed has either no gtin value or an empty string.
  2. Branded product with identifier_exists: true (or no identifier_exists at all) and no gtin. Same as case 1, but you're explicitly telling Google identifiers exist while not providing them.
  3. Apparel, electronics, books, or media product missing GTIN. Some categories have stricter requirements regardless of brand. Books require ISBN; media requires UPC/EAN; named-brand apparel requires GTIN.

Note what's not in this list: handmade items, store-exclusive products, custom merchandise, art prints, and pre-1990s vintage items where GTIN didn't exist. Those have a legitimate path to keep selling on Shopping without a GTIN, which I'll cover below.

Why Google flags it

GTIN is the universal product identifier that lets Google match your listing to other merchants' listings of the same item. When 50 stores sell the same Nike running shoe, the GTIN is how Google knows they're the same product. That matching unlocks several Shopping features:

  • Comparison shopping panels that show your listing alongside competitor listings.
  • Price-monitoring badges ("Lowest price across retailers").
  • Better ranking signals because the same GTIN with consistent good reviews gets cumulative trust.
  • Eligibility for certain ad formats (some Performance Max placements require GTIN).

When GTIN is missing on a product where Google believes one exists, you're not just blocked from those features — Google may disapprove the product entirely, because the listing creates noise in their global product graph.

The missing_required_attribute_gtin error is Google saying "we believe this product has a GTIN; tell us what it is, or explicitly tell us it doesn't have one."

Four fixes ranked by frequency

Fix 1: Add the GTIN from your source system (most cases)

Most of the time, the GTIN exists in your source system but isn't reaching the feed. Common causes by platform:

Shopify: GTIN lives on the variant barcode field. If your products have variants (size, color), each variant needs its own barcode. A common mistake is filling in barcode only on the default variant; Google needs it on every variant that's being submitted.

To find variants missing barcodes:

  • Shopify admin: Products > Filter by Has barcode: No
  • Or via API: GET /admin/api/2026-01/products.json?fields=id,variants and filter for variants[].barcode === null

WooCommerce: GTIN is not a native WooCommerce field. It's typically stored as _global_unique_id (modern installs), _gtin (older), or as a custom attribute. The "WooCommerce Google Listings & Ads" plugin uses _global_unique_id; third-party feed plugins use various keys. Check your specific install:

SELECT DISTINCT meta_key FROM wp_postmeta
WHERE meta_key LIKE '%gtin%' OR meta_key LIKE '%upc%' OR meta_key LIKE '%ean%';

The fix: confirm which key your feed-generation tool reads from, populate that key for every product, and verify your feed actually includes the value.

BigCommerce: GTIN lives in the upc field on Product or Variant level. The BigCommerce API returns it directly, but some feed exporters skip it if the field is empty rather than including the empty value. Make sure your feed pipeline preserves the field even when null, so Google sees it explicitly.

Custom CSV / Sheets feeds: Verify the column header is exactly gtin (lowercase). Google's parser is case-sensitive on attribute names. Headers like GTIN, UPC, barcode, or Gtin will be ignored.

Fix 2: Set identifier_exists to false for genuinely unbranded products

If you sell handmade, store-exclusive, custom, vintage (pre-1990s), or other genuinely unbranded products, the correct attribute set is:

identifier_exists: false
brand: <your store or brand name>
mpn: <your internal SKU or model number>

Note: identifier_exists: false does not mean "I don't know the GTIN." It means "this product has no manufacturer-assigned GTIN." Google grants this opt-out for specific categories:

  • Custom-made products
  • Handmade goods
  • Antiques and vintage items (typically pre-1990 if you must defend it)
  • Custom-printed apparel where you are the brand
  • Books published before ISBN existed (pre-1970)
  • Store-exclusive products that you produce internally

Google's GTIN requirements doc lists the official categories where identifier_exists: false is accepted. Misusing it on branded products you simply don't have GTINs for will eventually trigger account-level scrutiny.

When identifier_exists: false is set, you must still provide both brand and mpn. Missing either of those will produce a different error (missing_required_attribute_brand or missing_required_attribute_mpn).

Fix 3: Map a non-standard barcode field correctly

A common cause of missing_required_attribute_gtin on Shopify is that the merchant stores the GTIN in a metafield like custom.gtin or mm-google-shopping.gtin instead of the variant barcode field, and the feed pipeline only looks at barcode.

This usually happens because:

  • The store was migrated from another platform and GTINs landed in a metafield.
  • A previous feed plugin used a custom metafield instead of the native barcode field.
  • The catalog manager wanted to keep barcodes separate from internal SKUs and put them somewhere else.

The fix is on the pipeline side. Either:

  • Move the values into the native variant.barcode field (preferred), or
  • Configure your feed tool to read from the metafield instead.

For Shopify specifically: if you maintain GTINs in metafields, Shopify's GraphQL Admin API lets you bulk-copy them to variant.barcode with a single bulk mutation. This is usually less work than reconfiguring downstream feed tools to look in two places.

Fix 4: Disable gtin requirement for non-physical or out-of-scope products

Some products genuinely should not have GTINs and should not be in your Shopping feed at all:

  • Service products (consultations, subscriptions to non-physical content)
  • Donation products
  • Gift cards
  • Physical-store-only products (in-store pickup only with no shipping)

For these, the right fix is to exclude them from the feed entirely, either via a feed-side filter, a Shopify collection that specifically gates Shopping eligibility, or a mm-google-shopping.condition metafield set to exclude.

Don't try to make GTIN optional for these by setting identifier_exists: false — that creates phantom listings in Google's global product graph. Just exclude them from the feed and they won't trigger errors.

Tools to verify the fix

1. Pull a sample of recently-fixed products from Diagnostics. After applying fixes, wait 24-48 hours, then go to Products > All products in Merchant Center, filter by Status: Pending for products you fixed, and click into one to verify the GTIN value Google sees matches what you submitted.

2. Check your feed's GTIN coverage:

# Count rows with non-empty GTIN
xsv stats --select gtin feed.csv | grep -E "^(field|null_count|empty_count)"

# Or quick coverage check
xsv select gtin feed.csv | tail -n +2 | awk 'NF==0 {empty++} NF>0 {filled++} END {print "Filled:", filled, "Empty:", empty}'

A healthy feed for branded products should be at or above 95 percent GTIN coverage. Coverage below 80 percent usually indicates a source-system data hygiene issue worth fixing before submitting.

3. Verify identifier_exists: false is being honored. Filter Diagnostics for the affected products and confirm the error count drops. If it doesn't, your feed is probably submitting an empty gtin field with identifier_exists: false, which some Google parsers interpret as conflicting signals. Either omit the gtin column entirely for those products or ensure it's truly absent (not just empty string).

4. Cross-reference with Google's product data spec. When in doubt, check the canonical spec for the exact requirements for your product category. Apparel, books, media, and electronics have stricter rules than general merchandise.

What not to do

  • Don't set identifier_exists: false globally to suppress the error. Google notices when a feed flips from "mostly has GTINs" to "claims no products have GTINs" and treats it as gaming. The account-level trust hit takes weeks to recover from.
  • Don't put SKUs or internal product codes in the gtin field hoping Google won't notice. Google validates the check digit. A SKU like "NK-DRI-FIT-M-BLK" will be rejected as invalid_upc, and a numeric SKU like "12345" will be rejected as wrong length. Internal codes belong in mpn, not gtin.
  • Don't bulk-add fake GTINs from a UPC reseller. Cheap "GS1 prefixes" sold by third parties on eBay or Alibaba are usually deprecated prefixes that GS1 sold off in the 1990s. They scan in some retailer systems but get caught by Google's deduplication, surfacing as invalid_upc or worse, account-level trust issues. Get GTINs from GS1 directly if you need them.

How SnowPipe handles this

SnowPipe syncs Shopify, WooCommerce, and BigCommerce catalogs to Google Merchant Center via the Merchant API v1. Two design choices in SnowPipe address missing_required_attribute_gtin before products reach Google:

Source-system field discovery. SnowPipe inspects the source store on connection setup and surfaces every field that could plausibly hold a GTIN: native barcode fields, common metafield namespaces (custom.gtin, mm-google-shopping.gtin, inventory.barcode), and platform-specific attributes (BigCommerce upc, WooCommerce _global_unique_id). The catalog manager picks the right source, and SnowPipe maps it cleanly to Google's gtin attribute without losing leading zeros or misinterpreting empty values.

Coverage reporting before submission. SnowPipe shows GTIN coverage as a percentage in the Products tab inside any GMC connection. If coverage is below your account's policy threshold (usually 95 percent for branded products), products without GTINs are flagged before submission so you can either source the missing values or explicitly mark identifier_exists: false on a per-product basis. This lets you fix gaps in batches rather than one product at a time after Google rejects them.

You can see GTIN coverage and per-product status in the Products tab of every GMC connection, with deep links to the source admin (Shopify, WooCommerce, BigCommerce) for fixing values directly.

Summary

missing_required_attribute_gtin is rarely about products that genuinely lack GTINs. Most cases come down to a barcode that exists in your source system but isn't being read by the feed pipeline, a Shopify variant with a missing barcode while the parent product has one, or a WooCommerce custom-field key mismatch. Set identifier_exists: false only for genuinely unbranded products and pair it with brand and mpn. The fix is almost always a data-pipeline issue, not a missing-data issue.


Tired of fighting GMC GTIN errors one product at a time?

Try SnowPipe free — connect your store and get smart GTIN field detection plus accurate Google/Facebook syncs in minutes. Or, book a 15-min demo and I'll walk you through your specific setup.

Ready to automate your product feeds?

Connect your store and sync to Google, Facebook, and more — in minutes. No credit card required.