← All guides

The free WooCommerce product feed plugin: install it, get a feed URL

19 September 2026 · 7 min read

Install FeedRobin Product Feed for WooCommerce from the WordPress plugin directory, copy the feed link from WooCommerce → FeedRobin, and paste it into Merchant Center as a file data source. The feed is built when Google fetches it, so prices and stock are always current.

WooCommerce sells products and does not describe them to anyone else. There is no product feed in it — no Google Shopping XML, no Meta catalogue file, nothing a price comparison site can read.

FeedRobin Product Feed for WooCommerce is ours, and it is free in the official WordPress plugin directory: GPL, no account. This page is what it does, what it does not do, and how to point a channel at the URL it gives you.

Install it in three steps

1. In WordPress, go to Plugins → Add New, search FeedRobin, install and activate FeedRobin Product Feed for WooCommerce. WooCommerce has to be active — the plugin declares it as a requirement and will not run without it.

2. Open WooCommerce → FeedRobin. Your feed URL is already there; it carries a random token, so it is unguessable rather than public, and it is served with a noindex header so search engines leave it alone.

3. Copy the URL into whatever reads it — Merchant Center's data source, Meta's catalogue, Microsoft's feed field. If the URL ever leaks, the settings screen makes a new one and the old address stops working immediately.

The settings screen checks that the URL opens and shows the result under it. If the URL answers “not found” with your theme's page, the plugin is not running when the link is opened: check that it is active, and that no other plugin switches it off on the front end. If the “not found” page is your server's and the server is Apache, saving Settings → Permalinks once rewrites a missing .htaccess when WordPress can write to it. The plugin also serves a query-string version for stores on plain permalinks.

Not sure what's wrong with your feed? Paste your feed URL and FeedRobin checks every product for missing barcodes, images, descriptions and more — free, no account needed.

What goes into the feed

Variations as separate items. A shopper buys the blue Large, not the parent product, and the variation is what carries the price, the stock and the barcode. Each one goes out on its own with the parent's id as item_group_id, which is how a channel knows your blue Large and your red Small are one product rather than two.

Prices without tax in US and Canadian dollars, with tax in other currencies, and sale prices only while the sale is running. Google's price page asks for prices without tax in the United States and Canada, and with VAT or GST included in the other countries it lists. A sale price that is set but outside its date range is not the price being charged; the price mismatch guide covers what Merchant Center does when feed and page prices differ.

Barcodes from WooCommerce's own GTIN field (added in WooCommerce 9.2), or from the GTIN that Google for WooCommerce stores when that field holds no valid GTIN; for a variation, the variation's own values first, then its parent product's. A GTIN with a wrong length or check digit, or a placeholder such as all zeros, is left out. A product without a GTIN goes out without gtin and without identifier_exists. Google's product data specification says a missing identifier_exists counts as yes, and that a product that does have unique product identifiers may be disapproved when it is sent with no. The missing-GTIN guide covers products that have none.

Brand, from wherever your store keeps it. WooCommerce only grew a brand taxonomy in 9.4, so older stores keep it in Perfect Brands, YITH or a plain brand attribute. All four are read.

Colour and size as their own fields, resolved to the name a shopper sees rather than the slug — a channel can filter on a field, it cannot filter on a word inside your title. Plus the full category path, the image gallery, stock status including backorder, and shipping weight.

What it does not touch

Your custom labels. All five belong to your campaign segmentation in Google Ads. A feed that fills one can change how bidding you already run groups its products.

Your SKU is never sent as an MPN. A SKU identifies the product in your shop, not at its manufacturer. Google asks for the MPN assigned by the manufacturer and, unless you are the manufacturer, not a value you created.

Your products. Nothing is written to them. The plugin stores six small settings in WordPress: the code in your feed link, the default brand, the install date, how many times the feed has been read, and whether its two notices were dismissed. Uninstalling deletes all six. It also makes no outbound requests of any kind: your catalogue is not sent anywhere, including to us, unless you press Connect yourself.

The trap it was built around

The feed is generated at the moment it is fetched rather than written to a file on a schedule, which is what keeps it current, and which also exposes it to full-page caches. A full-page cache wraps the request in an output buffer and stores whatever is in that buffer at the end as “the page”. With a streamed response, that is the last chunk: eighteen bytes, </channel></rss>, served to every fetch afterwards.

We found it on a test store dressed like a real one — Storefront, an SEO plugin, WP Super Cache. The symptom: a well-formed XML document with zero products, so no channel reports a broken feed. The plugin now sets DONOTCACHEPAGE and closes any buffer a cache has already opened before it writes a byte:

if ( ! defined( 'DONOTCACHEPAGE' ) ) {
    define( 'DONOTCACHEPAGE', true );
}
while ( ob_get_level() > 0 ) {
    ob_end_clean();
}

The whole failure, and how to check a feed you already have for it in sixty seconds, is in the guide on feeds that stop arriving.

When the plugin is enough, and when it is not

It is enough if you sell on Google, Meta or Microsoft and your product data is already clean: those three read the same Google-format file (Meta, Microsoft), and the URL is yours to paste anywhere. Nothing about it expires, and it does not ask you to sign up for anything.

It is not enough when you need the checking, or a channel with its own specification: Heureka publishes its own XML format, idealo an import with a delivery-cost column per carrier, and ChatGPT's file upload takes no XML. Rules that fix titles or exclude products, and a score that tells you what a channel will reject before it does, are the other half. That is what FeedRobin adds on top of the same feed — and the free feed check runs on the plugin's URL without an account, so you can see the difference before deciding anything.

Questions merchants ask

Is the plugin really free?

Yes — GPL, in the official WordPress directory, with no locked features and no account. The feed URL it creates works on its own; FeedRobin is a separate paid service you can ignore.

Is my feed URL public?

It is unguessable rather than secret. The URL carries a random token and the response is sent with a noindex header, so it is not crawled or listed. Everything in the feed is already on your storefront. If the URL leaks, create a new one from the settings screen and the old one stops working immediately.

Will it slow my store down?

The feed is only built when something fetches it, in batches of 200 products, and never while a shopper is on the site. Nothing is added to your storefront pages.

Does it work with a caching plugin?

Yes. The feed sets DONOTCACHEPAGE, which WP Super Cache, W3 Total Cache, LiteSpeed and WP Rocket all honour, and closes any output buffer they have opened.

Do I have to use FeedRobin with it?

No. Paste the URL into Merchant Center and you are done. The plugin makes no outbound requests and sends nothing anywhere unless you press Connect yourself.

Sources

The plugin's own listing and readme: FeedRobin Product Feed for WooCommerce on WordPress.org. Field definitions come from Google's product data specification, and the barcode field from WooCommerce's 9.2 release notes. Which formats Meta and Microsoft read: Meta's catalog fields reference and Microsoft's feed file help. Channel specifications: Heureka's offer feed XML documentation, idealo's CSV feed import and OpenAI's file upload overview. The MPN rule: Google's MPN [mpn] page. The price and tax rule: Google's Price [price] page. The page-cache failure is our own, found on a WooCommerce install running WP Super Cache in September 2026.

The errors this covers

Invalid value [gtin]Fix “Invalid value [gtin]” in Google Merchant Center
Product disapproved
Missing value [item_group_id]Fix “Missing value [item_group_id]” in Merchant Center: variants shown separately
Product disapproved
Invalid value [availability]Fix “Invalid value [availability]” in Google Merchant Center
Product disapproved
Image not crawlable due to robots.txtFix “Image not crawlable due to robots.txt” in Google Merchant Center
Product disapproved

Read next

WooCommerce Google Shopping feed: the complete setup guideWooCommerce has no Google Shopping feed built in. How to create one, the traps — variable products, VAT prices, stale feeds — and how to keep it synced.
7 min
Merchant Center can’t fetch your feed: every reason the download failsRobots rules, redirects to a page, SFTP errors and size limits — and the feed that downloads fine but arrives empty. Why Merchant Center’s fetch fails.
8 min
Fix “Limited performance due to missing value: GTIN [gtin]” in Google Merchant CenterWhat Google's missing-GTIN issue means, where the GTIN goes in your store, and what to do for products with no unique product identifiers.
6 min
What is a product feed — and why every store advertising online needs oneThe file behind every Google Shopping ad, Instagram product tag and price-comparator listing: what a product feed contains, who reads it, and what goes wrong.
5 min
Not sure what's wrong with your feed? Paste your feed URL and FeedRobin checks every product for missing barcodes, images, descriptions and more — free, no account needed.