Integration

WooCommerce + Google Shopping

WooCommerce has a product CSV exporter built in and a crowd of feed plugins on top. The lean path is one free plugin that publishes a feed URL, Textfinity reading that URL, and Merchant Center fetching the cleaned result. This page shows the columns, the fixes and the schedule.

We connect your store, build the feed and keep it in sync. Updated 2026-10-27.

At a glance

  • WooCommerce's built-in exporter (Products → All Products → Export) writes a one-off CSV; Textfinity needs a URL, so use a free feed plugin such as Product Feed PRO by AdTribes (80,000+ installs, XML/CSV/TXT, hourly to daily refresh).
  • Variations are rows with Type = variation and Parent = the parent SKU; Google wants them as items sharing an item_group_id.
  • Textfinity has no WooCommerce plugin of its own. It reads the plugin's XML or CSV URL on a schedule, which is the same path Magento and PrestaShop stores use.
  • Merchant Center fetches the finished feed from Textfinity's stable URL on a schedule; we register the URL in your account with you.

What WooCommerce can export, natively and with a free plugin

The native exporter lives under Products → All Products → Export. It lets you pick columns, filter by product type and category, include custom meta with a meta: prefix, and then downloads a CSV when you click Generate CSV. It follows WooCommerce's own schema: ID, Type, SKU, Name, Published, Regular price, Sale price, Stock, Images, Categories and numbered Attribute 1 name / Attribute 1 value(s) columns. It is a download, not a URL, so it suits a one-time migration, not a feed that must refresh.

For a URL, install a free feed plugin. Product Feed PRO for WooCommerce by AdTribes is the free version of a paid plugin, reports 80,000+ active installations, outputs XML, CSV and TXT, and refreshes feeds daily, twice daily or hourly at a fixed URL. Its own Google template is fine as a raw export: let it emit every field it can, then do the mapping, filtering and title work in Textfinity, where the rules are versioned and the output is profiled.

WooCommerce columns to Google Shopping attributes

WooCommerce columnGoogle attributeRule in Textfinity
SKUidRename; where SKU is empty, advanced: if [SKU] is empty then [ID] else [SKU]
Name + Attribute 1 value(s)titleCombine with a delimiter; variation names lose attribute values when a product has 3+ attributes, so rebuild them
Description (or Short description)descriptionRemove from regexp <[^>]+> to strip HTML; max 5,000 chars
Permalink / product URLlinkRename; must start with http or https
Images (first URL)image_linkReplace from regexp ,.*$ with nothing to keep the first of the comma list
Images (rest)additional_image_linkReplace from regexp ^[^,]*,? to drop the first
Stock status (instock / outofstock / onbackorder)availabilityReplace from Google Sheet lookup: instock→in_stock, outofstock→out_of_stock, onbackorder→backorder
Regular pricepriceAdd suffix " USD" (or your currency)
Sale pricesale_priceAdd suffix; leave empty when blank
Brand attribute or meta:_brandbrandRename; max 70 chars
meta:_gtin or a GTIN attributegtinRename; blank stays blank
Categories (last segment)google_product_categoryReplace from Google Sheet: your category → Google taxonomy path (substring find-and-replace; unmatched values pass through)
Parent (variation rows)item_group_idRename for Type = variation rows; use SKU for simple products

WooCommerce column names from the Product CSV Importer and Exporter guide; Google attributes from the product data specification; both checked 2026-10-27. Plugin exports rename some columns; the mapping uses the headers in your file.

The four things that break a WooCommerce Google Shopping feed

Most disapprovals we see from WooCommerce stores come from the same places. HTML in descriptions, because the editor stores markup. Variation titles that read "Hoodie - Large" with no color because WooCommerce drops attribute values from names once a product has three or more attributes. Availability values that are WooCommerce's instock / outofstock rather than Google's in_stock / out_of_stock. And prices without a currency code.

None of these need a plugin setting. Each is one mapping rule: remove from regexp for the HTML, combine for the title, a Google Sheet lookup for availability, add suffix for the currency. The feed hygiene profile flags them before you build the feed: the length distribution checker shows titles over 150 characters, value consistency shows the spelling variants of stock status, URL validation catches image links that point at a page instead of a file.

How Merchant Center fetches the result

Merchant Center reads product files from a URL that begins with http, https, ftp or sftp, on a schedule you set when adding a product source from a file in its data sources settings. The URL must point at the file itself, not an HTML page, and the file must be under 4 GB. Add a login if the URL is protected.

Textfinity publishes every feed on a stable URL and rebuilds it on the shop's sync schedule, so Merchant Center is pointed at that URL once; we register it in your account with you, through access you give us or on a short call. Keep the plugin refresh (hourly or daily) at least as frequent as the Textfinity sync so the chain stays fresh: WooCommerce → plugin URL → Textfinity → Merchant Center.

Examples

Worked examples, by situation

Three WooCommerce stores with different catalogs and the rule each one needed.

Apparel · Google Shopping · 1,800 variations

Rebuild variation titles with every attribute

Before

Name: Fleece Hoodie (three attributes, so no values in the name)
Attribute 1 value(s): Forest
Attribute 2 value(s): Large
Parent: HOOD-FL

After

title: Fleece Hoodie, Forest, Large
item_group_id: HOOD-FL

How we set it up

We map title as a combine of Name, Attribute 1 value(s) and Attribute 2 value(s) with ", ", and item_group_id as a rename of Parent. A column takes one rule, so a name that already ends in " - Large" needs the size stripped in the plugin export, not in a second Textfinity rule.

Garden tools · Google free listings · 420 products

Availability words Google accepts

Before

Stock status: outofstock
Stock: 0

After

availability: out_of_stock

How we set it up

We map availability with replace from google sheet, from a sheet with three rows: instock → in_stock, outofstock → out_of_stock, onbackorder → backorder. None of the three values contains another, so the substring match is safe; an advanced expression cannot read the Stock status column because its name has a space. Or we exclude zero stock entirely with a filter: Stock is less or equal to 0.

Cosmetics · Google Shopping, Germany · 260 SKUs

Category lookup from a Google Sheet

Lookup sheet (two columns)

Hautpflege > Gesichtscreme,Health & Beauty > Personal Care > Cosmetics > Skin Care > Facial Moisturizers
Haarpflege > Shampoo,Health & Beauty > Personal Care > Hair Care > Shampoo & Conditioner

How we set it up

We map google_product_category with replace from Google Sheet, with the WooCommerce Categories column as the input. It replaces substrings and leaves unmatched categories as they are, so we add the condition Categories is in google sheet list (leave empty otherwise). One sheet serves the German and the Austrian feed; Textfinity reads the sheet on every sync, so a new category only needs a new row.

Copy this plan

Plan: WooCommerce to Merchant Center

Steps 1 and 6 happen in WordPress and Google; the rest we set up in Textfinity for you.

  1. 01

    Publish a raw feed URL from WooCommerce

    Install a free feed plugin, create one feed with every field it offers, set the refresh to hourly or daily and copy the feed URL. This happens in the WordPress admin. The native Products → Export CSV only works for a one-time test because it has no URL.

  2. 02

    Add the URL as a shop

    Point the feed tool at the XML or CSV URL. It pulls the file, detects the columns and profiles completeness, title lengths and inconsistent stock values before anything is mapped.

    What we set up: We add your plugin's XML or CSV URL as the source and send you the feed hygiene profile.
  3. 03

    Start a Google Shopping feed from the template

    The template lists Google's attributes. Map each from the table above; most are a rename, five need a rule.

    What we set up: We start the feed from the Google Shopping channel template and map it from the table above.
  4. 04

    Add the fixing rules

    Strip HTML, rebuild variation titles, translate stock status, suffix the currency, look up the Google category.

    What we set up: We map description with remove from regexp, title as a combine, availability and google_product_category with replace from Google Sheet, and price with add suffix.
  5. 05

    Filter out what should not be advertised

    Drafts, private products, zero stock and anything under a minimum price.

    What we set up: We add filters: Published is equal to 1; Stock is more than 0; Regular price is greater or equal to 5.
  6. 06

    Give Merchant Center the feed

    Add the feed URL in Merchant Center as a product source from a file and schedule a daily fetch. This part 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.

Customization tips

Make it yours

Keep the plugin dumb and the rules in one place

Plugins can map categories and rewrite titles too. Doing it twice is how feeds drift. Let the plugin export raw fields and keep every transform in Textfinity, where the product explorer shows the final value per product. The trade-off: the plugin's own Google template goes unused.

Export custom meta if your GTINs live in a custom field

The native exporter's "export all custom meta" option adds meta: columns; most feed plugins expose the same fields. A GTIN column that is 60% empty is better than an invented one; Google penalizes wrong identifiers harder than missing ones.

One feed per currency, not one feed with a currency switcher

Currency switcher plugins change the price on the page, not in the export, which is a classic price mismatch. If you sell in two currencies, build two feeds with two add suffix rules and two Merchant Center targets.

Use the hygiene profile as your pre-flight check

Run it after every plugin update. If the plugin renames a column, the completeness checker shows a 0% column and the mapping points at nothing; you find out before Merchant Center does.

FAQ

Questions about woocommerce google shopping feed

Does WooCommerce export to Google Shopping XML natively?

No. The built-in exporter under Products → All Products → Export writes a CSV in WooCommerce's own schema, downloaded once. Google Shopping XML (RSS 2.0 with g: attributes) comes from a feed plugin or a feed tool; Textfinity outputs CSV or TSV on a stable URL that Merchant Center fetches.

Which Google Shopping apps for WooCommerce are free?

Product Feed PRO for WooCommerce by AdTribes is free on WordPress.org with XML, CSV and TXT output and scheduled refreshes. Google's own Google for WooCommerce extension syncs products directly. Textfinity then handles the mapping and filtering on top of the plugin's URL, and we set that up for you.

Do I need a WooCommerce plugin to use Textfinity?

You need something that publishes a URL, because Textfinity has no native WooCommerce plugin. Any plugin that writes a Google Shopping XML or CSV feed to a URL works, as does a Google Sheet you export to. Shopify is the only platform Textfinity connects to directly.

How are WooCommerce variations handled in a Google feed?

WooCommerce exports variations as rows with Type = variation and Parent = the parent product's SKU. Map the variation SKU to id and Parent to item_group_id, add color and size from the attribute columns, and Google groups them as one product with selectable variants.

Set up for you

Send us your plugin's feed URL. We'll turn it into a clean Google feed.

We set up the feed in Textfinity from the Google Shopping template, add the five fixing rules and register the feed URL in your Merchant Center with you.

Have us build my WooCommerce feedOr email support@textfinity.io

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