Guide
Google Shopping feed: the complete guide
A Google Shopping feed is a file, or a live data source, that lists every product you sell with Google's attribute names: id, title, description, link, image_link, price, availability, brand, gtin and the rest. You add it to Google Merchant Center, which uses it for Shopping ads and free listings. This guide covers the specification and its limits, the three ways to submit it, the scheduled feed URL, the errors that keep products out and what to optimize once it is approved.
We connect your store, build the feed and keep it in sync. Updated 2026-10-27.
At a glance
- Required for every product: id (max 50 characters), title (max 150), description (max 5,000), link, image_link, availability, price, plus brand for new products and gtin wherever one exists.
- Formats: tab-delimited .txt or .tsv, or XML (RSS 2.0 or Atom 1.0), UTF-8 or UTF-16, up to 4 GB; Google Sheets and the Merchant Center API are the alternatives to a file.
- A scheduled fetch pulls the feed from a URL (http, https, ftp or sftp), every 24 hours by default. Products expire 30 days after their last refresh.
- Apparel sold in Brazil, France, Germany, Japan, the UK and the US also needs color, size, gender and age_group; variants need item_group_id.
- Textfinity builds the feed from Shopify, a CSV export, a Google-shaped XML feed or a Google Sheet as a CSV on a stable URL; we register that URL in Merchant Center as a scheduled fetch with you.
What a Google Shopping feed is
A Google Shopping feed (also called a Google Merchant Center feed or product data feed) is a structured list of your products, one row or item per product or variant, with values in the attribute names Google defines in its product data specification. Merchant Center reads it, checks each product against its policies and requirements, and makes approved products eligible for Shopping ads, Performance Max and free listings across Google surfaces.
The feed is the only product information Google uses for those listings. If a size, color or GTIN is not in the feed, Google does not know it, whatever your product page says. That is why the feed is usually built by a tool or app from the store's own data rather than typed by hand, and why its quality has a direct effect on which searches a product can show for.
Google Shopping feed specification: the attributes and limits
| Attribute | Status | Format and limit |
|---|---|---|
| id | Required | Unique per product, max 50 characters; keep it stable across updates (the SKU is ideal) |
| title | Required | Plain text, max 150 characters, no promotional text or all caps |
| description | Required | Plain text, max 5,000 characters, product information only |
| link | Required | Landing page on your verified domain, starting with http or https |
| image_link | Required | JPEG, WebP, PNG, non-animated GIF, BMP or TIFF; at least 500 x 500 pixels, enforced from January 31, 2027 |
| availability | Required | in_stock, out_of_stock, preorder or backorder (availability_date for preorder) |
| price | Required | Number plus ISO 4217 code, e.g. 29.90 EUR; excludes tax in the US and Canada, includes VAT elsewhere |
| brand | Required for new products | Max 70 characters; never N/A or Generic |
| gtin | Strongly recommended | Up to 14 digits, no dashes or spaces, valid under GS1 rules |
| mpn | Required if no gtin | Max 70 characters, manufacturer-assigned only |
| condition | Required if used or refurbished | new, refurbished or used |
| item_group_id | Required for variants (6 countries) | Max 50 characters, same value on every variant |
| color, size, gender, age_group | Required for apparel (6 countries) | gender: male, female, unisex; age_group: newborn, infant, toddler, kids, adult |
| google_product_category | Optional | One taxonomy ID or full path; the ID is recommended |
| product_type | Optional | Your own category path, max 750 characters |
| custom_label_0 to 4 | Optional | Max 100 characters each, up to 1,000 unique values per label |
| shipping | Required in some countries | Shipping costs are required for listings in Australia, Canada, Germany, Japan, the UK and the US; set them in the feed or in Merchant Center |
From Google's product data specification, checked 2026-10-27. The six apparel and variant countries are Brazil, France, Germany, Japan, the UK and the US.
How to submit a Google Merchant Center feed
Merchant Center accepts product data in three ways. A file, uploaded once or fetched on a schedule: tab-delimited .txt or .tsv, or XML in RSS 2.0 or Atom 1.0, compressed with gzip, zip or bz2 if you like, up to 4 GB and encoded in UTF-8 or UTF-16. A Google Sheet, which suits a small catalog maintained by hand. Or the Merchant Center API, which apps and platforms use to push updates programmatically.
For most stores the scheduled file is the right default: the store or feed tool publishes the feed at a stable URL, and Google fetches it on a timetable. A store app (Shopify's Google & YouTube channel, a WooCommerce plugin) uses the API instead and needs no URL, but gives you less control over titles, filters and labels. Textfinity publishes a comma-delimited CSV that Merchant Center fetches as a file data source on a schedule; we register the URL and the fetch time in your account with you, through access you give us or on a short call.
The Google Shopping feed URL and scheduled fetch
- The URL must start with http, https, ftp or sftp, and the file must be under 4 GB.
- Googlebot and AdsBot-Google must be able to reach the file: a robots.txt block or a login wall makes every fetch fail.
- Google fetches every 24 hours by default; you can change the time and frequency in the data source settings.
- Every product expires 30 days after its last refresh. A feed URL that stops updating, or a schedule that is paused, empties the account a month later.
- Keep the URL stable. A tool that publishes a new file name on each run forces you to re-enter it in Merchant Center every time.
- Time the fetch after your own sync: if the store syncs at 02:00 and the feed rebuilds by 02:15, a 03:00 fetch gets fresh prices.
Common Google Shopping feed errors and how to fix them in the feed
| Error in Merchant Center | Usual cause | Fix in the feed |
|---|---|---|
| Missing or invalid GTIN | Barcode column empty, or placeholder values like 0 | Join barcodes from a supplier sheet; send brand + mpn where none exist; identifier_exists no only when truly none |
| Price mismatch | Feed refreshed less often than prices change, or sale shown on site but not in the feed | Rebuild after each store sync; map sale prices to sale_price |
| Availability mismatch | Stock changes between fetches | More frequent sync and fetch; exclude low-stock items if the gap is large |
| Image too small or missing | Thumbnail URLs from the export, placeholder images | Map the full-size image column; exclude rows where that source column is blank |
| Missing apparel attributes | Color and size inside the title or an option string | Split option values into color and size; add gender and age_group by rule |
| Title too long or promotional | Store titles with "FREE SHIPPING" or SKU codes | Remove from regexp; rebuild titles from attributes under 150 characters |
| Missing shipping | No shipping settings for a required country | Set shipping in Merchant Center or map a shipping column |
| Encoding errors | Export saved in a legacy encoding | Re-export as UTF-8 or let the feed tool rewrite it |
Textfinity does not import Merchant Center diagnostics; read the error there, fix it in the feed, and the next fetch picks it up.
After approval: optimizing the feed
An approved feed is eligible; an optimized one matches more searches. The work after approval is mostly titles (put brand, product type and the attributes people search for in the first 70 characters), descriptions that state facts, accurate google_product_category and product_type, complete identifiers and custom labels that let you split campaigns by margin, season or bestseller status.
On the feeds Textfinity has profiled, the average product title uses about 20 of Google's 150 characters, and 18 of 20 feeds had at least one critical data issue, so there is usually room before any bidding change. The optimization guide linked below goes through each attribute.
Examples
Worked examples, by situation
Five stores, five different starting points for the same Google Shopping feed.
Apparel attributes the store never stored
Before
Title: Linen Shirt variant.title: Sand / M product.productType: Women's Shirts
After
color: Sand size: M gender: female age_group: adult item_group_id: 8812004
How we set it up
We map color with remove from regexp \s*/.*$ on variant.title and size with remove from regexp ^.*/\s* ; gender is a static value female with a condition if product.productType includes Women, else unisex; age_group is a static value adult; item_group_id is a rename of the product id.
German price format to Google's
Before
Preis: 29,90 €
After
price: 29.90 EUR
How we set it up
We read the WooCommerce CSV export by URL and map price with replace from regexp ^(\d+),(\d{2}).*$ to \1.\2 EUR. Prices stay VAT-inclusive, as Google expects outside the US and Canada.
From an unreadable XML to a clean feed
Before
<product><attributes><ean>…</ean></attributes></product> (nested custom schema)
After
Magento CSV export by URL → gtin, mpn, brand mapped by rename
How we set it up
Textfinity reads Google-shaped RSS or Atom XML with flat fields, not arbitrary schemas, so we switch the Magento source to its CSV export by URL, map gtin as a rename of ean and strip HTML from description with remove from regexp <[^>]+>.
A hand-kept sheet published as a feed URL
Before
Sheet columns: name, price_sek, photo, in_stock (yes/no)
After
title, price (450.00 SEK), image_link, availability (in_stock / out_of_stock)
How we set it up
We read the Google Sheet as the source and map availability as an advanced expression: if [in_stock] equals "yes" then "in_stock" else "out_of_stock"; price gets add suffix " SEK". The studio keeps editing the sheet, and each sync picks up the changes.
GTINs joined from the supplier's sheet
Before
Barcode: (empty on 41% of products)
After
gtin filled from supplier data; 3% still empty and excluded
How we set it up
We join the supplier CSV as a merged source on SKU, map gtin as a rename of the merged EAN column, and add an exclude filter if EAN is blank (the merged column; filters run before mapping) for the remainder until the buyer sources them.
Copy this plan
Plan: a working Google Shopping feed today
Step 1 is yours in Google Merchant Center; steps 2 to 5 we set up in Textfinity for you; step 6 we do together.
01
Set up Merchant Center
Create the account, verify and claim your website, and set shipping and tax (US) settings. This happens in Google's interface.
02
Connect your product source
Shopify connects natively; other platforms use a CSV export URL or a Google-shaped XML feed, and small catalogs can use a Google Sheet. Textfinity profiles the data so gaps show before mapping.
What we set up: We connect your source: Shopify natively, or a CSV URL, Google-shaped XML URL or Google Sheet.03
Start a feed from the Google Shopping template
The template pre-fills Google's mandatory and recommended attributes. Map each from your columns using the specification table above.
What we set up: We start your feed from the Google Shopping channel template and map each attribute from your columns.04
Fix values to Google's format
Price with currency code, availability spelling, plain-text description, apparel attributes, identifiers from a merged sheet if needed.
What we set up: We fix each value with rename, add suffix, remove from regexp or an advanced expression, and join a merged sheet for missing identifiers.05
Filter out what should not be listed
Out-of-stock items, products without images, gift cards, anything you cannot ship.
What we set up: We add exclude filters on the source columns, such as is equal to for stock status and is blank for the image column.06
Register the feed and check diagnostics
Add the feed URL in Merchant Center as a file data source with a scheduled fetch, timed after your store sync. Check product diagnostics in Merchant Center a few hours later.
What we set up: We register the feed URL as a scheduled fetch in your Merchant Center, with access you give us or on a short call, and go through the first diagnostics with you.
Customization tips
Make it yours
File feed or store app
A store app pushes products over the API with no URL to manage, but titles and filters follow the store. A file feed through a feed tool adds a step and gives you per-channel titles, rules and labels. Small catalogs with good titles can live with the app.
Variant SKU as id, forever
Google keys performance history to id. Changing ids, for example switching from product handles to SKUs, resets that history for every product. Pick the variant SKU once and keep it.
Fetch timing beats fetch frequency
A daily fetch scheduled an hour after the store sync is fresher than two fetches at random times. Align the Merchant Center schedule with your sync before asking for more frequent fetches.
Plan for the 500 x 500 image rule now
Google enforces a 500 x 500 pixel minimum for all product images from January 31, 2027. Map the original image URL rather than a resized thumbnail, and use feed hygiene's URL check to find broken links.
FAQ
Questions about google shopping feed
What is a Google Shopping feed?
A structured file or data source listing your products with Google's attribute names, such as id, title, description, link, image_link, price, availability, brand and gtin. Google Merchant Center reads it to show products in Shopping ads and free listings.
What format does a Google Merchant Center feed use?
Tab-delimited .txt or .tsv, or XML in RSS 2.0 or Atom 1.0, encoded in UTF-8 or UTF-16 and up to 4 GB, optionally compressed. Google Sheets and the Merchant Center API are the alternatives. Merchant Center also fetches comma-delimited CSV feeds such as the ones Textfinity publishes.
How often does Google fetch a feed URL?
Every 24 hours by default for a scheduled file fetch, at a time you can change. Products expire 30 days after their last refresh, so the feed must be fetched or resubmitted regularly.
What are the Google Shopping feed requirements for clothing?
On top of the standard required attributes, apparel targeted to Brazil, France, Germany, Japan, the UK or the US needs color, size, gender and age_group, and variants need item_group_id. Free listings require color, gender and age_group for all Apparel & Accessories products.
Do I need a feed if I use Shopify's Google channel?
No, the channel sends products through the API. A separate feed is worth it when you want different titles for Shopping, filtered product sets, custom labels, or channels the app does not cover.
Set up for you
We'll build your Google Shopping feed and register it with you.
Send us your store URL. We start from the Google Shopping template, fix the values to Google's format, filter what should not be listed and set up the scheduled fetch in your Merchant Center.
Tell us your store and channels. We reply within 24 hours.