Most WooCommerce stores get their first Google Shopping feed from a free plugin, and it works. This is about the point where it stops working, and how to see that point coming before Merchant Center tells you.
What you'll take away
- Five dimensions decide it — attribute mapping, variation handling, scheduling, multi-channel output, support.
- There's no magic SKU count — the threshold is structural, and it depends on where your attributes live.
- WP-Cron is the quiet killer — it only fires when your site gets traffic, so a slow week means a stale feed.
- Test at full size on your own hosting — a half-written file arrives without an error email.
Disclosure: we build NextFeed, a paid feed platform, so read this as a vendor's comparison. Where a claim depends on your setup, we say what to verify rather than asserting a number.
Merchant Center is not competing with your cart
One search phrase deserves a gentle correction: "Google Merchant Center vs Shopify". The two never compete. Your store produces a product feed, Merchant Center ingests and validates it, and Shopping ads plus free listings surface the results. Merchant Center holds no inventory and checks out no orders. It is the intake desk, not a storefront.
Every cart sits in the same position in that chain, and a feed plugin only owns step two. Which narrows the comparison to something honest: produce a valid file, keep it fresh.
The four plugins worth comparing
| Plugin | Shape | Where it fits |
|---|---|---|
| Google Listings & Ads | Official extension built with Google, free | Google only, minimal configuration |
| Product Feed PRO | Freemium generator with configurable mapping | Several channels, paid tiers add depth |
| CTX Feed | Template-driven, large channel library | Many destinations, pro unlocks dynamic fields |
| WP All Export | General-purpose export engine | You build the XML, which is the weakness and the strength |
How they differ, dimension by dimension
Attribute mapping
Google requires id, title, description, link, image_link, and price. Everything past that (brand, GTIN, size, colour, material) is what makes a listing eligible for richer formats and more queries. The plugins differ in how attributes travel from WooCommerce into the file: fixed mapping in Listings and Ads, configurable panels in Product Feed PRO and CTX Feed, manual construction in WP All Export.
The breakdown point is where your data lives
Attributes stored in custom fields, third-party product tables, or taxonomy terms are where simple mapping disappoints, because tooling that reads native WooCommerce fields well tends to read everything else badly. Check whether the mapping UI can reference a custom field or a taxonomy term directly, and whether that mapping can differ per channel.
Variation handling
Google wants one row per variant, grouped by item_group_id, each carrying its own size, colour, SKU, and ideally its own GTIN. Simple products hide this problem entirely. A catalogue of 500 parent products with six variations each is 3,000 rows and 3,000 attribute sets to regenerate on every refresh.
All four tools can split parents into children. The differences show up in per-variation images, description fallbacks for variants without their own copy, and whether out-of-stock variations are submitted with an availability flag or dropped from the file. Check which behaviour each plugin defaults to, because the two produce very different Merchant Center diagnostics.
Scheduling
WP-Cron only fires when someone visits
Feed plugins regenerate on WP-Cron, and WP-Cron runs on page loads rather than a clock. On a quiet store, or on managed hosting where WP-Cron is disabled by design, regeneration drifts. Prices change in the store while the feed still serves yesterday's, and Merchant Center reads the gap as a price mismatch.
The cleaner arrangement combines two mechanisms: server-level cron driving generation on a real clock, plus a scheduled fetch in Merchant Center pulling a stable URL. Freshness then never depends on visitors. Listings and Ads manages cadence inside its own connection, while the generators vary in whether server cron is a first-class option or an afterthought.
Multi-channel output
Google's schema is one dialect among several. Meta and TikTok want their own fields and run their own validation, so a Google feed pointed at Meta produces data that is subtly wrong rather than obviously broken. Listings and Ads is single-channel by design. CTX Feed and Product Feed PRO lean on template libraries. WP All Export makes you build each channel from scratch. The long-term cost is divergence, because channels change their rules independently and someone has to maintain every mapping.
Support
Free plugins on WordPress.org get forum support, answered when the maintainer has time. Freemium tools gate real support behind the licence. Ask the blunt version of the question: if disapprovals spike the evening before a promotion, who answers, and what wait is acceptable against your revenue?

Where free stops being enough
There is no universal SKU count, because the threshold is structural rather than numeric. Four variables set it: catalogue size, since generation time and memory grow with rows. Variation depth, because rows multiply fast. Attribute location, since native fields are easy and custom storage is not. And channel count, because each addition costs mapping and maintenance.
The failure is rarely loud. Large catalogues on modest hosting hit PHP memory or execution limits mid-generation, which surfaces as a half-written file rather than an error email. Smaller catalogues fail more quietly still: stale prices from cron drift, GTINs never mapped, impressions capped by missing identifiers, all of it visible only inside Merchant Center's diagnostics.
What to verify before committing
Five checks, on your hosting, at your catalogue's real size
Common questions
Is a free WooCommerce product feed plugin good enough?
For a small catalogue of simple products with attributes in native WooCommerce fields, feeding one channel, yes. It stops being enough when variations multiply the row count, attributes live in custom fields, WP-Cron drifts on quiet traffic, or you add a second channel with its own schema.
Why is my WooCommerce feed showing old prices in Merchant Center?
Usually WP-Cron. It fires on page loads rather than on a clock, so a store with quiet periods regenerates late or not at all. Move generation to server-level cron and point Merchant Center at a stable feed URL on its own fetch schedule.
How should product variations appear in a Google Shopping feed?
One row per variant, grouped with item_group_id, each row carrying its own size, colour, SKU and image where one exists. Submitting only parent products hides your variants from every query that names a size or a colour.
Do I need a paid feed tool for multiple channels?
Not necessarily, but each channel adds a mapping to build and maintain, and channel rules change independently. The cost of free tooling here is your own time, spread across every schema update that lands without warning.
Free tool
Not sure if your feed has errors?
Run your Google Shopping, Meta, or TikTok product feed through our free validator and get a prioritized error report before channels reject your products.
Editorial note
Written by Muhammad Norafif
This article was published on August 29, 2026 and last updated on August 29, 2026. NextFeed builds product feed management software for Shopify, Google Shopping, Meta, and other commerce channels.