Google’s product data specification lists the attributes every product in your Merchant Center feed needs. Every product must have id, title, description, link, image_link, availability and price. Most also need brand, a product identifier (a gtin, which Google strongly recommends, or an mpn when there’s no GTIN), and shipping in 21 countries. Apparel sold in the US, the UK and four other countries needs gender, age_group, color and size. Miss a required attribute and the product can’t serve in ads or free listings.
If you run a WooCommerce store, don’t build this file by hand. Generate it from your store so price and stock stay current: here’s how with CTX Feed.
This guide was checked attribute by attribute against Google’s spec on October 19, 2026.
What is Google’s product data specification?
A product feed is a file that lists your products and their details, one item per product or variant. Google’s product data specification is the rulebook for that file. It says which attributes to send, which values Google accepts, and how long each one can be.
Google sorts every attribute into one of three groups:
- Required: send it, or the product can’t show in ads and free listings.
- It depends: required for some products or countries, such as apparel or variants.
- Optional: helps your product perform better.
Attribute names and supported values go in English, with underscores between words (image_link, not “image link”). Google uses the data to match your products to searches, and missing or wrong data causes disapprovals and limited visibility.
Required attributes at a glance
The “CTX Feed” column shows what a WooCommerce store’s Google feed contains when it’s built with CTX Feed’s Google Shopping template.
| Attribute | Required when | Format and limit (Google) | Example | CTX Feed fills it from |
|---|---|---|---|---|
id | Always | Max 50 characters | A2B4 | Pre-mapped by the template |
title | Always | Max 150 characters | Mens Pique Polo Shirt | Product title, capped at 150 |
description | Always | Max 5,000 characters | Plain text | Product description, capped at 5,000 |
link | Always | Your verified domain, http or https | Product URL | Pre-mapped by the template |
image_link | Always | JPEG, WebP, PNG, GIF, BMP or TIFF | Main image URL | Pre-mapped by the template |
availability | Always | in_stock, out_of_stock, preorder, backorder | in_stock | Stock status, written as Google’s underscore values |
price | Always | Number + ISO 4217 currency | 15.00 USD | Regular Price + currency suffix |
brand | New products (except movies, books, music) | Max 70 characters | Google | WooCommerce Brands, or your site name |
gtin | It depends: strongly recommended when the product has a manufacturer GTIN | Up to 14 digits per value | 3234567890126 | WooCommerce GTIN field or CTX Feed’s GTIN field (add the row) |
mpn | No GTIN | Max 70 characters | GO12345OOGLE | Pre-mapped to SKU (check it) |
condition | Used or refurbished | new, refurbished, used | new | Fixed text new |
shipping | Selling in 21 countries (below) | country:region:service:price | US:CA:Overnight:16.00 USD | WooCommerce shipping zones |
Required attributes: the rules for each
ID [id]
One unique value per product, max 50 characters. Google asks you to use the SKU where possible and keep the ID the same when you update your data, and across countries and languages.
Title [title] (or structured_title)
Max 150 characters. Match the title on your product page and leave out promotional text like “free shipping” or all-caps words. For variants, include the distinguishing feature, such as color or size.
Also in Google’s spec: if the title was written with generative AI, Google asks you to send it in structured_title instead. It has a content sub-attribute (the text, max 150 characters) and an optional digital_source_type set to trained_algorithmic_media for AI text. Human-written titles stay in title. CTX Feed’s Google template sends title; structured_title isn’t in its attribute list.
Description [description] (or structured_description)
Max 5,000 characters, matching your product page. Include only information about the product: no links to your store, sale details, competitors or accessories. Line breaks, lists and italics are allowed. The AI rule is the same as for titles: AI-written descriptions go in structured_description.
Link [link]
Your product page URL on your verified domain, starting with http or https. Don’t link to an interstitial page unless the law requires it.
Image link [image_link]
The URL of the main product image. Google accepts JPEG, WebP, PNG, non-animated GIF, BMP and TIFF. Don’t upscale images or send thumbnails, and don’t add promotional text, watermarks or borders. Placeholder and generic images aren’t allowed. The image URL must be crawlable by Googlebot and Googlebot-image.
Plan for the new size rule now. Google requires images of at least 500 x 500 pixels for all products from January 31, 2027. It recommends around 1500 x 1500 pixels, with no image over 64 megapixels or 16 MB. Images made with generative AI must keep their AI metadata, for example the IPTC DigitalSourceType tag.
Availability [availability]
One of four values: in_stock, out_of_stock, preorder or backorder. It must match your product page, checkout and structured data. For preorder, add availability_date. Google asks for it with backorder too. CTX Feed writes WooCommerce stock status in Google’s underscore form, never “in stock” with a space. More detail: Google Shopping availability attribute.
Price [price]
The number and an ISO 4217 currency code, for example 15.00 USD. The price must match your product page, structured data and checkout, and anyone must be able to buy at that price without joining a membership. A price of 0 isn’t allowed, except for some contract and subscription products.
Tax depends on the country:
- US and Canada: no taxes of any kind in
price. - Other countries: include VAT or GST in
price.
Google’s current spec has no separate tax attribute row, and its tax page covers only these price rules. CTX Feed writes the price as a bare number followed by the currency from the template row, the "48.00 USD" shape Google expects. Set the feed’s Country correctly, because it controls the currency and tax handling.
GTIN, MPN and identifier_exists
- GTIN: Google marks it “it depends” and strongly recommends it whenever the manufacturer has assigned one. UPC (12 digits), EAN (13), JAN (8 or 13), ISBN-13 and ITF-14 are all GTINs. Send only valid GTINs. A wrong one gets the product disapproved, and a product sent without its GTIN may get limited visibility.
- MPN: required only when there’s no GTIN. Send only MPNs the manufacturer assigned.
- identifier_exists: set to
nowhen the product genuinely has no GTIN, or no MPN and brand combination (custom or handmade goods). Settingnoon a product that does have identifiers can get it disapproved.
In WooCommerce: WooCommerce 9.2 and later has a GTIN, UPC, EAN, or ISBN field on the product’s Inventory tab. CTX Feed can map it, or you can turn on CTX Feed’s own GTIN, MPN, EAN and ISBN fields under CTX Feed → System → Settings. The Google template has no gtin row, so add one, and its mpn row reads your SKU. If your SKU isn’t the manufacturer’s part number, point the row at a real MPN field. Google disapproves incorrect MPNs. CTX Feed adds identifier_exists to Google feeds automatically.
Brand [brand]
Max 70 characters, required for all new products except movies, books and music. Use the brand shoppers recognise. Use your own store name only if you make the product or sell private label. If a product truly has no brand, leave the field empty: never send “N/A” or “Generic”.
On a new CTX Feed Google feed, the brand row is set to Parent Brand (WooCommerce) when your store uses WooCommerce Brands. Otherwise it’s your site name as fixed text, so change it if you resell other brands. See how to add brand data to your feed.
Condition [condition]
Required if the product is used or refurbished. Optional for new products. Values: new, refurbished, used. CTX Feed’s Google template sends the fixed text new, so map it to a product field if you sell used or refurbished stock.
Shipping [shipping]
Shipping costs are required for Shopping ads and free listings in Australia, Austria, Belgium, Canada, Czechia, France, Germany, India, Ireland, Israel, Italy, Japan, the Netherlands, New Zealand, Poland, Romania, South Korea, Spain, Switzerland, the UK and the US. Send it in the feed, or set shipping in your Merchant Center account; the feed attribute overrides the account settings. Don’t include government fees such as import duties in the shipping cost.
CTX Feed builds the full <g:shipping> block from your WooCommerce shipping zones (country, service and price in the feed currency) when the Shipping row is set to Shipping (Google Format). If you’d rather keep rates in Merchant Center, send a shipping_label per product instead. Setup: Google shipping attribute guide.
Conditional attributes: required for some products
These are “it depends” attributes. They’re optional in general but required for the products and countries below.
| Attribute | Required when (Google) | Values or limit |
|---|---|---|
gender | Apparel targeted to Brazil, France, Germany, Japan, the UK or the US, plus gender-specific products | male, female, unisex |
age_group | Same apparel countries, plus products with an assigned age group | newborn, infant, toddler, kids, adult |
color | Same apparel countries, plus products sold in different colors | Max 100 characters; separate colors with / |
size | Clothing and shoes in the same countries, plus products sold in different sizes | Max 100 characters |
item_group_id | Variants in Brazil, France, Germany, Japan, the UK and the US | Max 50 characters; use the parent SKU where possible |
material, pattern | When they distinguish variants | material max 200 characters |
availability_date | preorder items | ISO 8601, up to a year ahead |
is_bundle | Merchant-made bundles with a main product, in 12 countries | yes, no |
adult | Products with sexually suggestive content | yes, no |
certification | EU products that must show an energy label (EPREL) | e.g. EC:EPREL:123456 |
energy_efficiency_class | Only for Switzerland, Norway and the UK, where the law requires it | A+++ to G |
promotion_id | Promotions in Australia, France, Germany, India, the UK and the US | Max 50 characters |
Variants in WooCommerce. Each variation becomes its own item. All variants of one product share an item_group_id, and each carries its own size or color. Google’s spec also adds item_group_title (one title for the whole group) and variant_option (name and value pairs such as “Memory size:128 GB”).
CTX Feed’s Include variations setting defaults to All Variations, one row per variation. The Google template maps item_group_id to Parent Id [Group Id], so every variation reports its parent’s ID and groups under one product. Add the size, color, material and pattern rows on the Config tab. For simple products, item_group_id is the product’s own ID.
Feed formats Google accepts: XML, TSV and TXT
Google’s file-upload pages list three file types: .xml, .txt and .tsv, up to 4 GB per file. HTML, PDF and raw spreadsheet files can’t be processed.
- XML (
.xml, RSS 2.0 or Atom 1.0): each product is an<item>, and Google attributes use theg:namespace,xmlns:g="http://base.google.com/ns/1.0". In XML, an attribute with sub-attributes, such asshipping, is a nested element:<g:shipping>holds<g:country>,<g:service>and<g:price>. - Tab-delimited text (
.txtor.tsv): one row per product and one column per attribute, with attribute names in the first row. Save as UTF-8 or UTF-16.
Here’s what one item looks like in XML:
<item>
<g:id>TV_123456</g:id>
<g:title>Google Chromecast with Google TV</g:title>
<g:link>https://store.google.com/product/chromecast_google_tv</g:link>
<g:image_link>https://images.example.com/TV_123456.png</g:image_link>
<g:availability>in_stock</g:availability>
<g:price>49.99 USD</g:price>
<g:shipping>
<g:country>US</g:country>
<g:service>Standard</g:service>
<g:price>7.99 USD</g:price>
</g:shipping>
<g:gtin>123456789123</g:gtin>
<g:brand>Google</g:brand>
</item>
The example is adapted from Google’s own; Google’s sample writes availability as “in stock”, and the spec’s value is in_stock.
CTX Feed writes Google feeds as XML by default, with <item> inside an RSS 2.0 channel, and also offers TSV and TXT. For a sample file to compare against, see our Google Merchant Center data feed template.
How to generate a Google product feed from WooCommerce
A WooCommerce store already has the data Google wants: titles, prices, stock, images, variations and shipping zones. CTX Feed turns that data into a Google feed and rebuilds the file on the update interval you set, so there’s no spreadsheet to re-export. All Google attributes and templates are in the free plugin.
- In WordPress, go to CTX Feed → Manage Feeds and click Make Feed.
- Set Country to the country you sell to. It’s required, and it sets the feed’s currency and tax handling.
- Choose the Google Shopping template. It loads Google’s attribute spec and pre-fills the mapping.
- Pick a File type (XML is the standard choice; TSV and TXT are offered too) and an Update interval.

- On the Config tab, check three rows: point google_product_category at a category mapping, fix condition and brand if the defaults don’t fit, and add a gtin row if your products have barcodes.

- Click Save & generate. Then, on Manage Feeds, click the Copy URL icon next to the Feed URL and leave Auto Update on.

- In Merchant Center, go to Data sources → Add product source → Add products from a file → Enter a link to your file, paste the URL and set a fetch schedule. Google fetches a linked file every 24 hours by default, and you can change that. Match the fetch time to your CTX Feed update interval.
Update intervals: 1 hour, 6 hours, 12 hours, 24 hours or weekly in the free plugin. Intervals of 5, 15, 30 or 45 minutes need CTX Feed Pro. Scheduled updates rely on WordPress cron.
Choosing products: on the Filters tab, the product-status filter is free. Removing out-of-stock, no-image or no-price products and limiting the feed to certain categories need CTX Feed Pro.
Full walkthrough with screenshots: How to upload a WooCommerce product feed to Google Merchant Center.
Optional attributes worth sending
None of these are required, but each gives Google more to work with.
| Attribute | What it does | Google’s rule |
|---|---|---|
sale_price | Shows a sale with the regular price crossed out | Send it with price set to the non-sale price; it must match your page and checkout |
sale_price_effective_date | Limits the sale to a date range | ISO 8601 start/end, start before end; without it the sale always applies |
additional_image_link | Extra images | Up to 10; lifestyle shots and graphics allowed |
google_product_category | Google’s category for the product | One category, the ID or full path (Google recommends the ID) |
product_type | Your own category path | Max 750 characters; only the first value is used for bidding |
product_highlight | Short benefit bullets | Max 150 characters each |
product_detail | Technical specs | Section, attribute name and value, e.g. General:Product Type:Digital player |
custom_label_0–custom_label_4 | Your labels for bidding and reports | Max 100 characters; 1,000 unique values per label; hidden from shoppers |
unit_pricing_measure / unit_pricing_base_measure | Price per unit (per 100 ml, per kg) | Required by local law in some markets |
cost_of_goods_sold | Your cost, for gross margin reporting | ISO 4217, . as the decimal point |
expiration_date | Stops a product showing | Less than 30 days ahead |
mobile_link | Separate mobile page | Same rules as link |
Sale price, done right. sale_price must be lower than price. If it isn’t, Google may disapprove the product. In WooCommerce, keep the full price in Regular price and the discount in Sale price. In CTX Feed, set the sale_price row’s value to Sale Price, so the field stays empty for products that aren’t discounted. Add sale_price_effective_date for scheduled sales: CTX Feed writes the WooCommerce sale dates as an ISO 8601 range. Guide: how to add sale price to your feed.
Custom labels are a definition here: values you choose (“clearance”, “high-margin”) to group products in Shopping campaigns. How to use them for bidding and segmentation is covered in our guide to keeping your Google Shopping feed accurate over time.
Category: to map WooCommerce categories to Google’s taxonomy, see category mapping.
Other ways to build a feed (and why they break for a store)
Google offers several ways to add products. Here’s where each fits:
- Product editor in Merchant Center. You type each product into a form. Google suggests it for “one or a few products.” For a store, every price or stock change is another manual edit, and each variant is a separate entry.
- Google Sheets template. You fill a spreadsheet that Merchant Center reads. It works for a small catalog that rarely changes. For a store, the sheet goes stale the moment a price, sale or stock level changes, and you keep one row per variant by hand. That’s how price and availability mismatches start.
- One-time file upload. You upload a .txt, .tsv or .xml file. Google’s own note: the data won’t sync automatically, and you must re-submit the file every time it changes.
- Merchant API. Google’s API for managing product data in code. It suits developers with a custom platform. A WooCommerce store can keep its catalog current without writing code: give Merchant Center the feed URL and let a scheduled fetch pick up each rebuild.
The common failure is the same in each case: a hand-kept copy drifts from your store. A feed generated from WooCommerce on a schedule, then fetched by Merchant Center from a link, doesn’t drift.
Types of Google feeds
Your main product file is the primary data source. Google supports a few others:
- Supplemental data source. Adds or updates attributes for products already in a primary source, matched by
id. It can’t add or remove products. Merchant Center only shows the Supplemental sources tab after you turn on the Advanced data source management add-on. - Promotions. Promotional offers, as XML, a tab-delimited file or a Google Sheet. CTX Feed has a free Google Promotions template that writes one row per promotion.
- Product reviews. Star ratings for Shopping ads and free listings, sent as a reviews data source. CTX Feed’s free Google Product Review template exports your WooCommerce reviews in Google’s review schema 2.4. Guide: make a Google product review feed.
- Local product and local inventory. For stores with physical locations. They tell Google which stores stock each product, keyed by
store_code. CTX Feed has a Google Local Inventory Ads template for local product data and a Google Local Product Inventory template for store-level inventory. - Manufacturer Center. A separate, free Google platform where brand owners and licensees manage product information for their brands. It has its own product data specification.
What happens when feed data doesn’t meet the spec
Incorrect, inaccurate or missing data can lead to disapprovals, limited eligibility or products displaying incorrectly. Google names the most common problems: a wrong google_product_category or gtin, missing variant attributes (item_group_id, color, size), low-quality images, and data that conflicts with your website.
In Merchant Center, every product issue is under Products → Needs attention, and each issue links to Google’s fix instructions. Fix the data at its source (the WooCommerce product, or the mapping on CTX Feed’s Config tab), regenerate the feed, and let Google fetch it again. For the common errors and their fixes, see Google Merchant Center disapproved products.
FAQ
What is a Google Shopping feed?
A file of your products and their attributes that you add to Google Merchant Center, formatted to Google’s product data specification. Google uses it to show your products in Shopping ads and free listings.
Which attributes are required for Google Merchant Center?
For every product: id, title, description, link, image_link, availability and price. Most products also need brand and an identifier: a gtin, which Google strongly recommends, or an mpn if there’s no GTIN. shipping is required in 21 countries, and apparel needs gender, age_group, color and size in Brazil, France, Germany, Japan, the UK and the US.
Does a Google Shopping feed require images?
Yes. image_link is required for every product. From January 31, 2027, Google requires images of at least 500 x 500 pixels.
What is the Google Merchant Center product data specification?
Google’s official list of product attributes, with their requirements, formats and supported values. It’s published in Merchant Center Help, and Google updates it: for example, a minimum image size of 500 x 500 pixels applies from January 31, 2027. It includes attributes for AI-written text (structured_title, structured_description) and for variants (variant_option).
What file formats does Google Merchant Center accept?
XML (.xml) and tab-delimited text (.txt or .tsv), up to 4 GB per file.
Can I exclude product variants from my Google Shopping feed?
Yes. In CTX Feed, set Include variations to Variable Products (Parent) to send one row per product. Or choose a single variation (default, cheapest, most expensive, first or last). All modes are in the free plugin.
What happens if I upload a feed with data quality issues?
Google can disapprove the affected products, limit their eligibility or show them incorrectly. The issues appear under Needs attention in Merchant Center, and products stay hidden until you fix them.
Wrap-up
Google’s spec is long, but for most WooCommerce stores the work comes down to three things. Send the seven always-required attributes. Get identifiers, brand and shipping right. Add the apparel and variant attributes when they apply. Then keep the feed generated from your store rather than copied by hand, so price and stock never drift.
Generate a Google-compliant feed from WooCommerce with CTX Feed (free on WordPress.org). Need 5-minute updates or out-of-stock filters? See CTX Feed Pro.
Free version on WordPress.org. Every Pro licence includes a 30-day money-back guarantee.