All templatesAudits45-60 minutesUpdated 3 May 2026

Feed Column Hygiene Audit

The most-broken levers in Shopping campaigns that nobody is auditing.

Who this is for

  • Shopify or Magento operators on PMax / Shopping
  • Brands expanding into a second or third country
  • Anyone who has not opened their feed export in 90+ days

Why this exists

The feed is the cheapest 30% of ROAS hiding in most accounts. Buyers fixate on bid strategies and creative; the feed columns get treated as a Shopify export problem. This audit walks the feed top to bottom and surfaces the hygiene fixes that move CPCs and CVRs without changing a single bid.

Read this first

Most Shopping performance is decided before the bid strategy ever runs. Title structure tells the auction what query the product matches. Custom labels tell PMax which asset group should pick it up. Store quality and reviews aggregate into Google's seller-rating overlay. Every one of these is a feed column. None of them are bidding. This audit goes through the levers that do the work and shows you which ones are silently broken.

How to run the audit

  1. Pull the live feed export from GMC

    Settings, Feeds, primary feed, fetch the latest. Alternatively, run the Shopify Google channel preview or your feed-management tool's debug export. You want the actual XML or TSV that Google's crawler sees, not what's in your Shopify admin. The two often differ when feed rules or supplemental feeds are layered on.

  2. Score titles against the operator structure

    Working pattern is: brand, then product type, then key attribute (size / color / material), then variant identifier. Example: 'Smooche Rose Gold Hoop Earrings, 18mm, Sterling Silver'. Score each title 0-3: 0 = brand only or generic, 1 = brand plus type, 2 = brand plus type plus attribute, 3 = full structure. Below 2 across the catalog is a fix-this-week-level finding because title structure compounds across every impression.

  3. Audit custom_label_0 through custom_label_4

    Empty labels are the single most common feed leak. Run a count: what percentage of products have something in custom_label_0? custom_label_1? Below 80% population on the labels you actually use as PMax filters and your asset-group routing is randomised. Map the convention from the PMax Structure Audit (brand isolation / margin tier / seasonality / performance tier / reserved) and back-fill before doing anything else.

  4. Run GMC compliance pre-flight

    Open Diagnostics, Item issues. List every disapproval reason and count. The top three usually account for 80% of disapprovals. Fix patterns, not individual SKUs: if 200 items are flagged for missing GTIN, the fix is a feed rule that maps GTIN from your barcode field, not 200 manual edits. Re-fetch and watch the issue count drop.

  5. Validate store quality and reviews aggregation

    Open Manage programs, Product ratings. Either you have a reviews source connected (Trustpilot, Yotpo, Reviews.io, third-party feed) or your stars are missing from the SERP. Stars are a free CTR uplift; running Shopping without them is leaving 5-15% off the top.

  6. Multi-country expansion readiness check

    If you sell into more than one country, every column above multiplies. Currency, language, shipping settings, returns policy, country-specific GTINs, regional labels. Use the Multi-country attribute on Diagnostics to see per-country approval rates. A clean US feed with a 60%-disapproved UK feed reads as 'half your spend is going to phantom inventory'.

Title structure scoring matrix

Run every product title through this scorer. Below 2 across the catalog is the fix-this-week finding.

Title fragmentScoreWhy it matters
Brand only or generic ('Hoop Earrings')0No matching surface for non-brand long-tail. Auction reads it as commodity inventory.
Brand + product type ('Smooche Hoop Earrings')1Catches brand-led queries. Misses everything else.
Brand + type + key attribute ('Smooche Rose Gold Hoop Earrings')2Workable. Picks up attribute-led search. Most ecom titles plateau here.
Brand + type + attribute + variant ('Smooche Rose Gold Hoop Earrings, 18mm, Sterling Silver')3Compounds. Variant identifiers catch high-intent long-tail and survive future query-matching tightening.

GMC compliance pre-flight, the 14 patterns that trigger item disapprovals

  • Missing or invalid GTIN where the manufacturer publishes one
  • Missing brand attribute on products from a known manufacturer
  • Price mismatch between feed and landing page (most-common silent killer)
  • Image issues: promotional overlays, watermarks, placeholder graphics, low resolution
  • Out-of-stock products still showing as in-stock in the feed
  • Shipping setting absent for the destination country
  • Returns and refunds policy missing from the linked GMC merchant profile
  • Restricted product categories (supplements, alcohol, age-gated items) without compliance flags
  • Tax setting wrong for the destination country (US state tax in particular)
  • Title or description containing prohibited promotional text (FREE SHIPPING, BEST PRICE, all-caps)
  • Adult-content classification miscategorised on apparel and intimate categories
  • Misrepresentation flag from review history of pricing changes
  • Landing page that bounces or 404s for any meaningful share of products
  • Currency mismatch between the feed declaration and the actual landing page

Custom labels strategy that compounds

The custom_label fields on a Google Shopping feed are five user-defined strings per product. Google does not interpret them; they exist purely so that asset-group selectors inside PMax (and product groups inside Standard Shopping) can filter on values you control. The practical implication: how you populate them dictates how the algorithm reads your inventory.

The convention that survives across vertical and account size is: custom_label_0 is brand isolation (brand vs non-brand for accounts that sell multiple brands; primary line vs accessory line for single-brand accounts). custom_label_1 is margin tier (high / mid / low based on contribution margin per unit, not price tier). custom_label_2 is seasonality (always-on / seasonal / clearance). custom_label_3 is performance tier, refreshed weekly from your own data (winner / mid / new). custom_label_4 stays reserved for ad-hoc flags such as test groups, supplier promos, and geo splits.

The reason this convention works is that every PMax asset group can then filter cleanly on independent dimensions. An always-on high-margin winner asset group selects products where label_1=high AND label_2=always-on AND label_3=winner. The campaign learns against a coherent inventory slice and the bidding compounds. Without populated labels, the same asset group selects the entire catalog, the algorithm reads noisy signal, and the spend chases whatever converts cheapest in the moment.

What good looks like at the end of this audit

Title structure scoring 2+ across 80% of the catalog. Custom labels 0 through 3 populated on 95%+ of products with the right convention. GMC item issues count below 2% of total products. Store quality + reviews aggregation showing stars on every SERP. Multi-country approval rates above 90% in every country you sell to. The feed is no longer the cheapest 30% of ROAS hiding in your account.

External resources

Authoritative references we link to alongside the template. Read them before running the audit.

Want this run for you?

Apply for a free audit. Patrick walks you through the most- relevant sections against your real account.