Template
Google supplemental feed template
A supplemental feed is the smallest file in Merchant Center: one id column that matches your primary source, then only the attributes you want to add or overwrite. This page gives you the template, six examples of what people actually put in one, a CSV to start from, and a plan to generate it from your catalog so it stays in sync.
We connect your store, build the feed and keep it in sync. Updated 2026-10-27.
At a glance
- A supplemental source can add or overwrite attributes for products that already exist in a primary source; it cannot add or remove products.
- The only required column is id, and it must match the primary source's product id exactly, down to case and prefixes.
- Common columns: title, custom_label_0 to custom_label_4, google_product_category, sale_price, sale_price_effective_date, product_highlight, excluded_destination.
- Input types are a file, a Google Sheets template, or the API. The Supplemental sources tab appears once the Advanced data source management add-on is active.
- We build the file in Textfinity as a custom feed from your catalog: id plus the columns you want to control, rebuilt on a schedule, published on a URL.
What a Google supplemental feed template contains
Google documents a supplemental data source as a way to add details to, or update, products already in your primary source. It cannot be used to add or remove products and cannot stand alone. That makes the template short: an id column that matches the primary feed, followed by any attribute from the product data specification you want to add or overwrite. Columns you leave out are untouched; a column that is present but empty for a row leaves that product's value alone as well.
Because Merchant Center matches on id, the id has to be identical to the one in the primary source, including any prefix a platform app adds. Shopify's Google & YouTube app, for example, sends ids in a pattern like shopify_US_<product id>_<variant id>; check one product under Products in Merchant Center before you build the column.
| Column | Role in a supplemental feed | Typical use |
|---|---|---|
| id | Required; must match the primary source exactly | Join key |
| title | Overwrites the primary title | Rewritten or AI-generated titles without touching the store |
| custom_label_0 … custom_label_4 | Adds or overwrites labels | Margin bands, seasons, bestsellers for campaign grouping |
| google_product_category | Adds or overwrites the category | Fill a category the platform app leaves blank |
| sale_price, sale_price_effective_date | Adds a timed promotion | Black Friday pricing from a sheet |
| product_highlight, product_detail | Adds enhanced content | Bullet points and spec tables |
| excluded_destination | Removes a product from a surface | Keep an item out of free listings but in Shopping ads |
| availability, price | Overwrites with the Take latest rule | Replacement for the retired online inventory sources |
Behavior and click paths from Google's Create a product data source help page, checked 2026-10-27.
Supplemental feed examples for Google Shopping
Six jobs cover most supplemental feeds we see. Each one is a two- or three-column file; the examples further down show the rows and the rule that produces them.
- Title rewrite: id + title. The store keeps its short titles for the website; Merchant Center gets brand, product type, color and size in the first 70 characters.
- Custom labels for bidding: id + custom_label_0 (margin band) + custom_label_1 (season). Campaigns are then split by label without touching the store's data.
- Category fill: id + google_product_category, looked up from your product_type in a sheet, for apps that leave the category empty.
- Promotion window: id + sale_price + sale_price_effective_date, generated for the SKUs in a promotion sheet and empty for everything else.
- Surface control: id + excluded_destination to keep B2B-only or low-stock items out of free listings while ads keep running.
- Enhanced content: id + product_highlight columns built from attributes the store already has (material, capacity, warranty).
Google Sheets template, file or API: picking the input
Merchant Center offers three input types when you add supplemental product data: a file, a Google Sheets template that Google pre-fills with the id column, or the API. The Google Sheet is the right choice when a person maintains a few dozen overrides by hand; Google generates it and reads it back on demand. A file is the right choice when software produces the rows, because it can be fetched from a URL on a schedule and nobody has to open a spreadsheet. The API is for developers who already push products through the Merchant API.
Whichever input you pick, the data source label must match the primary source's feed label exactly, and the language should match the primary feed, or Merchant Center will not link the two. The supplemental file in CSV form looks like this:
supplemental-titles-and-labels.csv
id,title,custom_label_0,google_product_category
shopify_US_8123456_41234567,"Marlowe Linen Wrap Dress, Black, M",margin-high,2271
shopify_US_8123456_41234568,"Marlowe Linen Wrap Dress, Black, L",margin-high,2271
shopify_US_8129900_41240001,"Marlowe Cotton Crew Tee, White, S",margin-low,212Keeping a supplemental feed in sync instead of editing a sheet
The weakness of a hand-maintained supplemental sheet is drift: products get added to the store, the sheet does not know, and the new items run with the platform's default titles and no labels. The fix is to generate the file from the same catalog the primary feed comes from. In Textfinity, that is a custom feed on the connected shop with two or more columns: id, built to match the primary source's pattern, and the attributes you want to control. The title column can come from an AI config, using accepted titles with the store's title as fallback; custom labels from advanced rules on price, margin or tags; the category from a replace from google sheet lookup; the sale price from a merged source keyed on SKU.
The feed rebuilds on the shop's sync schedule, so a product added on Monday morning is in the supplemental file by the next rebuild, and Merchant Center picks it up at the next fetch. You keep the platform app as the primary source and never have to migrate it.
Examples
Worked examples, by situation
Four supplemental feeds from four stores. Each shows the rows and the Textfinity rule that generates them.
Title rewrite without changing the store
Before
id,title shopify_US_8123456_41234567,Linen Wrap Dress
After
id,title shopify_US_8123456_41234567,"Marlowe Linen Wrap Dress, Black, M"
How we set it up
Custom feed with two columns. id is an advanced expression: "shopify_US_" + [product_id] + "_" + [variant_id] (advanced expressions name Shopify fields with underscores). title is advanced too: [product_vendor] + " " + [product_title] + ", " + [variant_color] + ", " + [variant_size]. To use accepted AI titles, give the rule the condition is accepted in AI config: replace from AI config where it holds, this expression otherwise.
Custom labels from a cost sheet
Before
SKU,Regular price HDMI-2M,14.90
After
id,custom_label_0,custom_label_1 HDMI-2M,margin-high,accessory
How we set it up
A merged source joins a Google Sheet of margin bands on SKU. custom_label_0 is an advanced rule on the joined column: if [margin_band] equals "high" then "margin-high" else "margin-low". Every SKU needs a row in the sheet: an advanced rule fails on a product the merged source does not match, even for is empty. (With a unit_cost column and a space-free price column, calc{} could compute the band instead.) custom_label_1 comes from a replace from google sheet lookup of product_type to a label, with specific column A values since it replaces substrings.
Timed sale prices for a product list
Before
sku,price SOFA-220,1199.99
After
id,sale_price,sale_price_effective_date SOFA-220,999.99 EUR,2026-11-27T00:00+01:00/2026-11-30T23:59+01:00
How we set it up
A merged source (promotion sheet keyed on sku) supplies the sale price. sale_price is a conditional rule on the joined column: matches regexp ^\s*$ → leave empty, otherwise rename; sale_price_effective_date is add static value for the window. A filter rule includes only rows where the joined sale price is not blank, so the file holds just the promoted SKUs.
google_product_category fill from product_type
Before
sku,product_type SER-30,Skincare > Serums
After
id,google_product_category SER-30,Health & Beauty > Personal Care > Cosmetics > Skin Care
How we set it up
replace from google sheet on google_product_category: the sheet has the store's product_type values in column A and Google's category path in column B. A product_type with no row passes through unchanged, so give the rule the condition product_type is in google sheet list and leave it empty otherwise; an empty cell leaves the primary source's value untouched; feed hygiene's completeness check shows how many are still unmapped.
Copy this plan
From template to a linked supplemental source
Six steps. Two happen in Merchant Center; the rest is one custom feed in Textfinity.
01
Find the id pattern of your primary source
Open any product in Merchant Center and copy its id. Shopify's app, WooCommerce plugins and hand-built feeds each use a different pattern; the supplemental id must match it character for character.
02
Connect the catalog and start a custom feed
Connect Shopify or the export URL, then create a feed with no channel template so you choose the columns yourself. Add id first.
What we set up: We connect your store and create a custom feed with no channel template, starting with id.03
Build the id column
Rename if the primary source uses your SKU. Use the advanced transform to assemble prefixed ids, for example "shopify_US_" + [product_id] + "_" + [variant_id] on a Shopify shop.
What we set up: We write id as an advanced expression that reproduces your primary source's pattern.04
Add the columns you want to overwrite
title from combine or an AI config; custom labels from advanced rules; google_product_category from a Google Sheet lookup; sale_price from a merged source. Leave out every column you do not intend to change.
What we set up: We give title the condition is accepted in AI config (replace from AI config where it holds, combine otherwise) and write custom_label_0 as an advanced rule.05
Filter to the rows that carry a change
A supplemental feed does not need every product. Include only rows where at least one override column is not blank, which keeps the file small and the diff readable.
What we set up: We add an include filter where margin_band, the merged column, is not blank.06
Publish and add the supplemental source in Merchant Center
Copy the feed URL. In Merchant Center, activate Advanced data source management under Add-ons in Settings; then open Data sources (gear icon) → Supplemental sources → Add supplemental product data → file, give it the URL, set the data source label to match the primary feed label, and attach it to the primary source.
What we set up: We publish the feed and add the supplemental source in your Merchant Center with access you give us, or walk you through these clicks on a call.
Customization tips
Make it yours
Overwrite titles here, not in the store
The store title serves the website and the product page; the feed title serves search matching. Keeping them separate means the merchandising team never sees "Marlowe Linen Wrap Dress, Black, M" on the product page. The cost is a second place to look when a title is wrong; the product explorer shows the per-product output so you can see which rule produced it.
Use attribute rules for simple cases, a supplemental feed for data
Merchant Center's own attribute rules can prepend a brand or set a static label without any file. A supplemental feed earns its place when the value depends on data the primary source does not carry: margin, a promotion list, a category lookup, AI text. Mixing both is fine; a rule can read a supplemental attribute.
Keep one supplemental feed per job
One file for titles, one for labels, one for promotions is easier to pause than one file with everything in it. When a promotion ends you remove one source instead of editing columns, and the title feed keeps running. Textfinity feeds on the same shop share the catalog, so three feeds cost no extra mapping of the base data.
Match the feed label, not just the id
The most common reason a supplemental source links but changes nothing is a feed label mismatch: the supplemental source must carry the same label as the primary source. Set it when you create the source; it cannot be changed afterwards without recreating it.
Downloads
Take the files
FAQ
Questions about google supplemental feed template
What columns does a Google supplemental feed need?
Only id, which must match the product id in the primary data source exactly. Every other column is optional and is one of the attributes from Google's product data specification you want to add or overwrite, such as title, custom_label_0, google_product_category, sale_price or excluded_destination.
Can a supplemental feed add new products to Merchant Center?
No. Google states that a supplemental data source cannot be used to add or remove products or as a standalone source. It only updates products that already exist in the primary source it is attached to. To add products you change the primary feed.
Where is the supplemental feed option in Merchant Center Next?
Settings (gear icon) → Data sources → Supplemental sources → Add supplemental product data. The tab only appears after you activate the Advanced data source management add-on under Add-ons in Settings. You then choose a file, a Google Sheets template or the API, set the data source label and language to match the primary source, and attach it.
Does a supplemental feed override the primary feed?
For the attributes it contains, yes: the supplemental value replaces the primary value for matching ids. Attributes it does not contain are untouched. Where the same attribute comes from several sources, Merchant Center applies the source order and rules you set on the primary source, such as Take latest for price and availability.
Is a supplemental feed the same as Merchant Center feed rules?
No. Attribute rules transform values inside Merchant Center with no file, which suits static changes such as adding a brand prefix. A supplemental feed brings in data from outside, such as margins, promotion lists, lookups or AI titles. They combine: a rule can reference an attribute that a supplemental source supplies.
Set up for you
Have your supplemental feed generated from the catalog, not a sheet
Keep your platform app as the primary source. Tell us which titles, labels or prices you want to control; we build the id column to match, add the overrides, and publish a URL Merchant Center fetches on schedule.
Tell us your store and channels. We reply within 24 hours.