Google Shopping Feed Validator
Find the disapprovals before Google does. Drop your product feed here and get every fixable problem — checked against 28 documented rules, with the official reference for each one.
🔒 Your feed never leaves your browser.
What this tool checks — and what it cannot
Everything here runs in your browser against the feed file itself, so it covers the problems that live in the data: missing attributes, malformed prices, invalid GTINs, contradictory identifier settings, wrong enum values, duplicate ids.
It cannot check anything that requires visiting your website — whether the price in the feed matches your landing page, whether the image URL actually loads, whether the product page is up. Those are real disapproval causes, so a clean report here is not a guarantee of approval; it means the file-level problems are gone.
Every check this tool runs (28 rules)
File & structure
GMC-F01 No data rows
The file has a header but no product rows, or is empty entirely.
Fix: Export the feed again — an empty upload removes all products from your account.
GMC-F02 Header row missing
The first row must name the attributes (id, title, link, …). Without it Google cannot map the columns and rejects the whole feed.
Fix: Add a header row using the exact attribute names from the specification.
GMC-F03 Duplicate column
The same attribute appears in more than one column. Which value wins is undefined, so the feed must be fixed rather than guessed at.
Fix: Remove or rename the duplicate column.
GMC-F04 Unrecognized column
This column name is not a Google Shopping attribute. Custom columns are ignored by Google — harmless, but often a sign of a typo in an attribute name.
Fix: Check the spelling against the specification if this was meant to be a standard attribute.
GMC-F05 Row has a different number of columns than the header
A row with more or fewer fields than the header usually means an unescaped delimiter or line break inside a value — values silently shift into the wrong attributes.
Fix: Quote values that contain the delimiter, and remove line breaks inside fields.
Required attributes
GMC-R01 Missing id
Every product needs a unique id. Rows without one cannot be processed at all.
Fix: Use your SKU. Keep it stable — changing an id makes Google treat it as a new product and lose its history.
GMC-R02 Missing title
title is required and is the single strongest matching signal for shopping queries.
Fix: Add a descriptive title: brand, product type, and key attributes.
GMC-R03 Missing description
description is required for Shopping ads and free listings.
Fix: Add the product description used on the landing page.
GMC-R04 Missing link
link (the product landing page URL) is required.
Fix: Add the full URL of the product page, including https://.
GMC-R05 Missing image_link
image_link (the main product image URL) is required.
Fix: Add a direct URL to the main image file.
GMC-R06 Missing availability
availability is required and must be one of the accepted values.
Fix: Use in_stock, out_of_stock, preorder or backorder.
GMC-R07 Missing price
price is required for every product that is not exclusively a service.
Fix: Add the price as a number followed by the ISO currency code, e.g. 9.99 USD.
GMC-R08 Missing condition
condition is required for used and refurbished products, and recommended for everything else. Google assumes "new" when it is absent — which is a policy violation if the item is not new.
Fix: Set condition to new, refurbished or used.
Product identifiers
GMC-I01 Invalid GTIN
The gtin value fails GS1 validation (wrong check digit, wrong length, non-numeric characters, or spreadsheet damage such as scientific notation). Google rejects products whose GTIN it cannot verify.
Fix: Check the number printed under the barcode. Format the column as Text in your spreadsheet to stop it being mangled.
GMC-I02 identifier_exists is "no" but a GTIN was supplied
Setting identifier_exists to no declares that the product has no manufacturer identifier, so supplying gtin (or mpn) at the same time is a contradiction Google rejects.
Fix: Either remove the identifier_exists column for this row, or clear the gtin/mpn value.
GMC-I03 identifier_exists is "no" without brand or mpn
Products declared as having no identifier still need enough information to be recognized — Google expects a brand (and usually an mpn) on those rows.
Fix: Add your brand name. For genuinely unbranded custom items, use your store name as the brand.
GMC-I04 No product identifier at all
The row has no gtin and no brand+mpn pair, and does not declare identifier_exists=no. Most categories require an identifier; a few (custom-made goods, art, vintage) are exempt — which is why this is a warning, not an error.
Fix: Add the gtin, or a brand+mpn pair, or set identifier_exists to no if the product genuinely has no manufacturer identifier.
GMC-I05 Duplicate id
Two rows share the same id. Google keeps only one of them, so the other product silently disappears from your feed.
Fix: Give every product (and every variant) its own id.
Formats & enum values
GMC-M01 Invalid price format
price must be a number followed by a space and a 3-letter ISO 4217 currency code, e.g. "9.99 USD". A comma decimal separator ("9,99 EUR") or a currency symbol ("$9.99") is rejected.
Fix: Write prices as 9.99 EUR — full stop as the decimal separator, no thousands separators, no symbols.
GMC-M02 Invalid availability value
availability accepts only: in_stock, out_of_stock, preorder, backorder. Values like "In Stock", "available" or "yes" are rejected.
Fix: Use the exact lowercase value with underscores.
GMC-M03 Invalid condition value
condition accepts only: new, refurbished, used.
Fix: Use the exact lowercase value.
GMC-M04 Invalid URL
link and image_link must be absolute URLs starting with http:// or https://. Relative paths ("/products/x") and bare domains are rejected.
Fix: Use the full URL including the protocol and domain.
GMC-M05 Title too long
title is limited to 150 characters. Longer titles are truncated, and the cut usually lands mid-word in search results.
Fix: Put the most important words first and keep the title within 150 characters.
GMC-M06 Description too long
description is limited to 5000 characters; anything beyond that is dropped.
Fix: Trim the description, keeping the details buyers search for.
GMC-M07 Invalid identifier_exists value
identifier_exists accepts only yes or no (the older TRUE/FALSE forms are not accepted).
Fix: Use yes or no in lowercase.
Content quality
GMC-Q01 Title is in all capitals
Google's editorial rules prohibit gratuitous capitalisation. Fully capitalised titles are a common cause of "product data quality" disapprovals.
Fix: Use normal sentence or title case. Keep capitals only for acronyms and brand names.
GMC-Q02 Promotional text in the title
Promotional phrases ("free shipping", "sale", "best price", "!!!") are not allowed in the title attribute — they belong in a promotion, not the product name.
Fix: Remove the promotional wording from the title.
GMC-Q03 Placeholder or template text
The value looks like leftover template content (lorem ipsum, "N/A", "TBD", "{{product_name}}", "test"). These reach live feeds surprisingly often and read as broken data to buyers.
Fix: Replace with the real product data.
The three mistakes that cause most disapprovals
1. A GTIN that Google cannot verify
One transposed digit breaks the check digit and the product is rejected. Worse, spreadsheets
quietly destroy barcodes: a 13-digit number becomes 8.71E+12, and a UPC starting
with zero comes out 11 digits long. This validator runs the full GS1 check on your
gtin column, so those show up here rather than in a disapproval email.
2. identifier_exists contradicting the data
Setting identifier_exists to no declares that the product has no
manufacturer identifier. Submitting a gtin on the same row contradicts that
declaration and Google rejects it. Conversely, leaving the attribute out while providing
neither a GTIN nor a brand+MPN pair means the product has no identity at all.
3. Prices written the European way
Google requires 9.99 EUR: a full stop as the decimal separator, a space, then the
ISO currency code. 9,99 EUR and €9.99 are both rejected — which
catches out most sellers exporting from a locale that uses comma decimals.