Integration
Google Sheets + Google Merchant Center
Google Merchant Center can read a Google Sheet directly, and for a small hand-kept catalog that is enough. The sheet becomes a problem the moment products also live in Shopify or WooCommerce, or when you need categories, brands or labels the store does not export. This page covers the native Sheets option and the three ways Textfinity uses a sheet alongside a store: as the source, as a merged source, and as a lookup table.
We connect your store, build the feed and keep it in sync. Updated 2026-10-27.
At a glance
- Merchant Center's own Google Sheets option: Products → Add products → Use Google Sheets → template, synced on a schedule you set (24 hours by default). Good for catalogs that live only in the sheet.
- Textfinity reads a Google Sheet as a shop (the whole catalog), as a merged source joined by key to a Shopify or CSV catalog, or as a lookup for 'replace from google sheet' and 'is in google sheet list' rules.
- Output is a feed URL that Merchant Center fetches on a schedule as a file data source; we register it in your account with you.
- Google requires id, title, description, link, image_link, availability, price and brand (or identifier_exists) per product; the sheet's headers must use Google's attribute names.
When the native Google Sheets feed is enough
In Merchant Center, Products → Add products → Use Google Sheets creates a template sheet whose header row is Google's attribute names. You fill rows, delete the instruction rows, set a sync schedule (default every 24 hours) and Google reviews the products like any other data source. Multi-value attributes are escaped with backslashes rather than quotes, and the sheet must stay shared with the Merchant Center service account.
That works until the catalog has a second home. If products are in Shopify, the sheet becomes a copy that drifts: stock, prices and new variants change in the store and nobody re-types them. If the sheet is the only place that knows the brand, the Google category or a custom label, it is the right place for that data, but the wrong place for everything else. The three patterns below keep each kind of data where it belongs.
Pattern 1: the Google Sheet is the catalog
For a catalog that genuinely lives in a sheet (a small maker, a B2B price list, a test set), Textfinity reads the sheet as a shop. The gain over the native option is everything after import: feed hygiene profiles the sheet (empty cells, lengths over 150 characters, inconsistent values), the mapping layer renames your own headers to Google's, filters drop rows you do not want advertised, and the same sheet can feed Meta, Pinterest or Microsoft without a second copy.
| Your sheet header | Google attribute | Transform in Textfinity |
|---|---|---|
| SKU | id | rename |
| Product name | title | rename, or combine (brand, name, size) |
| Details | description | rename |
| URL | link | rename |
| Image | image_link | rename (URL validation flags typos) |
| Stock (number) | availability | advanced: if calc{[Stock]} > 0 then "in_stock" else "out_of_stock" |
| Price (number) | price | add suffix " USD" |
| Brand | brand | rename |
| Category (your words) | google_product_category | replace from google sheet (a separate two-column lookup sheet; substring find-and-replace, so keep column A specific) |
| Barcode | gtin | rename; identifier_exists = no when empty |
Google attribute names and requirements from the Merchant Center product data specification, checked 2026-10-27.
Pattern 2: the sheet adds columns the store lacks (merged source)
A Shopify or WooCommerce export rarely carries everything Google wants: google_product_category, custom labels for campaign structure, brand on multi-vendor stores, GTINs kept in a supplier spreadsheet. A merged source in Textfinity joins a Google Sheet onto the primary catalog by a key column (SKU, handle or barcode). The store stays the source of truth for price and stock; the sheet supplies the extra columns; the feed is built from both.
This is the pattern most people are looking for when they search for a 'Shopify Google Sheets product feed'. It replaces Merchant Center supplemental feeds for stores that want one place to see the final product data, and it works for any channel, not just Google.
Pattern 3: the sheet is a lookup table
Two mapping transforms and two rule operators read sheets at rule time. 'Replace from google sheet' finds each column A value inside the field and replaces it with column B, row by row, which is how a store's product types become Google category IDs, or 'Navy' becomes 'Blue' for color normalization. It works on substrings, so a short entry also changes longer values that contain it. 'Extract from google sheet' returns the first value from a sheet list that appears inside the field, such as a brand name inside a title. 'Is in google sheet list' is a filter and conditional-mapping operator: include only brands on the list, or apply a title rule only to SKUs in a sheet.
A lookup sheet is small, owned by whoever manages the taxonomy, and edited without touching the feed. Textfinity re-reads it on the shop's sync schedule, so a category correction in the sheet is in the next rebuild.
Lookup tab: product type → google_product_category
product_type,google_product_category
Sneakers,187
Running Shoes,187
Hoodies,212
Coffee Beans,1868Getting the result into Merchant Center
Whichever pattern you use, the output is a Google Shopping feed on a stable URL, rebuilt on a schedule and within about five minutes after a rule changes. Merchant Center reads it as a product source added from a file, with a scheduled fetch of the URL; we register it in your account with you, through access you give us or on a short call. The native Sheets option can stay for a supplemental feed if you prefer, but with merged sources most stores retire it.
Examples
Worked examples, by situation
Three sheets, three roles. Each example shows the sheet and the Google attribute it produces.
google_product_category and custom_label_0 joined by SKU
Before
Shopify: sku DR-ROSE-38, product_type "Dresses", no Google category Sheet (merged source): sku,google_product_category,custom_label_0 DR-ROSE-38,2271,bestseller
After
id,google_product_category,custom_label_0 DR-ROSE-38,2271,bestseller
How we set it up
We join the sheet as a merged source on sku, then map google_product_category and custom_label_0 in the Google Shopping feed as renames of the merged columns. Rows without a match stay in the feed with the attribute empty, which hygiene's completeness check reports.
Product type mapped to a Google category ID through a lookup tab
Before
Categories: Lighting > Table Lamps
After
google_product_category: 594
How we set it up
We map google_product_category with replace from google sheet, from a lookup sheet with Categories in column A and the Google ID in column B. Column A is matched as a substring, and a category with no row passes through unchanged, so we give the rule the condition Categories is in google sheet list (leave empty otherwise) and exclude products whose Categories is not in that list until the tab is complete.
A hand-kept sheet becomes a valid Google feed
Before
SKU,Product name,Price,Stock,Image CAN-FIG,Fig & Cedar Candle,28,14,https://cdn.shop/can-fig.jpg
After
id,title,price,availability,image_link,brand,condition CAN-FIG,Fig & Cedar Candle,28.00 USD,in_stock,https://cdn.shop/can-fig.jpg,Ember Studio,new
How we set it up
We read the sheet as the source. Price gets add suffix ' USD'; availability uses the advanced rule on Stock; brand and condition are static values. The maker keeps editing the same sheet, and each sync rebuilds the feed from it.
Copy this plan
Plan: Google Sheets with Merchant Center, the Textfinity way
Under an hour for patterns 2 and 3 on an existing store; about the same for a sheet-only catalog.
01
Decide the sheet's role
Whole catalog → add it as a shop. Extra columns for a store catalog → merged source. Value translation or allow-lists → lookup sheet. A lookup reads only the first tab's columns A and B, so give each lookup its own sheet.
02
Share the sheet and add it
Share the Google Sheet with the Textfinity connection, then add it as a shop or as a merged source with a join key that exists in both.
What we set up: We add the sheet as the source, or as a merged source with the join key you pick.03
Create the Google Shopping feed
The template pre-names every Google attribute. Map the nine required ones first.
What we set up: We start the feed from the Google Shopping channel template and map the required attributes first.04
Wire the sheet columns in
Rename merged columns into attributes, or use 'replace from google sheet' for categories and colors, and 'is in google sheet list' for brand allow-lists.
What we set up: We map google_product_category with replace from google sheet and add a filter: brand is in google sheet list.05
Check hygiene and filter
Completeness per column shows what the join missed; exclude products with empty required attributes rather than sending blanks.
What we set up: We run feed hygiene, then exclude products whose google_product_category (the merged sheet column) is empty.06
Register the feed in Merchant Center
Add the feed URL in Merchant Center as a product source from a file with a scheduled fetch. Then review the Needs attention tab in Merchant Center.
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.
Customization tips
Make it yours
Join on a key the store cannot change
SKU or barcode survive renames; product titles do not. If Shopify SKUs are blank, join on handle for products or variant id for variants, and accept that a re-import breaks the join.
Keep lookup tabs two columns wide
A lookup that also carries notes and colors is easy to break. Put the source value in column A, the target in column B, and keep notes on another tab. Matching is case-sensitive and works on substrings, so a 'value consistency' pass in feed hygiene before you build the tab saves rows, and specific column A values avoid partial matches.
Decide who owns which column
If the sheet supplies brand, map brand from the sheet in every feed, not from the store in some of them, or the feeds will disagree. Write the rule of ownership on a notes tab after the data so the next person knows.
Native Sheets for one-off overrides, merged source for steady state
Merchant Center's own Sheets supplemental feed is quick for a temporary promotion label. For data that must stay in step with the store catalog, a merged source rebuilds with the store on every sync, which the native option cannot do.
FAQ
Questions about google sheets google merchant center integration
Can Google Merchant Center read a product feed from Google Sheets?
Yes. Products → Add products → Use Google Sheets gives you a template whose headers are Google's attribute names, synced on a schedule you set (24 hours by default). It suits catalogs that live only in the sheet; for stores with a Shopify or WooCommerce catalog, a sheet works better as a merged source or lookup table alongside the store data.
How do I add Google Sheets columns to a Shopify product feed?
Join the sheet onto the Shopify catalog by SKU, handle or barcode as a merged source in Textfinity, then map the sheet's columns into feed attributes such as google_product_category or custom_label_0. Shopify keeps supplying price and stock; the sheet supplies the extra columns; both rebuild on the shop's schedule.
What is the difference between a merged source and a supplemental feed?
A Merchant Center supplemental feed overrides attributes inside Google only. A merged source joins the sheet before the feed is built, so the extra columns reach every channel (Google, Meta, Pinterest, TikTok) and show up in Textfinity's product explorer and hygiene checks, not only in Merchant Center.
How often does the sheet sync?
Textfinity re-reads the sheet on the shop's sync schedule, like any other source, and rebuilds the feeds. Merchant Center then fetches the feed on its own schedule. A sheet edit therefore reaches Google after the next Textfinity sync and the next Google fetch.
Set up for you
Send us your sheet. We'll join it to your store catalog.
We add the sheet as the source, a merged source or a lookup, map the columns once and register the feed in Merchant Center with you. Textfinity keeps both the store and the sheet in sync on a schedule.
Tell us your store and channels. We reply within 24 hours.