The Criteo feed

The Criteo feed channel type builds the product catalog Criteo's retargeting banners are made from. This article covers the OneTag pixel the feed cannot work without, why Criteo's price column means the opposite of Google's, how enrollment differs outside the US and UK, and why your ad templates don't appear in a Criteo banner.

Updated August 17, 2026

Criteo runs retargeting ads across the open web: someone browses your store, and Criteo shows them a banner built from your products on other sites afterwards. The banner is composed by Criteo, from your product data — so the catalog you send is the raw material for every ad it builds.

The Criteo feed channel type builds that catalog: a channel whose columns follow Criteo's own product-feed documentation.

What setup does — and doesn't — get you#

Being straight about this matters more than the setup steps, because the first two decide whether the feed does anything at all:

  • The catalog on its own runs no ads. Criteo's OneTag has to be live on your store. OneTag is a small JavaScript snippet that tells Criteo what people looked at, added to a basket and bought on your site. Criteo states plainly that without it, it cannot deliver personalised ads, cannot optimise bidding and cannot report accurately — retargeting has nobody to retarget until it can see browsing. You install OneTag on your storefront, through a tag manager, or through Criteo's own Shopify app. Renable delivers the catalog and never the tag, and it cannot see whether the tag is there. If you set up this channel and nothing runs, this is the first thing to check.
  • The product IDs your OneTag sends must be the same ones this feed sends — and when they drift, ads get worse rather than stopping. Criteo compares the two lists and scores them as a match rate: it asks merchants to keep the score above 80%, and says that below 60% it affects how the campaign performs. So a mismatch is a quality problem that gets steadily worse, not an on/off switch — and it is worth checking early, because it is invisible from the feed alone. Criteo reports your match rate in its own interface; Renable can't see it, and won't guess at it.
  • Creating this channel prepares a feed. It does not open a Criteo account — and outside the US and UK it can't. Criteo GO, the self-serve signup where you create an account and launch campaigns yourself, launched in 2026 and is available in the United States and the United Kingdom only, with expansion described as planned. In every other market — Sweden, Denmark, Norway, Finland and the rest of Europe included — a Criteo account is set up by Criteo's own team after a contract. So for most European merchants, Criteo begins with a sales conversation, and a published feed URL is the useful half you can bring to it. [VERIFY: which markets Criteo GO's self-serve signup covers today.]
  • If you're on Shopify, Criteo's own app may already cover the connection. Criteo publishes a Shopify app that syncs the product feed and deploys the tags to your storefront. That is a genuinely simpler route to being connected, and it is worth saying so: what a Renable channel adds is not the connection but the catalog itself — enriched titles and descriptions, barcode coverage, clean product images — plus one place to manage this feed alongside every other destination you send to.
  • Criteo builds its own banners, so your Studio ad templates don't appear in them. Criteo composites the creative from your catalog using its own layouts. A rendered Renable ad dropped into the image column would be a banner inside a banner, which is why this channel type binds the plain product photo. The image work still pays off, just differently: a clean, background-removed, well-cropped product shot reads far better inside Criteo's frames than a busy one.

Creating the channel#

From a project's Channels section, create a channel and pick the Criteo feed type. It seeds:

  • Criteo's columns, under Criteo's own namesid, title, description, link, image_link, price, then retailprice, availability, gtin, mpn, item_group_id, brand, google_product_category and product_type — bound to your product data. Criteo also accepts name, producturl and bigimage for the title, link and image columns, so a channel already using those names isn't flagged as missing them.
  • Two price columns, and they mean the opposite of what a Google feed means. This is the single most important thing to know about a Criteo feed. On Criteo, price is the price after any discount — the price a shopper pays today — and retailprice is the regular price before the discount. That is inverted compared with Google, where price is the regular price and sale_price is the discounted one. Every product gets a retailprice; when a product isn't discounted it simply equals the price, which is what a standard price with no discount is. The channel type binds both correctly out of the box, so there is nothing to do unless you edit the columns: price is bound to the product data source Renable calls Sale price (the current selling price), and retailprice to the source called Price (the regular one). Rebinding price to the regular price would list every product above what you actually charge. There is no sale_price column here and no sale-price rule, because price already is the sale price.
  • One starter rule — availability drops to out of stock when a product's stock hits zero or its content is incomplete. Worth knowing what that second half means here: Criteo excludes out-of-stock products from its banners entirely, so a product missing its description or image is held back rather than shown badly. If your Fields tab shows a low fill rate on description or image_link, that same share of your catalog is sitting out of Criteo's banners.
  • No custom label columns and no extra-image column. Custom labels are written under Google's naming, which these bare columns don't use; you can add them from the Fields tab if you want them.

On the Settings tab, the Used for card shows the channel declared for Criteo with its always-on Dynamic retargeting use — that's what switches on the field checks. Criteo has no add-ons at all, and unlike the price-comparison destinations that is not because it isn't an ad surface. Criteo's catalog specification has no video field of any kind, and while it does document an additional-image column, it describes no ad format that shows more than one image of the same product — every dynamic layout it publishes shows different products. So there is no chip to offer, and you can still add the column by hand if you want it in the file. There's no Used as choice either — a Criteo feed is always the Main feed.

The file format is preset to CSV, and this one is a convenience rather than a limit. Criteo reads XML, CSV, TSV and JSON — the widest set of any destination Renable sends to — and it names "XML Google Feed format" specifically, inviting merchants to reuse an existing Google or Facebook feed file unchanged. The reason the channel type starts on CSV is what setting the feed up in Criteo actually involves: for a CSV you tell Criteo the delimiter and you're done, while for an XML you also declare the product node name, which node holds the product ID, and the encoding. Switch the format on the Settings tab if you'd rather send XML or JSON — Renable won't warn about any of them.

Delivering the feed#

Criteo fetches your feed URL, and adding it is something you do yourself inside Criteo's Management Center — Criteo documents no account-manager step for the catalog. [VERIFY: whether a Criteo-managed (non-GO) account's Management Center exposes Add Feed to the merchant.] In Criteo, go to Assets → Product Catalog → Feeds → Add Feed, choose Product Feed URL, and paste the address from your channel's Settings tab. See Connecting a channel to Meta, Google, or TikTok for where to find the URL. [VERIFY: the exact menu path in Criteo's Management Center.]

A few details worth knowing:

  • Criteo reads the file up to four times a day, at times you schedule. The times are set in UTC in Criteo's own scheduler, so an edit you publish in Renable reaches Criteo at its next scheduled import rather than immediately. A feed with no scheduled imports can't be reactivated, so leave at least one in place.
  • Criteo checks the parsing before you save. When you add the feed it shows a live preview of how it read your file, so you can confirm the columns landed where you expect. It also has a field-mapping screen if your column names don't match its own.
  • Compression works, but flip both switches together. Turning on Compress feed file (.gz) in Renable changes the feed address (it gains a .gz), and Criteo needs its own Compressed Feed setting turned on to match. Do it before you hand over the URL, or do both at once.
  • A big catalog change can block an import. Criteo lets you set the maximum share of your products that may become non-displayable between imports, and blocks the import if a run crosses it until someone reviews it in Criteo. That is a safety net rather than a fault, but it's worth knowing before a large re-categorisation or a seasonal clear-out.
  • Renable can push to Criteo's SFTP server too, using the SFTP delivery section on the Settings tab, if that's how Criteo set your account up. The hosted URL is the simpler route and the one Criteo's own setup flow points at.

Checking the output#

  • Preview tab → Source view shows the exact file content per product.
  • The Fields tab marks the six fields Renable treats as requiredid, title, description, link, image_link and price — and their fill rates from the latest render.
  • gtin and mpn are both marked recommended, and that pair needs explaining. Criteo asks for a barcode or a manufacturer part number on every product — one of the two, not both. Renable has no way to express "one of these", so marking either one required would flag a catalog that is perfectly fine on the other. Watch the fill rates across the pair rather than on either row alone.
  • item_group_id is marked recommended even though Criteo's own specification calls it required. Criteo needs it when your catalog has variants — different sizes or colours of the same product — and a catalog of standalone products is a perfectly good Criteo feed without it. Without it on a catalog that does have variants, Criteo treats every size and colour as a separate product, which is a real quality problem worth fixing.
  • The ID rule is strict, and it's the one that bites. Criteo reads up to 50 characters, plain ASCII only, with no quotation marks — a quotation mark inside an ID breaks its parser. The ID must also differ from item_group_id, must be unique per variant, and must not change once products are live: Criteo keys a product's display and reporting to it. Renable checks the length and the characters and calls out anything that doesn't fit.
  • google_product_category should be plain ASCII. Criteo reads ASCII here, so a localised category path with accented characters may not land; the numeric category ID (like 2271) always does. Renable doesn't flag this one, deliberately: Google's own English taxonomy contains a handful of accented category names (Piñatas, Sauté Pans, Crêpe & Blini Pans), Renable predicts that value for you, and warning you about a value it generated — with no button to fix it — would be noise rather than help.
  • Images have requirements Renable can't check. Criteo asks for at least 800 × 800 pixels, under 16 MB, and served as a PNG, GIF or JPEG. Renable can't measure a remote image while writing the feed, so check those against your own product photos.
  • Availability has no backorder value. Criteo reads exactly in stock, out of stock and preorder, which is what this channel type writes. It leaves products marked out of stock out of its banners.
  • Render results and warnings show on the Activity tab — see Channel events and troubleshooting.

Related articles#