Product Feeds
How to Build a Google Shopping Product Feed, Step by Step
A practical walk-through for creating a product feed from scratch: setup, attribute-by-attribute guidance, file formatting and how often to update it.
Building a product feed is mostly careful data work. You take your catalog, express each product in Google’s attribute format, connect it to Merchant Center as a data source and keep it in step with your website.
This guide assumes your Merchant Center account exists. If it doesn’t, start with the Merchant Center setup guide. For background on what a feed is and the different data source types, see what is a product feed.
Short answer: To build a Google Shopping feed, verify your store and set shipping and returns, choose a data source (file, Google Sheets, Merchant API or a platform app), and create one record per product variant with the required attributes. Add it under Settings > Data sources, fix issues in Needs attention, and schedule updates to match changes on your site.
Key Takeaways
- Set up business info, a verified store URL, shipping and returns before adding products.
- Create one record per variant, each with a stable, unique id.
- Take every value from the landing page the product links to, so the feed and site agree.
- The file name in the data source must match the uploaded file exactly.
- Update the feed whenever your site changes; automatic item updates help but don’t replace regular updates.
Before you build: account prerequisites
A perfect feed will still struggle if the account around it isn’t ready. Check these first:
- Business information. Google requires basic, verifiable business and identity details, including business name, address and customer service contact. See add your business information.
- Verified and claimed store URL. Product links must use the verified domain. See how to verify and claim your website.
- Shipping. Shipping settings or the shipping attribute are required in countries including the US.
- Return policy. Your website must state one, and Merchant Center lets you configure it in its shipping and returns settings.
Step 1: Choose how the feed will be created
Your choice of data source decides how much of this guide you do by hand.
| If you… | Consider |
|---|---|
| Run Shopify | The Google & YouTube app, with a supplemental source for gaps |
| Run WooCommerce | The Google for WooCommerce extension, or a feed plugin that exports a file |
| Have a small catalog and no platform app | The Google Sheets template |
| Have an export tool or custom platform | A file delivered by upload, SFTP or Google Cloud Storage |
| Have a large catalog, or prices and stock that change more than once a day | The Merchant API |
If you use a platform app, the app builds the records for you. The attribute guidance below still applies, because you’ll be checking and correcting the values the app sends.
Step 2: Build one record per product variant
Export your catalog with one row for every purchasable variant. A t-shirt in 3 sizes and 3 colors is 9 rows. Each row gets its own id and they share an item_group_id. Don’t add a row for the parent product.
Then decide where each attribute’s value comes from in your store. Practitioner tip: write this down as a simple mapping (feed attribute, store field, any transformation). It makes troubleshooting much faster later and stops different people mapping the same field in different ways.
| Feed attribute | Typical store field |
|---|---|
| id | Variant SKU |
| item_group_id | Parent product SKU |
| title | Product name plus variant details |
| description | Product description (plain text) |
| link | Variant URL |
| image_link | Variant image, or main product image |
| price, sale_price | Regular price, sale price |
| availability | Stock status |
| gtin, brand, mpn | Barcode, brand or vendor, manufacturer part number |
Step 3: Fill each attribute correctly
The rules below come from Google’s product data specification and the individual attribute articles. Work through them in this order, because later attributes depend on earlier ones.
id
Use 1 to 50 characters; Google recommends the SKU. Keep the id unique and stable: changing it overwrites the product and its history. Use the same ID for the same product across countries and languages, don’t recycle IDs for new products, and avoid whitespace and invalid Unicode characters.
title
Required, 1 to 150 characters. Describe the product exactly as the landing page does, put the most important details first and include the variant (color, size). No promotional text, prices, all caps or company name. Our titles and descriptions guide covers this in depth.
description
Required, 1 to 5,000 characters. Describe only this product, with the most important details in the first 160 to 500 characters. Don’t include links, category paths, comparisons with other products or store policies.
link
The landing page URL for this exact variant. It must start with http:// or https://, use your verified domain and URL-encode symbols (a comma becomes %2C). Google’s landing page article recommends no more than two redirects. Variants need distinct URLs, for example using query parameters such as ?color=green&size=small.
image_link and additional_image_link
One URL for the main image, plus up to 10 additional images. Google’s image requirements say JPEG and WebP are recommended, the file extension must match the real format, and images must be crawlable by Googlebot and Googlebot-image. From January 31, 2027, Google requires at least 500 x 500 pixels for all products and recommends about 1500 x 1500 or above. Use stable URLs without timestamps or session IDs, and no promotional overlays or watermarks.
price and sale_price
Submit the full regular price in price, in the currency of the target country. If the product is on sale, add sale_price (Google’s example format is 15.00 USD) and, ideally, sale_price_effective_date with the correct time zone; without dates, the sale applies immediately. If a product is on sale but you don’t submit sale_price, submit the sale price as price. Details are in how to handle sale prices.
availability
Use in_stock, out_of_stock, preorder or backorder. Preorder and backorder need availability_date, and the expected date should appear on the page. The value must match what the landing page shows for that variant.
brand, gtin, mpn and identifier_exists
Submit the manufacturer-assigned GTIN and brand wherever they exist, and brand plus MPN when there’s no GTIN. Never invent or copy identifiers. Use identifier_exists = false only for products that genuinely have none. See GTIN, MPN and brand explained.
condition
Required for used and refurbished products. Google suggests using “new”, “used” or “refurbished” in the title or description so the condition can be cross-checked.
item_group_id and variant attributes
Use the parent SKU as item_group_id (1 to 50 characters) and keep it stable. For apparel, submit color, size, age_group and gender on every variant. Group variants the same way your product page’s variant selector does.
shipping, shipping_label and return_policy_label
Most stores set shipping and returns at account level. Add shipping_label or return_policy_label only where a group of products needs a different policy, and the item-level shipping attribute only to override account settings for specific products.
Step 4: Format, name and encode the file
If you’re using a file or sheet, small formatting problems cause many processing errors. Check these before the first upload:
| Area | What to do |
|---|---|
| File name | Use the exact file name you enter when creating the data source, with a valid extension and no special characters |
| Header row | Use Google’s attribute names (id, title, link and so on) |
| Encoding | Use UTF-8; avoid invalid Unicode such as control characters (for example U+200D) in IDs |
| Whitespace | No leading, trailing or repeated spaces in IDs or titles |
| URLs | ASCII characters only for image URLs; URL-encode symbols such as & (%26) and commas (%2C) |
| HTML | No HTML tags in titles; no links in descriptions |
| Escaping | Escape XML or JSON properly, without double-encoding |
| Prices | Number plus currency code; Google’s sale price rules allow at most two decimals |
| Numbers in spreadsheets | Format GTIN and ID columns as text so leading zeros survive (practitioner tip) |
Double-encoding is easy to miss: a product title that shows & or " on Google usually means an export tool encoded characters that were already encoded.
Step 5: Add the data source in Merchant Center
Google’s data source guide gives this path for a primary source:
- Go to Settings > Data sources and open the Primary sources tab.
- Select Add product source.
- Choose the method: file, Google Sheets or API (with a platform app, products are connected through the app instead).
- Set the target countries and the language of your product data.
- Add a data source label and choose the marketing methods (such as free listings and Shopping ads).
- Name the source and, for files, enter the exact file name.
- Upload or connect the data and wait for processing to finish.
If you use the Advanced data source management add-on, decide on feed labels now. Language and feed label can’t be changed after the source is created.
Step 6: Check the first results
- Open Products > Needs attention and read the summary cards and issue list.
- Fix processing errors first (invalid values, missing required attributes). Data source errors explains the common ones.
- Pick 10 to 20 products across categories and compare each attribute with its live landing page as a logged-out visitor.
- Check structured data on a few pages with Search Central’s Rich Results Test or URL Inspection.
- Fix values at the source, then re-upload or reprocess the data source.
Expect a few rounds of this on a new feed. Practitioner tip: keep a short change log of what you fixed and when, so you can match later status changes to your edits. Remember that an approved product is eligible to show, which Google notes is not a guarantee that it will.
How often to update your product feed
There’s no single correct frequency. The right schedule is whatever keeps your feed in step with your website, because Google compares the two.
Match the feed to your site’s change rhythm
Google’s availability mismatch article names timing between site updates and data updates as a common cause of mismatches, and recommends scheduling data updates to coincide with site updates. If stock changes during the day, a once-a-day feed will be out of date for part of every day.
| How your catalog changes | Reasonable approach |
|---|---|
| Prices and stock rarely change | A daily file or sync, plus a manual update after any planned price change |
| Stock changes daily | Update at least daily, timed to run after stock imports; keep automatic item updates on |
| Prices or stock change more than once a day | Google recommends the Merchant API |
| Scheduled sales | Submit sale_price with sale_price_effective_date in advance |
What automatic item updates can and can’t do
Automatic item updates use your landing page and structured data to update price, sale price, availability and condition. They’re on by default. But Google is explicit: they are not a replacement for regular updates and are designed for sporadic problems on a small share of products. If values change more than once a day, products may be disapproved instead, and Google may stop the updates if there are too many mismatches.
Don’t delete products to hide them
Removing a product and re-adding it later means it takes significant time to show again, according to Google’s availability documentation. Use pause for up to 14 days, or excluded_destination for longer, rather than deleting items or marking in-stock products out of stock. See managing out-of-stock products.
Shopify and WooCommerce notes
- With the Google & YouTube app, products sync from Shopify automatically or manually. Make changes in Shopify; edits made directly in Merchant Center may be overwritten.
- If your Shopify store uses several domains or redirects, the app may claim a domain that doesn’t match your product URLs. Google’s fix is to set the online store URL in Merchant Center to the domain used in product URLs and claim it.
- With Google for WooCommerce, the extension handles the product feed. Check which product fields it reads for brand, GTIN and MPN before you fill them in.
When to get help
Building a feed for a small catalog is manageable in-house. Get help when your platform can’t send the attributes you need, variants don’t map cleanly, or you’re seeing recurring mismatches after launch. Our product feed optimization service builds and maintains feeds, and our Merchant Center service covers account setup.
Frequently asked questions
What file format should a Google Shopping feed use?
Merchant Center accepts files by manual upload, SFTP or Google Cloud Storage, as well as Google Sheets and the Merchant API. Whatever you use, the file name must exactly match the one set in the data source and use a valid extension.
How often should I update my product feed?
Often enough to match your website. Google recommends scheduling data updates to coincide with site updates, and using the Merchant API if prices or stock change more than once a day.
Can automatic item updates replace feed updates?
No. Google says automatic item updates are not a replacement for regular updates; they’re designed to fix sporadic problems on a small percentage of products.
Should each product variant be a separate row?
Yes. Each variant is a separate product with its own id and a shared item_group_id. The parent product isn’t submitted on its own.
What should I use as the product id?
Google recommends the SKU. Keep it unique, stable and between 1 and 50 characters, and don’t reuse it for a different product.
Can I delete products from the feed when they’re out of stock?
Google advises against it, because re-added products take significant time to show again. Use out_of_stock when genuinely unavailable, or pause and excluded_destination to hide products.
Want a feed built properly from the start?
We map your catalog to Google’s specification, build the data source and set an update schedule that keeps it in step with your site.
Sources
- Google Merchant Center Help — Create a product data source
- Google Merchant Center Help — Product data specification
- Google Merchant Center Help — ID [id]
- Google Merchant Center Help — Title [title] and structured title
- Google Merchant Center Help — Description [description]
- Google Merchant Center Help — Image link [image_link]
- Google Merchant Center Help — Sale price [sale_price]
- Google Merchant Center Help — Availability [availability]
- Google Merchant Center Help — Item group ID [item_group_id]
- Google Merchant Center Help — How to fix: Product page unavailable
- Google Merchant Center Help — How to fix: Mismatched product availability
- Google Merchant Center Help — Automatic item updates
- Google Merchant Center Help — Feed labels
- Google Merchant Center Help — Add your business information
- Google Merchant Center Help — Install and link the Google & YouTube app on Shopify
- WooCommerce Docs — Google for WooCommerce: Get started
Last reviewed October 10, 2026 against the official documentation listed above. Google changes Merchant Center features and policies regularly — always confirm details in your own account.
