google merchant feed validator.
check every item against the merchant center product data spec for the country you sell in
drop your feed here, or
csv, tsv, txt or google shopping xml. column names must be the merchant center attribute names, because that is what google reads.
read in this browser tab. nothing is uploaded, stored or sent anywhere.
this checks compliance with google's spec. for how well the same feed reads to ai assistants and shopping surfaces, try the ecommerce feed checker.
> what the spec requires in united states
every attribute in the merchant center product data specification, with the limit google applies and whether it is required for shopping ads and free listings in united states. change the country or destination above and this table changes with it.
required for every item, 7
id | Required. Maximum 50 characters, unique across the account, and stable between uploads.max 50 chars |
title | Required. Maximum 150 characters of plain text.max 150 chars |
description | Required. Maximum 5,000 characters.max 5,000 chars |
link | Required. The landing page URL, starting with http or https.max 2,000 chars · an absolute http or https URL |
image_link | Required. The main product image. At least 500 by 500 pixels, enforced from 31 January 2027.max 2,000 chars · an absolute http or https URL |
price | Required. A number with an ISO 4217 currency code. Excludes tax in the US and Canada, includes VAT or GST elsewhere.a number and an ISO 4217 currency code, for example 24.99 USD |
availability | Required. One of in_stock, out_of_stock, preorder or backorder, and it must match the landing page.in_stock, out_of_stock, preorder, backorder |
required for you, given the country and destination above, 10
availability_date | Required when availability is preorder or backorder, and the date should be shown on the landing page.max 25 chars · ISO 8601, for example 2026-10-01T13:00-0800 or 2026-10-01T13:00Z |
brand | Required for all new products except movies, books and musical recordings.max 70 chars |
gtin | GTIN is required where the manufacturer assigns one. Where there is none, send brand and MPN, or set identifier_exists to no.max 50 chars · 8, 12, 13 or 14 digits with a valid GS1 check digit |
multipack | Required for multipacks in Australia, Brazil, Czechia, France, Germany, Italy, Japan, Netherlands, Spain, Switzerland, the UK and the US, and for free listings.a whole number |
is_bundle | Required for bundles in Australia, Brazil, Czechia, France, Germany, Italy, Japan, Netherlands, Spain, Switzerland, the UK and the US, and for free listings.yes, no |
age_group | Required for apparel targeted to Brazil, France, Germany, Japan, the UK and the US, and for free listings on all Apparel & Accessories.newborn, infant, toddler, kids, adult |
color | Required for apparel targeted to Brazil, France, Germany, Japan, the UK and the US, and for free listings on all Apparel & Accessories.max 100 chars · up to 3 values · 40 chars each |
gender | Required for apparel targeted to Brazil, France, Germany, Japan, the UK and the US, and for free listings on all Apparel & Accessories.male, female, unisex |
size | Required for Clothing (1604) and Shoes (187) targeted to Brazil, France, Germany, Japan, the UK and the US, and for free listings on those categories.max 100 chars |
item_group_id | Required for variants in Brazil, France, Germany, Japan, the UK and the US, and for all variants in free listings.max 50 chars |
required in certain cases, 6
mpn | Required when the product has no manufacturer GTIN. Maximum 70 alphanumeric characters.max 70 chars |
identifier_exists | Set to no when the product genuinely has no brand, GTIN or MPN.yes, no |
condition | Required if the product is used or refurbished. One of new, refurbished or used.new, refurbished, used |
adult | Required if the product contains nudity or adult content.yes, no |
certification | Required for energy-labelled products in the EU, EFTA and the UK. Syntax authority:name:code, for example EC:EPREL:123456.authority:name:code, for example EC:EPREL:123456 |
google_product_category | A numeric taxonomy id or the full category path. Required for alcohol, mobiles sold with a contract, tablets and gift cards.a numeric taxonomy id or the full category path |
optional, 46
additional_image_link | Optional. Up to 10 additional images, each URL at most 2,000 characters.up to 10 values · 2000 chars each · an absolute http or https URL |
mobile_link | Optional. Mobile-optimised landing page URL, maximum 2,000 characters.max 2,000 chars · an absolute http or https URL |
video_link | Optional. Maximum 2,000 characters. 6 to 240 seconds, 720p minimum, 500MB maximum.max 2,000 chars · an absolute http or https URL |
virtual_model_link | Optional, United States only. A .gltf or .glb 3D model, maximum 15MB.max 2,000 chars · an absolute http or https URL · united states only |
document_link | Optional. Up to 5 PDF links, each at most 2,000 characters.up to 5 values · 2000 chars each · an absolute http or https URL |
sale_price | Optional. The discounted price, submitted alongside price.a number and an ISO 4217 currency code, for example 24.99 USD |
sale_price_effective_date | Optional. Two ISO 8601 timestamps separated by a slash, maximum 51 characters.max 51 chars · two ISO 8601 timestamps separated by a slash |
expiration_date | Optional. ISO 8601, and at most 30 days in the future.max 25 chars · ISO 8601, for example 2026-10-01T13:00-0800 or 2026-10-01T13:00Z |
cost_of_goods_sold | Optional. A number with an ISO 4217 currency code, using a period as the decimal point.a number and an ISO 4217 currency code, for example 24.99 USD |
auto_pricing_min_price | Optional. The floor for automated discounts.a number and an ISO 4217 currency code, for example 24.99 USD |
unit_pricing_measure | Optional. A number and a supported unit, for example 750ml.a number and a supported unit, for example 750ml |
unit_pricing_base_measure | Optional. One of 1, 2, 4, 8, 10, 100, 75cl, 750ml, 50kg or 1000kg.one of 1, 2, 4, 8, 10, 100, 75cl, 750ml, 50kg, 1000kg |
installment | Optional. months:amount, with optional downpayment and a credit_type of finance or lease.months:amount, optionally downpayment and credit_type of finance or lease |
subscription_cost | Optional. period:period_length:amount, where period is week, month or year.period:period_length:amount, period being week, month or year |
loyalty_program | Optional. Sub-attributes including program_label, tier_label, price and member_price_effective_date.no format constraint |
material | Optional. Maximum 200 characters, a primary material plus up to two secondary, separated by a forward slash.max 200 chars · up to 3 values |
pattern | Optional. Maximum 100 characters.max 100 chars |
size_type | Optional, apparel only. Up to two of regular, petite, maternity, big, tall or plus.up to 2 values · regular, petite, maternity, big, tall, plus |
size_system | Optional, apparel only. The country whose sizing the size value uses.US, UK, EU, DE, FR, JP, CN, IT, BR, MEX, AU |
item_group_title | Optional. The parent product name, identical across every variant. Maximum 150 characters.max 150 chars |
variant_option | Optional. Up to 30 values, 5,000 characters total, name and value at most 250 characters each.up to 30 values |
product_length | Optional. A number and a unit of cm or in, maximum 3000, matching the other dimensions.a number and a unit of cm or in, up to 3000 |
product_width | Optional. A number and a unit of cm or in, maximum 3000, matching the other dimensions.a number and a unit of cm or in, up to 3000 |
product_height | Optional. A number and a unit of cm or in, maximum 3000, matching the other dimensions.a number and a unit of cm or in, up to 3000 |
product_weight | Optional. A number and a unit of lb, oz, g or kg, maximum 2000. This is the assembled product weight, not the shipping weight.a number and a unit of lb, oz, g or kg, up to 2000 |
product_detail | Optional. section_name:attribute_name:attribute_value, at most 100 details, names at most 140 characters and values at most 1,000.up to 100 values · section_name:attribute_name:attribute_value |
product_highlight | Optional. Between 2 and 100 highlights, each at most 150 characters, describing the product only.max 150 chars · up to 100 values · at least 2 values · 150 chars each |
question_and_answer | Optional. Up to 30 pairs, 10,000 characters total, question and answer at most 1,000 characters each.up to 30 values · question:answer |
related_product | Optional. relationship_type:identifier_type:identifier, up to 30 values.up to 30 values · relationship_type:identifier_type:identifier |
product_type | Optional. Your own category path, maximum 750 characters, full path only.max 750 chars |
ads_redirect | Optional. Must share a registered domain with link. Maximum 2,000 characters.max 2,000 chars · an absolute http or https URL |
custom_label_0 | Optional. Maximum 100 characters. Up to five labels, custom_label_0 to custom_label_4.max 100 chars |
custom_label_1 | Optional. Maximum 100 characters.max 100 chars |
custom_label_2 | Optional. Maximum 100 characters.max 100 chars |
custom_label_3 | Optional. Maximum 100 characters.max 100 chars |
custom_label_4 | Optional. Maximum 100 characters.max 100 chars |
popularity_rank | Optional. A number from 0 to 100 using a period as the decimal point.a number between 0 and 100 using a period as the decimal point |
excluded_destination | Optional. Destinations this item should not appear in.no format constraint |
included_destination | Optional. Destinations this item should appear in.no format constraint |
shipping | Optional. country:region:service:price. Overrides your account shipping settings.country:region:service:price |
shipping_weight | Optional. Needed for carrier-calculated rates.a number and a unit of lb, oz, g or kg, up to 2000 |
shipping_label | Optional. Your own label for shipping rules.max 100 chars |
min_handling_time | Optional. Whole days before dispatch.a whole number |
max_handling_time | Optional. Whole days before dispatch.a whole number |
tax | Optional, United States only. Overrides account tax settings.no format constraint |
tax_category | Optional. Your own tax grouping.no format constraint |
google ignores these for the country above, 4
maximum_retail_price | Optional, India only.a number and an ISO 4217 currency code, for example 24.99 USD · india only |
energy_efficiency_class | Optional, and only used for Switzerland, Norway and the UK.A+++, A++, A+, A, B, C, D, E, F, G · switzerland, norway, united kingdom only |
min_energy_efficiency_class | Optional, Switzerland, Norway and the UK only.A+++, A++, A+, A, B, C, D, E, F, G · switzerland, norway, united kingdom only |
max_energy_efficiency_class | Optional, Switzerland, Norway and the UK only.A+++, A++, A+, A, B, C, D, E, F, G · switzerland, norway, united kingdom only |
what this cannot check
- needs the image fetched, dimensions including the 500 by 500 minimum google enforces from 31 january 2027, file format, watermarks and promotional overlays, and whether the image host blocks google.
- needs the landing page fetched, whether the price and availability in the feed match the page. that mismatch is one of the most common real disapprovals and no file can show it.
- needs your account, shipping, tax and returns settings, policy strikes, restricted category approval, and feed rules that rewrite values after upload.
- limits of the data, a gtin check digit proves the digits are self-consistent, not that the barcode was ever assigned. bundles and multipacks cannot be told apart from ordinary items in a file, so those rules are shown as prompts rather than failures.
> why run this at all
the rules change by country, and nothing tells you that
Google requires age_group, gender and colour on apparel only in Brazil, France, Germany, Japan, the UK and the US. Size is required for clothing and shoes in those same six. is_bundle and multipack are required in a list of twelve countries. certification is required for energy-labelled goods in the EU, EFTA and the UK. energy_efficiency_class is only used in Switzerland, Norway and the UK, and maximum_retail_price only in India. A feed that passes in Ireland can be full of disapprovals in Germany.
a disapproved item is invisible, quietly
There is no error in your store, no drop you can attribute, no email. The item simply stops appearing. By the time anyone notices the pattern in Merchant Center, the feed has usually been shipping the same mistake on thousands of items for weeks.
the limits are specific, and specific limits get broken
Brand is capped at 70 characters. A single colour value at 40, inside a colour field capped at 100. product_type at 750. Ten additional images, no more. Two to a hundred product highlights, each at 150. Nobody remembers these, which is why a validator that holds the whole spec is worth more than a spot check.
a misspelled column is a missing attribute
Google reads the attribute names it publishes and ignores everything else. additional_image_links with an s on the end is not additional_image_link, and the images never arrive. This validator keys strictly on the official names, so a typo shows up as an unrecognised column rather than being quietly absorbed.
> worked example
An apparel feed targeting the UK returns 2,140 items breaking a required rule. The top entries are age_group missing on every apparel item, gender missing on the same set, and size missing on the clothing lines. Switch the target country to Ireland and the same file returns zero: none of those four attributes is required there for shopping ads. Switch the destination to free listings and they come back, because free listings require them everywhere.
takeaway, The question is never whether a feed is valid. It is whether it is valid for the country and destination you are selling into.
> when operators reach for this
- Ecommerce managers opening a new country and wanting to know which attributes that country adds before the first upload.
- Feed developers checking a build against the spec locally rather than uploading and waiting for Merchant Center to report back.
- Agencies inheriting an account with disapprovals and needing a per-attribute list of what is actually broken, exported per item.
- Merchandisers spot-checking one SKU that Merchant Center flagged, using the single item mode rather than exporting the whole catalogue.
- Anyone who has renamed a feed column and wants to confirm Google still recognises it.
> the calculation
- verdict, not score
items breaking a required rule · items with a warning · items with nothing flagged - required
the spec says the attribute is required, or required for your country, category or destination - warning
the spec states a limit or a condition we cannot fully confirm from a file alone - which rules run
country + destination + category of each itemConditional rules are compiled against your country and destination first, so only the rules that can apply to you are evaluated. The rest are listed with the reason they do not apply. - category detection
numeric google_product_category matched against the published taxonomy, text paths matched on the category nameApparel, clothing and shoes, media, alcohol and the energy-labelled categories are taken from Google's own taxonomy file rather than guessed.
Frequently asked questions
- What is the Google Merchant Center product data specification?
- It is the document that defines every attribute you can send in a product feed, which ones are required, what values are allowed, and how long each field can be. Google validates uploads against it, and items that break a required rule are disapproved rather than corrected. This tool checks a feed against that specification before you upload.
- Which requirements change by country?
- Apparel is the big one. age_group, gender and color are required for apparel targeted to Brazil, France, Germany, Japan, the UK and the US. size is required for Clothing and Shoes in those same countries, and item_group_id is required for variants there. is_bundle and multipack are required in Australia, Brazil, Czechia, France, Germany, Italy, Japan, Netherlands, Spain, Switzerland, the UK and the US. certification is required for energy-labelled goods in the EU, EFTA and the UK. Two attributes are country-limited in the other direction: energy_efficiency_class is only used for Switzerland, Norway and the UK, and maximum_retail_price only in India.
- What is the difference between Shopping ads and free listings?
- Free listings are stricter. The apparel attributes are required on all Apparel & Accessories products rather than only in the six named countries, item_group_id is required on all variants, and is_bundle and multipack apply too. If you appear in both, validate against both, which is the default here.
- Does this replace Merchant Center diagnostics?
- No, it runs before them. Merchant Center tells you what was rejected after you have uploaded and waited for processing. This tells you what will be rejected, and it does it for a country you have not launched in yet, which diagnostics cannot do because there is nothing uploaded to diagnose.
- What can it not check?
- Anything that needs to fetch something. It cannot confirm the price and availability in your feed match the landing page, which is one of the most common real disapprovals. It cannot check image dimensions, format or watermarks, or whether the image host blocks Google. It cannot see your account settings, policy strikes or category approvals. And it cannot tell a bundle or a multipack from an ordinary item in a file, so those rules appear as prompts rather than failures.
- Why is my column listed as not a Merchant Center attribute?
- Because Google reads the exact attribute names it publishes. This validator matches strictly on those names, so msrp is not read as price and additional_image_links is not read as additional_image_link. That is deliberate: a loose match would hide the exact mistake that stops an attribute reaching Google.
- How is this different from the ecommerce feed checker?
- Different question. This one asks whether Google will approve each item, against the specification, for one country and destination. The feed checker asks how well the same file reads to shopping surfaces and AI assistants, which includes things Google does not require at all, such as structured product details and returns information. Most teams want both, in that order.
- Is my feed uploaded anywhere?
- No. The file is read by your browser and validated in the tab you are looking at. Nothing reaches a server, nothing is stored, and there is no account or email step. You can disconnect from the internet after the page loads and it still works.
- How current are these rules?
- They were transcribed from the product data specification and the availability documentation, with category ids taken from Google's published taxonomy file rather than guessed. Google changes the spec periodically, and where it announces a future date, such as the 500 by 500 pixel image minimum enforced from 31 January 2027, the tool says so rather than enforcing it early.
> related calculators, ai & llm visibility
- ai bot access checkersee if gptbot, claudebot, perplexitybot and 10+ ai bots can read your store
- js rendering diff checkersee exactly what an llm sees when it fetches your page (no javascript)
- product schema inspectorpaste a pdp url → see which product schema fields are missing
- ai bots robots.txt auditorcheck which of 20+ ai bots your robots.txt actually blocks
- llms.txt generatorgenerate llms.txt + llms-full.txt for your store, llmstxt.org spec
- ai product description analyzerscore your pdp copy on llm-answer readiness