Integration
Shopify + Google Merchant Center
Shopify can push products to Google Merchant Center on its own through the Google & YouTube channel. The reasons to run a separate Shopify Google Shopping feed are control: rewritten titles, custom labels, filters, metafields and a feed you can inspect. Here is how both routes work and how to build the second one.
We connect your store, build the feed and keep it in sync. Updated 2026-10-27.
At a glance
- Shopify's Google & YouTube channel syncs title, description, images, landing page and GTIN/MPN with brand; the first sync can take up to 24 hours and later changes a few hours.
- A feed tool reads the same products (plus metafields, markets and locales) and lets you rewrite titles, add custom labels and filter before Google sees anything.
- Textfinity connects to Shopify natively and publishes the finished feed on a stable URL that Merchant Center fetches on a schedule, so there is no file to upload.
- We set it up for you: the mapping, the filters and the registration of the feed URL in your Merchant Center, done with you through access you give us or on a short call.
Two ways to get a Shopify Google Shopping feed
The Google & YouTube channel is the default route. Install it from the Shopify App Store, sign in with the Google account that administers your Merchant Center, and Shopify syncs products that are available to the online store. One Merchant Center account connects to one Shopify store, multi-client accounts cannot be connected, and the channel lets you pick a title and description preference during setup. That is the whole customization surface.
A feed tool is the second route. It pulls the catalog from Shopify, lets you map and rewrite every attribute, and hands Merchant Center a file on a URL it fetches on a schedule. You keep the Google & YouTube channel for conversion tracking and Shopify Markets if you like; the product data comes from the feed instead. The two routes are compared in more detail on the Shopify channel vs feed tool page linked below.
What Shopify exports and where each column lands in Google
Textfinity reads products and variants through Shopify's API, so you never export a CSV by hand, but the column names below are the ones you see in a Products → Export file and in the mapping. Google's attribute names and limits come from the product data specification.
| Shopify field | Google attribute | What has to happen in between |
|---|---|---|
| SKU (variant) | id | Rename; fall back to the variant id when SKU is blank (max 50 chars) |
| Title + Option1 value | title | Combine with brand and variant options; max 150 chars |
| Description (HTML) | description | Strip tags with remove from regexp; max 5,000 chars |
| URL handle | link | Advanced: "https://store.example/products/" + [product_handle] + "?variant=" + [variant_id] |
| Variant image URL, else Product image URL | image_link | Advanced: if variant image is empty use product image |
| Inventory quantity | availability | Advanced: if calc{[variant_inventoryQuantity]} > 0 then "in_stock" else "out_of_stock" |
| Price | price | Add suffix " USD" (Google wants 15.00 USD) |
| Compare-at price / Price | price / sale_price | When compare-at is set, send it as price and the Shopify price as sale_price |
| Vendor | brand | Rename; max 70 chars |
| Barcodes | gtin | Rename; leave empty rather than fake a value |
| Google Shopping / Google Product Category | google_product_category | Rename, or replace from a Google Sheet by product type (substring find-and-replace, so keep column A specific) |
| URL handle (shared by variants) | item_group_id | Rename so Google groups colors and sizes |
Shopify column names as in the current product CSV help page; Google attributes and limits from the product data specification, both checked 2026-10-27.
The fixes a raw Shopify catalog needs before Merchant Center
- Titles: Shopify titles are product names, not search phrases. Google allows 150 characters and the feeds we profile use about 20 on average. Combine brand, product title, color and size, or let an AI config enhance them (100 to 150 characters, key information first, reviewed before use).
- HTML in descriptions: the Description column is HTML. Google wants plain text, so a remove from regexp rule with <[^>]+> clears the tags.
- Variants: Google wants one row per sellable variant with a shared item_group_id. Shopify's export already lists variants as rows; map the product id to item_group_id and the variant SKU to id.
- Availability words: Shopify gives you a quantity, Google wants in_stock, out_of_stock, preorder or backorder. One advanced expression covers it.
- Identifiers: products without a barcode should not have an invented GTIN. Map Barcodes to gtin and leave it empty where it is empty; brand plus MPN satisfies Google for most new products.
- Draft and archived products: filter them out with product.status is not equal to ACTIVE (exclude) so they never reach Google.
How Merchant Center ingests the feed
Merchant Center fetches product files from a URL on a schedule: a product source added from a file in its data sources settings points at a file that starts with http, https, ftp or sftp, set a fetch schedule and, if the file is protected, add a login. Files can be up to 4 GB.
We fill in that form with you, through access you give us or on a short call, so the feed URL is registered once. From then on the feed is rebuilt on your shop's sync schedule, dirty feeds are rebuilt within about five minutes of a rule change, and Google pulls the fresh file on its own timetable. Textfinity does not read disapprovals back from Merchant Center, so keep the Needs attention tab open during the first week.
Examples
Worked examples, by situation
Three Shopify stores, three different reasons to leave the native sync behind. Each shows the Shopify value, the Google-ready value and the rule that produced it.
Variant titles that carry color and size
Before
Title: Linen Shirt Options: Color Sand, Size M Vendor: Marlow
After
title: Marlow Linen Shirt - Sand, M item_group_id: linen-shirt id: MRL-LS-SAND-M
How we set it up
We map title as an advanced expression, [product_vendor] + " " + [product_title] + " - " + [variant_color] + ", " + [variant_size] (advanced expressions name Shopify fields with underscores), item_group_id as a rename of the URL handle and id as a rename of SKU. Google then groups the shirt's sizes under one listing.
Plain-text descriptions from Shopify HTML
Before
<p>Hand-thrown stoneware mug.<br>Dishwasher safe.</p>
After
Hand-thrown stoneware mug. Dishwasher safe.
How we set it up
We map description with replace from regexp (?:\s*<[^>]+>)+ to a single space, which drops the tags and keeps a gap where the <br> was; the output is trimmed at both ends. Free listings use the same description attribute as paid ads, so one rule serves both.
Price with currency and a real sale_price
Before
Price: 149.00 Compare-at price: 199.00
After
price: 199.00 USD sale_price: 149.00 USD
How we set it up
We map price as an advanced expression, if [variant_compareAtPrice] is empty then [variant_price] + " USD" else [variant_compareAtPrice] + " USD", and sale_price as another: if [variant_compareAtPrice] is empty then "" else [variant_price] + " USD". A second feed on the CA market does the same with that market's prices and CAD.
Copy this plan
Plan: Shopify to Merchant Center in one sitting
About an hour for a first feed. We do the feed steps; the Merchant Center steps happen in Google's interface, with you.
01
Connect the Shopify store
Approve the feed tool's access to your store. It pulls products, variants, metafields, markets and locales, and a profile of the catalog shows empty columns and over-length titles before mapping.
What we set up: Once you approve Textfinity's access to your store, we pull the catalog and run feed hygiene on it.02
Create a Google Shopping feed from the template
The template pre-fills Google's attribute names. Decide which Shopify field feeds each one using the table above; most are a rename.
What we set up: We start the feed from the Google Shopping channel template and map each attribute from the table above.03
Fix titles, descriptions, availability and price
Apply the combine, remove from regexp and advanced rules from the examples. Check a handful of products in the product explorer to see the mapped output per product.
What we set up: We map title as a combine, description with remove from regexp and availability as an advanced expression, then check sample products in the product explorer.04
Filter what Google should never see
Exclude drafts, zero stock, gift cards and anything you do not want advertised. Filters run before mapping, so excluded products never reach the feed.
What we set up: We add exclude filters: product.status is not equal to ACTIVE; variant.inventoryQuantity is less or equal to 0; product.productType is equal to Gift Card.05
Register the feed URL in Merchant Center
Add the feed URL in Merchant Center as a product source from a file and set a daily fetch. This step happens in Google's interface.
What we set up: We register the feed URL with a daily fetch in your Merchant Center, with access you give us or on a short call.06
Watch the first fetch, then leave it on a schedule
Merchant Center shows item-level issues within hours of the first fetch. Fix them in the mapping, not in Shopify, and the next scheduled rebuild carries the fix.
Customization tips
Make it yours
Keep the Google & YouTube channel installed, but stop it from sending products
If two sources send the same product id, Merchant Center has to pick one. Use the channel for Google Ads conversion tracking and Shopify Markets, and let the feed be the only product source. The trade-off is that Shopify's own Google Shopping fields stop mattering; your mapping is now the truth.
Use metafields for the attributes Shopify lacks
Material, pattern, energy class and age group have no native Shopify field. Textfinity reads metafields, so a product.metafields.custom.material column can map straight to Google's material attribute. The cost is maintaining the metafields; a merged Google Sheet keyed on SKU is the lighter option for a few hundred products.
Decide between one feed per market or one feed with Markets columns
Shopify exports a Price / International column per market. One feed per country with its own currency suffix is easier to debug; one feed with conditional mapping is fewer feeds to keep track of.
Let AI write titles only for the categories that need it
Run an AI config only on, say, apparel, and give the title rule the condition is accepted in AI config: replace from AI config where it holds, the structured combine otherwise. Electronics keep the combine, and only titles you accept in review reach the feed.
FAQ
Questions about shopify google shopping feed
Does Shopify have a built-in Google Shopping feed?
Yes. The Google & YouTube channel syncs products that are available to the online store into Google Merchant Center, including title, description, images, landing page and GTIN or MPN with brand. The first sync can take up to 24 hours and later changes a few hours. What it does not give you is per-attribute rewriting, custom labels or filters beyond product availability.
Can I use Shopify's Google channel and a feed tool at the same time?
You can keep the channel installed for conversion tracking and Markets, but only one source should supply each product id to Merchant Center. Most stores keep the channel and turn off its product sync, or exclude the channel's products in Merchant Center, and let the feed be the product source.
Do free listings on Google use the same Shopify feed?
Yes. Free listings read the same product data source in Merchant Center as Shopping ads. A feed built for ads qualifies for free listings as long as the required attributes are present, and in the Apparel & Accessories category free listings also require item_group_id for variants.
What does a Shopify Google Shopping feed cost with Textfinity?
It is quoted per catalog after a short call, based on the size of the catalog and the channels you sell on. We set up the feed and its rules in Textfinity for you and register the feed URL in your Merchant Center with you; from then on the software rebuilds it on schedule.
Does Textfinity show Merchant Center disapprovals?
No. Textfinity profiles your catalog before Google sees it (missing values, over-length titles, malformed URLs) but it does not import diagnostics from Merchant Center. Disapprovals are still read in Merchant Center's Needs attention view.
Set up for you
We'll build your Shopify Google Shopping feed and register it with you.
Send us your store URL. We connect Shopify, map the dozen columns above, filter what Google should not see and set up the scheduled fetch in your Merchant Center. EU-hosted.
Tell us your store and channels. We reply within 24 hours.