All segments

Google Shopping Product Feed: Setup and Disapproval Fixes

Set up a Google Shopping product feed for Shopify: GTIN and identifier_exists settings, bulk disapproval fixes and the feed rules that hold at scale.

  • Published
  • Reading time 14 min read
  • Author Nafiul Hasan
Google Shopping Product Feed: Setup and Disapproval Fixes. Diagram: the stage nobody automated. RUN Google Shopping Product Feed:Setup and Disapproval Fixes BY HAND pointerflow.com

Short answer

Setting up a Google Shopping product feed for Shopify means connecting the Google & YouTube channel app, populating the barcode field with a real GTIN or a brand-plus-MPN pair, and setting identifier_exists to false only for genuinely unbranded items. At a large catalogue, the setup that actually holds also needs a bulk workflow for clearing disapprovals and condition-based feed rules, not per-item fixes.

A Google Shopping product feed decides whether a Shopify catalogue’s real stock, price and images actually reach Shopping ads and free listings, or sit disapproved, SKU by SKU, until someone opens each one and fixes it by hand. Most setup guides stop at installing Shopify’s Google & YouTube channel app and mapping a barcode field. This one covers that, then the two things that actually decide whether a catalogue of a few thousand SKUs stays compliant past week one: how to diagnose and fix item-level disapprovals — the GTIN and identifier errors that account for most of them — across a whole catalogue rather than one product at a time, and the feed-rule setup that keeps new and changed SKUs compliant without a person re-checking every one of them each week.

What Do You Need Before You Set Up a Google Shopping Product Feed?

Three things have to be decided before the first sync, not discovered after the first wave of disapprovals. First, a Google Merchant Center account has to exist, be claimed against the store’s actual domain, and have Shopify’s Google & YouTube channel linked to it — a channel pointed at an unclaimed or wrongly verified account will sync data that never becomes eligible to show. Second, every product line needs a call made on its identifier path: does it have a real manufacturer GTIN, does it need a brand-and-MPN pair instead, or is it genuinely unbranded and eligible for identifier_exists set to false. That decision belongs at the collection level — vintage, handmade or private-label collections usually share the same answer — not re-litigated SKU by SKU during a disapproval clean-up. Third, someone has to own the Google product category assignment per collection, because the category Google assigns determines which attributes it treats as required, and a catalogue left on a broad default category picks up requirements nobody planned for.

Confirm the target country and language each feed submission is scoped to as well, before the first sync — an easy setting to leave on whatever it defaulted to. Google’s own guidance states plainly that identifier requirements vary by target country and product category, so a catalogue selling into more than one country through Shopify Markets needs its identifier and category decisions checked against each target market separately, rather than assumed to carry over from whichever market was configured first.

One prerequisite gets skipped because it looks unnecessary for a catalogue that is “obviously all Shopify data”: confirm that the barcode field in Shopify admin is actually being used as a GTIN field, not a warehouse SKU or an internal tracking code. A migrated catalogue frequently has the barcode field populated with something that is twelve digits and looks like a GTIN but is not one, and Google’s matching against GS1’s ownership data catches the difference even when a human reviewer would not.

How Do You Set Up a Google Shopping Product Feed for Shopify, Step by Step?

Seven steps, run in this order because the category, pricing and review steps assume the GTIN and identifier decisions are already made, not the reverse.

Step 1: Connect Shopify’s Google & YouTube Channel and Confirm What It Actually Syncs

Install the Google & YouTube channel from the Shopify app listing, link it to a verified Merchant Center account, and confirm the connection is pulling from live product data — title, description, images, price and availability — rather than a stale export from a previous integration attempt. This is the least interesting step and the most commonly skipped check: a channel reconnected after an app reinstall can silently point at a duplicate or archived Merchant Center account.

Step 2: Add a Real GTIN to the Shopify Barcode Field for Every SKU That Has One

Open each variant’s Inventory section and enter the manufacturer’s actual identifier in the barcode field. The Google channel maps this field directly to gtin, so a value entered here that is not a real, manufacturer-issued code produces exactly the disapproval it was meant to avoid.

GTIN typeDigit countTypical use
UPC-A12 digitsMost North American retail products
EAN-1313 digitsEuropean and other international retail products
JAN8 or 13 digitsJapanese retail products
ISBN-1313 digitsBooks; convert a 10-digit ISBN-10 to its 13-digit form before entering it
ITF-1414 digitsA case or multipack, never the single retail unit inside it

If a product carries both a UPC and an ISBN, submit only the 13-digit ISBN — Google’s own guidance is explicit that the two should not both be entered on the same item.

Step 3: Set identifier_exists to False Only for Genuinely Unbranded or Vintage SKUs

In the channel’s product-level settings, set identifier_exists to false only for one-of-a-kind, handmade or vintage products that never had a manufacturer GTIN assigned in the first place — Google’s own guidance names exactly this category as the intended use. Leave it true or unset for every branded product, even one currently missing its GTIN, because the correct fix for a missing identifier on a branded item is finding the identifier, not declaring it does not exist.

Step 4: Pair Brand and MPN for SKUs With No GTIN

For private-label or manufacturer SKUs that genuinely have no GTIN, populate the Shopify vendor field as brand and add a manufacturer part number as MPN — typically through a metafield, since Shopify has no native MPN field. Google accepts brand paired with MPN as a valid alternative to a GTIN; a product with neither pairing and no GTIN fails identifier requirements outright.

Step 5: Assign an Explicit Google Product Category Per Collection

Set a specific category from Google’s own product taxonomy on each Shopify collection, rather than accepting whatever broad default the channel app assigns automatically. The category assigned is what determines which attributes Google treats as required for that item — apparel categories pull in size and colour requirements a general goods category does not, for example — so an unset or overly broad category can leave a whole collection short of attributes it needs.

Step 6: Match Your Feed’s Price and Availability to the Live Product Page

Confirm that the price and stock status submitted in the feed match what a shopper actually sees on the live product page at the same moment. Google checks landing pages against feed data on an ongoing basis, not only at first submission, so a sale price applied in Shopify without updating whatever price value the feed reads — or the reverse — produces a mismatch disapproval that reappears every time the check runs, not a one-time flag.

Step 7: Submit and Watch the Needs Attention Tab Through the First Review Cycle

After the first sync, check Merchant Center’s Products > Needs attention tab daily rather than assuming a clean first pass. Google typically takes three to five business days to review newly submitted items, and the first review of a catalogue in the thousands of SKUs is where identifier and category gaps from Steps 2 through 5 surface all at once, rather than trickling in one product at a time.

How Do You Diagnose and Fix Item-Level Feed Disapprovals at Scale?

Diagnosing disapprovals across a large catalogue means working from Merchant Center’s Products > Needs attention tab as a bulk queue, not opening each flagged item individually. Filter the tab to the specific issue — missing or incorrect GTIN, incorrect product identifier, or a variant attribute mismatch — download the filtered list as a CSV, and cross-reference it against the actual product data rather than guessing at a fix from the error name alone.

Three root causes account for most GTIN and identifier disapprovals on a real Shopify catalogue.

Root causeWhat it looks like in Merchant CenterThe fix
Genuinely missing GTIN“Missing or incorrect GTIN” on a branded SKU with no barcode enteredSource the identifier from the manufacturer’s own packaging or spec sheet, and verify ownership with GS1’s GEPIR lookup tool before entering it
One GTIN reused across listingsA multipack or bundle carrying the same code as its single-unit componentAssign the bundle its own GTIN rather than disputing the flag — Google’s catalogue treats a GTIN as identifying one specific item
Variant attribute mismatchItem group ID, colour or size values that disagree across a product’s own variant setCorrect the Shopify variant option names, since the mismatch usually traces back to how they were set up, not to the feed mapping

Of the three, a reused GTIN is the one worth checking for deliberately rather than waiting for Google to flag it, because it is invisible from inside Shopify — both SKUs look correct on their own, and only Merchant Center’s cross-catalogue check surfaces the collision.

Once the CSV is corrected, re-upload it or push the corrected values back through Shopify so the channel resyncs them, and expect the Needs attention tab to reflect the fix in 24 to 72 hours rather than immediately, per Google’s own stated processing window. Re-submitting the same correction inside that window does not speed it up and mainly adds noise to the review queue.

A disapproved item is a product with zero Shopping visibility until someone finds and fixes the specific attribute that failed it, and the field-mapping and rejection patterns behind that are not unique to Google — the same syncing mechanics, described in general in what a product feed actually is, also govern how a Shopify catalogue reaches Meta and TikTok Shop.

How Do You Keep Thousands of SKUs Feed-Compliant Without Fixing Each One by Hand?

Staying compliant at scale means moving the identifier and category decisions from Steps 2 through 5 into condition-based feed rules that apply automatically as products are added or changed, rather than re-checking the Needs attention tab as the only compliance mechanism. Shopify’s native Google & YouTube channel has no rules layer of its own — it syncs whatever is in the product record — so this step means either a dedicated feed management app (DataFeedWatch and comparable tools publish condition-based rule editors built for exactly this — vendor-reported) or a custom integration against Google’s Merchant API.

A rule set that actually holds is narrow and defensive rather than broad.

RuleSafe or riskyWhy
If collection = vintage or handmade, set identifier_exists to falseSafeEncodes a deliberate, collection-level decision a person already made
If GTIN is blank, copy the GTIN from the nearest matching SKURiskyManufactures a reused-GTIN mismatch across two distinct products
If GTIN is blank for any SKU in a whole product type, set identifier_exists to falseRiskyApplies the vintage-or-handmade exception to branded products that have a real GTIN, just not yet entered
If GTIN is blank, flag the SKU into a review queue and leave the feed item as it isSafeSurfaces the gap to a person instead of guessing, and never submits a value Google can contradict

The correct automated behaviour for a genuinely missing GTIN is always the last row: flagging it into a review queue, never guessing at a value. A rule that tries to auto-populate a missing GTIN from a similar SKU, or that blanket-applies identifier_exists false to an entire product type to make missing-GTIN disapprovals stop appearing, manufactures the same GTIN-mismatch and incorrect-identifier problems a bulk identifier_exists shortcut produces — at catalogue scale instead of one product at a time.

One dated fact matters for any team running a custom feed integration rather than a packaged app: Google’s Content API for Shopping, including its supplemental-feed mechanism for partial attribute updates, was sunset on 18 August 2026, with requests returning progressive errors from 1 September 2026. A rules setup built against that API needs migrating to the Merchant API; a Shopify store using the native Google & YouTube channel or a third-party feed app is unaffected, since those run on their own current integrations rather than a store’s direct API calls.

Set the resync cadence to match how often the catalogue actually changes rather than a fixed daily default — a catalogue with frequent price and stock changes needs rules re-evaluated close to real time, while a stable catalogue with occasional new SKUs can run a daily or twice-daily pass without missing anything material.

Which Step Do Most Teams Get Wrong When Setting Up a Google Shopping Product Feed?

Bulk-setting identifier_exists to false across an entire product type is the step most teams get wrong, and it looks like a fix rather than a mistake at the moment it is applied — the wave of missing-GTIN disapprovals stops immediately. What actually happens is that Google’s catalogue frequently already recognises a GTIN for that product from other sellers’ listings of the same item, so a branded product submitted with identifier_exists false trips a different, more specific flag: incorrect product identifier, because Google believes the product has a GTIN that the feed is declining to state. The listing also forfeits the catalogue matching and product-data enrichment a GTIN-backed listing receives, whether or not it is currently disapproved for it.

The fix is not a smarter default rule — it is treating identifier_exists false as the narrow, deliberate setting it is meant to be, reserved for products that genuinely never had a manufacturer identifier, and running the packaging-verification and GEPIR GTIN-sourcing method for every branded SKU still missing one.

How Do You Verify the Google Shopping Product Feed Setup Is Actually Working?

Verification means more than watching the first few items clear review — a small sample can look clean while a systemic gap sits in the collections that were not part of that sample. Four checks confirm the setup is holding rather than looking correct on a handful of products. First, pull the full Needs attention tab and confirm the disapproval count is trending down after each correction batch, not just that individual flagged items you already know about have cleared. Second, spot-check identifier_exists settings against what each collection was actually meant to carry — vintage or handmade collections set to false, every branded collection left true or unset — across a sample spanning every collection, not just the ones that prompted the original clean-up. Third, compare feed price and availability against live product pages for a sample of SKUs that changed price recently, since a fresh price change is exactly where a feed rule or a manual update most often lags behind the live page. Fourth, if feed rules are running, review what they actually changed over the past sync cycle rather than trusting that they ran — a rule with a typo in its condition can silently apply to zero products or to every product, and both fail the same way: without an error.

A feed that passes its first review is not the same as a feed that stays compliant as the catalogue grows past what anyone is checking by hand. Item-level disapprovals and identifier mismatches are not a one-time launch problem once the initial setup is done — they recur every time a SKU is added, a supplier’s GTIN turns out to be wrong, or a collection gets recategorised, and they stay invisible between review cycles unless something is watching for them. That is the reconciliation work behind catalogue and feed automation: a scheduled process that reads Shopify’s product data against what Merchant Center is actually reporting, flags the specific attribute that broke, and routes genuinely missing identifiers to a person instead of letting a rule guess at one.

Sources

GTIN format requirements — UPC, EAN, JAN and ISBN digit counts — and the identifier_exists guidance are drawn from Google Merchant Center’s own help documentation on unique product identifiers and the GTIN attribute. The Needs attention bulk-fix workflow, the 24-to-72-hour diagnostics processing window, and the GEPIR verification recommendation are drawn from Google’s own “Missing or incorrect GTIN” and “Incorrect product identifier” fix guides. The Content API for Shopping sunset date and the supplemental-feed mechanism it retires are drawn from Google’s developer documentation for that API. Shopify’s Google & YouTube channel sync behaviour, including the barcode-to-GTIN field mapping, is drawn from Shopify’s own Help Center documentation. The existence and general shape of condition-based feed rules in third-party feed management tools is drawn from DataFeedWatch’s own published description of that feature and is labelled vendor-reported; no dollar cost or specific rule syntax is quoted from it. No figure in this article is estimated or invented — every number is either a published specification or a stated processing window from the sources above.

Frequently asked

Does Shopify's free Google & YouTube channel app support feed rules the way a dedicated feed app does?

No. The Google & YouTube channel syncs Shopify's product data as-is — title, description, images, price, availability and the barcode field — with no condition-based logic layer. A rule such as "set identifier_exists to false for the vintage collection only" needs a separate feed management app or the Merchant API; the native channel has no rules editor.

What's the difference between a disapproved product and one that's just pending review?

Pending means Google has not finished its first review pass, which typically takes three to five business days after a new item syncs. Disapproved means the review finished and found a specific policy or data problem — visible on the item's own row in the Needs attention tab, with the exact attribute that failed named.

Can I use a barcode I generated myself instead of buying a real GTIN?

No. A self-generated number that happens to be 12 or 13 digits is not a GTIN — GTINs are licensed to a specific brand owner through GS1, and Google checks submitted values against that ownership data. A fabricated GTIN risks matching an unrelated product's listing, which produces a disapproval, not an approval.

Does setting identifier_exists to false hurt a listing compared to a real GTIN?

A listing marked identifier_exists false is treated as a legitimately unidentified product and can still run, but it does not get the catalogue matching, review aggregation and price-comparison data that a GTIN-backed listing receives from Google's own product catalogue. It is a valid setting for genuinely unbranded items, not a shortcut for branded ones missing data.

How long does a fix actually take to clear the Needs attention tab after I resubmit?

Google's own guidance puts diagnostics page updates at 24 to 72 hours after a corrected value syncs. A fix submitted Monday morning can realistically still show as disapproved Tuesday; that is normal processing lag, not a failed fix, and re-submitting the same correction repeatedly does not speed it up.

Do free listings and Shopping ads use the same product feed?

Yes, for a standard Shopify setup. The Google & YouTube channel submits one feed to Merchant Center, and both free product listings and paid Shopping ads draw from that same submitted data and the same identifier and attribute requirements — there is no separate feed to maintain for each surface.

What happens if two products in my catalogue accidentally share the same GTIN?

Both listings pick up a GTIN-mismatch flag, since Google's matching cannot tell which of the two the code actually belongs to. This is usually a copy-paste error during a catalogue migration or a bulk import, most often between a bundle and the single unit sold inside it, and the practical fix is auditing which SKU copied the other's barcode rather than assuming either one is correct.

Is a barcode required on every product variant, or just the parent product?

Every variant that is a distinct sellable item needs its own barcode. A shirt sold in three sizes has three different GTINs if the manufacturer assigned separate ones, or none if it genuinely never had them — Shopify stores the barcode at the variant level specifically because Google evaluates each variant as its own feed item.

Is Merchant API the same thing as Shopify's Google & YouTube channel?

No. The Google & YouTube channel is a Shopify app most stores never need to look past. Merchant API is Google's own programmatic interface, relevant only to a team running a custom feed integration or replacing the deprecated Content API for Shopping — most Shopify catalogues never touch it directly.

Does a price mismatch get a product disapproved immediately, or is there a grace period?

There is no grace period stated in Google's own guidance. A landing-page price check runs against live pages on an ongoing basis, and a mismatch — a sale price in the feed the page does not reflect, or the reverse — can trigger disapproval on that item as soon as the check runs, not only at initial submission.

What if the GTIN printed on a supplier's packaging doesn't match what the supplier told me?

Trust the packaging over a spreadsheet or an email, and verify it independently using GS1's GEPIR lookup tool before entering it in Shopify, since GEPIR shows which brand actually owns that GTIN. Supplier paperwork is regularly out of date after a repackaging or a private-label change, and packaging is closer to what was actually manufactured and shipped.

Do custom labels affect whether Google approves or disapproves an item?

No. Custom labels are a Shopping campaign segmentation tool for bidding and reporting — they have no bearing on Merchant Center's approval decision. Confusing the two is common because both are configured near the same product settings; approval depends only on the required identifier, category and policy attributes.

Should disapprovals be fixed in Merchant Center directly, or back in Shopify first?

In Shopify first, for anything the Google & YouTube channel actually syncs — barcode, price, images, description — since a fix made only inside Merchant Center gets overwritten on the next sync. Merchant Center-only edits make sense solely for attributes the native channel does not expose, which is one of the reasons a dedicated feed app becomes worth running at scale.

Next step

Is this your catalog & feeds problem, or a symptom of another one?

Bring your numbers — the churn split, the decline rate, whatever your flows are earning — and we will tell you which of them is the expensive one.

Book a call →