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 fieldGoogle attributeWhat has to happen in between
SKU (variant)idRename; fall back to the variant id when SKU is blank (max 50 chars)
Title + Option1 valuetitleCombine with brand and variant options; max 150 chars
Description (HTML)descriptionStrip tags with remove from regexp; max 5,000 chars
URL handlelinkAdvanced: "https://store.example/products/" + [product_handle] + "?variant=" + [variant_id]
Variant image URL, else Product image URLimage_linkAdvanced: if variant image is empty use product image
Inventory quantityavailabilityAdvanced: if calc{[variant_inventoryQuantity]} > 0 then "in_stock" else "out_of_stock"
PricepriceAdd suffix " USD" (Google wants 15.00 USD)
Compare-at price / Priceprice / sale_priceWhen compare-at is set, send it as price and the Shopify price as sale_price
VendorbrandRename; max 70 chars
BarcodesgtinRename; leave empty rather than fake a value
Google Shopping / Google Product Categorygoogle_product_categoryRename, 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_idRename 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.

Fashion · Google Shopping · 2,400 variants

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.

Home decor · Google free listings · 350 SKUs

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.

Electronics · Google Shopping, US and CA · 900 SKUs

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.

  1. 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.
  2. 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.
  3. 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.
  4. 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.
  5. 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.
  6. 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.

Have us set up my Shopify feedOr email support@textfinity.io

Tell us your store and channels. We reply within 24 hours.