Back to Academy
Phase 7: Feeds & Marketplaces 路 Lesson 6Intermediate

Troubleshooting disapproved products

Lesson 53 of 813 min read

Disapprovals are the feed ecosystem's error messages, and like most error messages, they're precise about what and vague about why you got here. This is the field guide: the major disapproval families in rough order of frequency, what each actually means, and the diagnostic path per family. (Google's vocabulary throughout, since GMC is where you'll troubleshoot most - but the taxonomy maps to every channel.)

Price and availability mismatch - the freshness family

The most common family, and it's the staleness problem from this phase's first lesson: Google crawled your product page and found a different price or stock status than the feed declared. Diagnostic sequence: check the timing first (a sale launched or ended recently? sync lag is the usual suspect - check your feed's refresh cadence against your price-change rhythm); then the page rendering (does your theme show prices in a way that confuses extraction - JavaScript-rendered prices, market-dependent currency display? Google's structured data on the page, from Phase 5, is precisely the disambiguation instrument here); then market mismatch (a multi-currency store serving Google's crawler a different market's price than the feed's - the Markets thread again). The structural fix is almost always tightening the sync or fixing the page's schema - item-by-item resubmission is treating symptoms.

Missing or invalid identifiers - the GTIN family

"Limited performance due to missing identifiers" or hard disapproval for invalid GTINs. Meaning: no barcode, a made-up barcode, or a barcode that fails checksum/registry validation. The fixes in order of correctness: get real GTINs from suppliers (they nearly always exist for branded goods - asking is the fix); for genuinely GTIN-less products (own-manufacture), set identifier_exists = false rather than fabricating (fabrication risks worse: mismatched identifiers are a trust strike); and audit for the classic import error - the same GTIN pasted across many variants (each variant needs its own).

Policy families: images, restricted content, misrepresentation

Image disapprovals: promotional overlays ("SALE" burned into the image), watermarks, placeholder images - the fix is clean product photography as the feed's image_link, with promotional imagery kept on-site. Restricted/prohibited content: category-dependent rules that fashion mostly avoids but lifestyle catalogs graze (supplements, blades, CBD-adjacent) - check the actual policy text; wording adjustments in titles/descriptions often resolve borderline flags. Misrepresentation: covered in the suspension lesson - at the item level it usually means claim-substantiation gaps ("bestseller," pricing claims) or policy-page weaknesses. The account-hygiene checklist from that lesson is the fix.

The triage rhythm

The operating routine that keeps all of this boring: the weekly diagnostics glance (Phase 3's habit) catches new disapproval types early; work by issue-type-sorted-by-count, never item-by-item (the batch principle from the GMC deep dive); after each fix, request re-review where required and verify recovery in the item counts a few days later - silent non-recovery is common and unannounced. And log the recurring types quarterly: a disapproval family that keeps returning is pointing at a process gap upstream - a supplier data feed, a sale-launch runbook, a theme rendering issue - and the durable fix always lives there, one level up from where the error message pointed.