Paste the address. No plugin, no API keys.
WooCommerce already publishes your catalog: every store running it serves a public product API that needs no plugin, no keys and no export. Ducted reads it from the store address alone - including every variation of a variable product, which is the part a feed actually needs and the part most exports flatten away.
A WooCommerce store sells a T-shirt in five sizes as one product with five variations, each with its own price, stock and SKU. Google Shopping and Meta do not buy that: they want a row per size, grouped under the product, or the apparel listing is rejected.
Most WooCommerce exports give you the parent product and leave the variations behind, so the feed advertises a price and a stock level that belong to nothing in particular. Ducted reads the variations themselves, so what reaches the channel is what the shopper can actually put in a basket.
The catalog arrives as structured records, not page text. Every variation carries the fields a shopping feed is built around.
Every variation a product publishes arrives as its own record, grouped under that product - the shape Google Shopping requires for apparel. Size, colour, finish, length, whatever the store sells by: each one carries its own price and sale price in your store currency, its own stock, its own image when the store sets one, its SKU, and the link WooCommerce publishes for that variation. Simple products stay one record each.
The fields arrive pre-marked, so a new project maps itself: create a Google Shopping or Meta catalog feed and id, title, description, link, images, price, sale price, availability, colour and size are filled in before you touch anything, with item group and product type matched by name.
GTINs and Google product categories are not in what the Store API publishes, so a channel that wants one gets it from a second source with Feed Mixer, or you set it on the feed. Brand comes through only if your store uses WooCommerce's brands taxonomy - most do not, so most set a fixed brand on the project. A store that sells by something other than colour and size - plug type, ring size, length - keeps its own wording, and you map it where the channel wants it.
Some hosts and security plugins refuse requests that are not a browser, and a few turn the Store API off. Ducted tries a browser-grade connection before giving up and tells you plainly when that is what happened. If it is, ask whoever runs the site to allow the Ducted Feed Fetcher - everything they need is on our bot page - and connect the store again.
Reading a WooCommerce store means walking its own shop API rather than downloading one file its owner published, and a large catalog is hundreds of requests per read. Scheduled refreshes on a connected store therefore run at most every twelve hours, whatever your plan allows for feed URLs - being a good guest on a merchant's own server is worth more than an hourly number that nobody's prices change at.
Refreshing by hand is unaffected: that is a person asking once, and you can do it whenever you like.
Ducted re-reads the store on every scheduled refresh, so new products and variations appear, a size that sells out switches to out of stock and a sale shows both prices without anyone touching the feed. The shape of the data is checked on every refresh as well: if WooCommerce changes what it publishes, Ducted tells you rather than quietly serving an empty feed.
One mapped catalog, one output feed per channel. Each template carries that platform's required fields, accepted values and format rules.
Create a free account and paste the store address, or validate a product feed you already run.