Shopify, WooCommerce, Teemill, Spring, Printify Pop-Up, Bonfire, Fourthwall, or any feed, file or API.
Every shopping channel wants the same catalog in a slightly different shape: its own field names, its own availability vocabulary, its own rules for variants and sale prices. Ducted maps your products once, generates a feed per channel from spec-verified templates, and tells you which records a platform would reject before you upload.
Fourthwall, Teemill, Spring, Printify Pop-Up, Bonfire and Shopify side by side: what you paste, what comes through, and the channel plays that work for a drop.
Paste your store address, or the address of one collection, and Ducted reads the catalog behind it - every size and colour as its own record with its price, sale price, images and stock, nothing installed.
Paste your store address. Ducted reads your catalog through the public product API - every variation of a variable product as its own record, with no plugin and no API keys.
Paste your store address. Ducted reads the whole catalog behind it - every colour and size as its own record, with its price and sale price in your store currency, stock and images.
Paste your Spring store address. Ducted reads the catalog behind it - every colour and size of every design as its own record, with its price, mockup images, availability and Google product category.
Paste your Pop-Up Store address. Ducted reads the catalog behind it - every size and colour as its own record, with its price, stock, mockups and the product description.
Paste your Bonfire store address. Ducted reads the designs behind it - every colour and size as its own record, with its price, images and stock.
Paste your shop address. Ducted reads the catalog behind it - every product, size and colour as its own record, ready for Google Shopping, Meta and TikTok.
CSV, TSV, XML, JSON, JSONL or XLSX, uploaded once or fetched from a URL on a schedule. WooCommerce and BigCommerce export shapes are recognised on sight.
Point Ducted at the endpoint and it collects the whole catalog, paginated responses included, with nothing to configure.
Website Indexing builds the source from the store itself: product pages, category listings, JavaScript-rendered catalogs.
Most stores have one of these already. The ones that only have a website are exactly the accounts other feed tools turn away.
Map your products once. Each channel gets its own required fields, accepted values and format rules, built into the template rather than looked up in a spec sheet.
Shopping ads and free listings in Google Search, with Merchant Center fed from your mapped catalog.
Feed spec →Facebook and Instagram catalog ads and shops, retargeting included, from one product catalog.
Feed spec →Catalog ads on TikTok, with the one-sku_id-per-variant rule built in.
Feed spec →Product Pins and shopping ads on Pinterest, with Pinterest's ten accepted price shapes handled.
Feed spec →Shopping ads in Bing, served from the same mapped catalog as your Google feed.
Feed spec →Dynamic product ads on Snapchat, with the brand-or-GTIN-or-MPN rule built in.
Feed spec →Dynamic product ads on Reddit, including the JSON-array image column Reddit expects.
Feed spec →Dynamic Product Ads on X, with X's identifier rule and 100-character limits built in.
Feed spec →Commerce Growth and Retail Media campaigns on Criteo, with its currency-free price format built in.
Feed spec →The OpenAI product feed for ChatGPT Ads, generated as a downloadable file.
ChatGPT Ads feed →Google Shopping requires a colour and a size on every apparel item sold in the US, the UK, Germany, France, Japan and Brazil (Microsoft in the US, the UK, Germany and France), so a hoodie listed once with "S, M, L, XL" is not a valid apparel item there. Google, Meta, TikTok, Pinterest, Microsoft and X read variants as one record per size and colour grouped under the product with item_group_id, and every Ducted retail template carries that field.
Each feed chooses its own rows: one per size and colour, or one per product with sizes and colours as lists and the other colours' photos as additional images. A Google Shopping feed per variant and a Meta catalog per product come from the same project with no second import, and Ducted tells you when a channel requires one row per size and colour.
| id | item_group_id | color | size |
|---|---|---|---|
| TEE-BLK-S | TEE | Black | S |
| TEE-BLK-M | TEE | Black | M |
| TEE-NVY-S | TEE | Navy | S |
| TEE-NVY-XL | TEE | Navy | XL |
| id | color | size | additional_image_link |
|---|---|---|---|
| TEE | Black, Navy | S, M, XL | tee-navy.jpg |
A feed URL, a file or an API keeps the shape the source gives it. Where its records carry variants, each feed chooses its rows the same way.
Each store is its own project, and a single plan covers several (5 on Business, 15 on Pro), at one flat monthly price with no per-seat charges. Add a client, map their catalog, hand over a permanent feed URL per channel.
When a client asks why a campaign is underperforming, feed pull tracking shows which platforms fetched the feed and when, so you can answer instead of guessing.
Free to try · Creator €15/mo · Pro €79/mo · Feed Setup €89 one-off · Website Indexing from €45. Compare plans.
Product feeds fail on the details: an availability value spelled the way another channel wants it, a price without its currency code, a sale price higher than the price, an image link that is not a URL. Ducted names the field, counts the affected records and shows example rows from your own feed, before you send it.
Findings are graded Critical, Error, Warning or Recommendation, and every feed gets a verdict: rejected, issues, or clean.
The same stock status is in_stock for Google and Reddit, in stock for Meta, Pinterest, Microsoft and Criteo, and TikTok, Snapchat and X add available for order and discontinued. Age group and size type differ too: Meta and X add teen and all ages, and Pinterest writes big_and_tall where Google takes big and tall separately. And a store's own words for condition or gender ("Pre-owned", "Womens") still have to land on the accepted list.
Map each incoming value once and every record follows. Ducted pre-fills the obvious matches, flags the ones it is unsure about so you can confirm rather than discover them later, and keeps a count of what is still unmapped.
Connect a store and start mapping free, or check what your current product feed would fail on, without an account.