
Criteo feed for Shopify
Criteo is not a marketplace and not a comparison site. It is a retargeting network that builds Dynamic Ads from your Product Catalog in real time, and the catalog is a feed you host. Feedflock turns your Shopify catalog into the Google-format XML that Criteo's own guide asks for, with IDs that match your pixel, and keeps the URL fresh for Criteo's daily imports.

Your product types. The channel's categories.
The channel files offers under its own category tree. Feedflock suggests a category for each Shopify product type and you just confirm. One mapping covers every product of that type, including products you add later.
A discount is a second price, and Criteo names them backwards.
In Criteo's own vocabulary, price is the final price after a discount and retailprice the standard one: the reverse of Google's names. A Google-format feed carries the same pair as g:price and g:sale_price, and Criteo's locked Google rules do the swap. Feedflock sends g:price as the regular (compare-at) price and g:sale_price as the amount actually charged, so Criteo's layouts can show the strikethrough.
Catch feed issues before Criteo does.
Before every generation Feedflock checks that every field the channel requires is filled, and, on templates verified against the channel's own spec, that the values fit its rules. Most problems are fixed with one click, without editing products in Shopify.
Setup
Live in five steps
From a bare Shopify store to a listed offer: the whole setup fits into one coffee break.
Start with a Criteo account and the pixel
A Criteo Commerce Growth account is opened with Criteo, not self-serve, and the pixel on your site reports the product IDs people view. The feed's id must match those exactly, or retargeting falls apart.
Install Feedflock
Add Feedflock from the Shopify App Store. It reads your products, variants, stock and images directly through the Shopify API.
Pick the Criteo template
Create a new feed and choose the Criteo template: Google-format RSS 2.0, one item per variant. id, item_group_id, title, description, link, image_link and price come mapped from the start.
Keep the IDs in line with your pixel
The feed's id defaults to the SKU, else the Shopify variant ID. Criteo warns that any change to product IDs disrupts display and reporting, so pick the value your pixel sends and keep it stable.
Add the feed URL in Criteo
In Commerce Growth, go to Assets > Product Catalog > Feeds > Add feed and choose Product Feed URL. Test Setup detects the Google structure by itself (3 mappings and 9 locked rules), then Import to catalog. Imports run daily, up to four times a day.
https://feedflock.appfleece.com/f/demo-criteo/criteo.xml
The feed
What the channel receives
<item> <g:id>SKU-2048</g:id> <g:item_group_id>8812345678901</g:item_group_id> <g:title>Linen shirt Sand M</g:title> <g:description>Soft linen shirt with a regular fit.</g:description> <g:link>https://shop.example/products/linen-shirt-sand?variant=46123456789012</g:link> <g:image_link>https://cdn.shop.example/files/linen-shirt-sand.jpg?v=1718000000</g:image_link> <g:price>59.00 USD</g:price> <g:availability>in stock</g:availability> <g:brand>Nordlin</g:brand> <g:google_product_category>Apparel & Accessories > Clothing > Shirts & Tops</g:google_product_category> <g:product_type>Men's shirts</g:product_type> <g:condition>new</g:condition> <g:size>M</g:size> </item>

Nordlin
Linen shirt Sand
$59
Feed fields
g:id
SKU-2048
g:item_group_id
8812345678901
g:title
Linen shirt Sand M
g:description
Soft linen shirt with a regular fit.
g:link
https://shop.example/products/linen-shirt-sand?variant=46123456789012
g:price
59.00 USD
g:availability
in stock
g:brand
Nordlin
g:google_product_category
Apparel & Accessories > Clothing > Shirts & Tops
g:product_type
Men's shirts
g:condition
new
g:size
M
The channel
Ads built from your catalog, in real time
Criteo's Dynamic Ads and Showcase ads are assembled from the Product Catalog. Nothing is ever listed on a Criteo-owned site; the feed is ad inventory across Criteo's publisher network.
Your Google feed already qualifies
Criteo's own guide says it: already using a Google or Facebook product feed? You can reuse the same file, no extra formatting required. Test Setup maps it automatically.
Sold out leaves the banners, not the feed
Items marked out of stock are excluded from the banners by Criteo itself, so the feed can always carry the whole catalog, and a restock comes back on its own with the next import.
The feed
- The Google RSS 2.0 body Criteo's own guide shows: one item per variant, every attribute g:-prefixed, the spelling Criteo's XML sample uses
- id defaults to the SKU (else the variant ID) and item_group_id to the numeric product ID, so the two can never collide, a collision Criteo calls undefined behavior
- Variant-aware titles up to Criteo's 500 characters, and descriptions sent as plain text with the HTML stripped
- g:price keeps the regular price and g:sale_price the amount actually charged, the pair Criteo's locked rules read as retailprice and price
- Availability in Criteo's spaced values in stock / out of stock / preorder; sold-out variants stay in the feed and Criteo keeps them out of the banners
- Categories from Google's taxonomy, which Criteo accepts as an ID or a full path, with your own product_type alongside
- A readiness check lists required fields that came out empty before Criteo marks the products Not Displayable, and fetch tracking warns you if the imports stop
Deep dive
A URL Criteo polls, not a file you upload
- Three connection types; Product Feed
URLis the one a hosted feed fits CSVorXMLin the Google Feed format,ZIPor GZ compression supported- Imports run daily by default, up to four times a day in
UTC, with manual import anytime - A stability threshold blocks an import that loses too many products at once
Technical details
Criteo offers three ways to connect a catalog: an e-commerce-platform integration (Shopify among 35+), a Product Feed URL it polls, and Criteo's own FTP. The feed URL is the one that gives you control of the file. The feed must be CSV or XML in the Google Feed format, and ZIP or GZ compression is supported across all connection types.
Criteo imports the catalog every day, you can schedule up to four imports a day (UTC), and a manual import can be launched at any time. Two safety rails sit on the merchant's side: if your server filters by IP, Criteo's ranges 178.250.0.0/21 and 2a02:2638::/32 need allow-listing, and the Feed Stability threshold blocks an import in which too many products would become non-displayable at once, until you review it. Feedflock hosts the file on a stable URL and regenerates it every hour, so every import picks up current prices and stock.
A Google feed, because Criteo says so
- Criteo's own tip: a Google or Facebook feed can be reused as-is
- Its
XMLsample is a Google Shopping feed, not a Criteo-shaped one - Test Setup turns a Google feed into 3 mappings and 9 locked rules
- The mappings rename title → name, link → producturl, image_link → bigimage
Technical details
Criteo's setup guide says it three times: a feed for the URL connection must be CSV or XML in the Google Feed format, a Google or Facebook feed can be reused with no extra formatting, and the guide's own XML sample is a Google RSS 2.0 document. There is no Criteo XML dialect of its own.
When a Google-structured feed arrives, Test Setup builds a ready-to-use configuration with 3 mappings and 9 predefined rules, locked because they align Google's structure with Criteo's specification. The mappings cover the three names where Criteo's vocabulary differs: title becomes name, link becomes producturl, image_link becomes bigimage. Every other field name is the Google name, which is exactly the spelling Feedflock emits.
IDs, variants and the pixel
- id, at most 50
ASCIIcharacters, must exactly match the ID the pixel reports - Changing product IDs disrupts display and reporting
- item_group_id groups variants and must never equal any id
- gtin takes 8, 12, 13 or 14 digits; mpn is required when there is no
GTIN
Technical details
The pairing that matters on Criteo is to the pixel: the feed's id must exactly match the ID your website pixel reports for the same product, and Criteo warns that any change to product IDs disrupts display and reporting. The template defaults id to the SKU, falling back to the Shopify variant ID. Each variant of a product needs its own distinct id, grouped under a shared item_group_id, and the two ranges must never meet, because an id equal to an item_group_id is undefined behavior and updates may be ignored.
Criteo labels gtin and mpn Required, with a condition attached: the MPN is required for products without a GTIN, and products with neither may not be eligible for all features (they are still displayable). The template therefore treats them as a conditional pair rather than hard requirements: gtin comes from the Shopify barcode (8, 12, 13 or 14 digits) and mpn stays empty unless you map a real manufacturer number.
Prices, discounts and stock
- A period decimal, no thousands separator,
ISOcurrency in the value: 59.00USD - Criteo's price is the final price after a discount; retailprice is the standard one
- In the Google format that pair is g:sale_price and g:price, and the template sends both
- in stock / out of stock / preorder, spelled with spaces; sold-out items stay in the feed
Technical details
Prices are written with a period decimal separator and no thousands separator, with the ISO currency code in the value, as in Criteo's own samples: 59.00 USD. Criteo's naming is the reverse of Google's: its price is the final price after a discount and retailprice the standard price before one. In a Google-format feed that pair is exactly g:sale_price and g:price, which Criteo's XML sample carries, so the template keeps Google's meanings (g:price holds the regular price, g:sale_price the amount actually charged) and Criteo's locked rules do the swap.
Availability is one of three values spelled with spaces: in stock, out of stock, preorder. A sold-out variant stays in the feed marked out of stock, and Criteo excludes it from the banners itself. It counts as Not Displayable, alongside anything missing its ID, name, URL or image. Criteo publishes no file-size or item cap; the only limit is 256 KB of data per product.
The takeaway
One hosted URL in the Google format Criteo asks for, IDs that match your pixel and an hourly refresh behind Criteo's daily imports. Your Shopify catalog stays the source of truth for every Dynamic Ad.
Claude · ChatGPT
Or set up your Criteo feed in chat
Connect Feedflock to Claude or ChatGPT and ask. It creates the feed as a draft, maps your categories to Criteo's own tree and tells you what is still missing. You approve every change.
Create a Criteo feed for my store and map my categories.
I'll create it as a draft and show you each change before I make it.
FAQ
Related feeds
Explore all 101 channelsGet on every marketplace that matters this afternoon.
Install free, connect your first feed in minutes, and let Feedflock keep it fresh and validated.