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 column | Google attribute | Rule in Textfinity |
|---|---|---|
| SKU | id | Rename; where SKU is empty, advanced: if [SKU] is empty then [ID] else [SKU] |
| Name + Attribute 1 value(s) | title | Combine with a delimiter; variation names lose attribute values when a product has 3+ attributes, so rebuild them |
| Description (or Short description) | description | Remove from regexp <[^>]+> to strip HTML; max 5,000 chars |
| Permalink / product URL | link | Rename; must start with http or https |
| Images (first URL) | image_link | Replace from regexp ,.*$ with nothing to keep the first of the comma list |
| Images (rest) | additional_image_link | Replace from regexp ^[^,]*,? to drop the first |
| Stock status (instock / outofstock / onbackorder) | availability | Replace from Google Sheet lookup: instock→in_stock, outofstock→out_of_stock, onbackorder→backorder |
| Regular price | price | Add suffix " USD" (or your currency) |
| Sale price | sale_price | Add suffix; leave empty when blank |
| Brand attribute or meta:_brand | brand | Rename; max 70 chars |
| meta:_gtin or a GTIN attribute | gtin | Rename; blank stays blank |
| Categories (last segment) | google_product_category | Replace from Google Sheet: your category → Google taxonomy path (substring find-and-replace; unmatched values pass through) |
| Parent (variation rows) | item_group_id | Rename 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.
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.
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.
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 & ConditionerHow 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.
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.
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.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.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.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.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.
Tell us your store and channels. We reply within 24 hours.