Ducted

Your store,
in every shopping channel.

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.

Start from where the products already live

Selling creator merch?

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.

Shopify

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.

WooCommerce

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.

Teemill

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.

Spring

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.

Printify Pop-Up

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.

Bonfire

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.

Fourthwall

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.

A feed URL or a file

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.

A REST API

Point Ducted at the endpoint and it collects the whole catalog, paginated responses included, with nothing to configure.

Other platform?

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.

Every shopping channel, from one catalog

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.

One record per size and colour, or one per product

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.

Both shapes, one project

Each feed picks its rows

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.

Google Shopping feed: one row per size and colour
iditem_group_idcolorsize
TEE-BLK-STEEBlackS
TEE-BLK-MTEEBlackM
TEE-NVY-STEENavyS
TEE-NVY-XLTEENavyXL
Meta catalog: one row per product
idcolorsizeadditional_image_link
TEEBlack, NavyS, M, XLtee-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.

Running feeds for more than one store

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.

Catch the rejection before the platform does

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.

Validate your product feed for free →

When the platform's vocabulary isn't yours

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.

One catalog. Every shopping channel.

Connect a store and start mapping free, or check what your current product feed would fail on, without an account.

Create free accountCheck your product feed