Skip to main content
Metrics type: Key MetricsCategory: Cross-Platform

At a glance

A cross-platform alert that joins Criteo’s live dynamic-ad serving against your commerce platform’s real-time stock levels and flags every case where Criteo is still serving a dynamic product ad for a SKU that is actually out of stock. Criteo’s entire model is dynamic product retargeting, so an out-of-stock SKU in the creative pool is pure waste: you pay the click, the shopper lands on a product page they cannot buy, they bounce, and the conversion is impossible by definition. This card only exists because Vortex IQ sees both sides, Criteo’s serving layer and the commerce stock ledger, in one place. It is the highest-confidence “stop paying for this right now” signal in the Criteo manifest, because there is no ambiguity: a quantity of zero cannot convert.

Calculation

Calculated automatically by joining your Criteo data with your connected commerce platform. See the At a glance summary above for what the metric tracks and the worked example below for a typical reading.

Worked example

A US beauty DTC retailer on Shopify runs Criteo dynamic retargeting across a 2,400-SKU catalogue. A flash promotion sold through three hero SKUs faster than the feed refreshed. The join evaluates Criteo’s live dynamic-ad serving against Shopify stock. Account currency USD. Window is real-time, snapshot 18 Jun 26. What the pattern tells you:
  1. Three hero SKUs at quantity zero are still being served. That is roughly USD 645 of at-risk spend in a single day on ads that cannot convert. Every click sends a shopper to a sold-out product page. The waste is not hypothetical; it is billed and ongoing.
  2. The feed has not caught up to the stock-out. Shopify recorded the sell-through, but Criteo’s catalogue still lists the three SKUs as in stock, so dynamic creative keeps selecting them. The gap between the storefront and the feed is the entire problem, and feed cadence is the fix.
  3. A near-sibling SKU is fine. The 50ml serum (BTY-1188) is in stock and converting normally, which proves the campaign and audience are healthy. The fault is per-SKU stock-out, not a campaign-level failure, so the action is surgical, not a campaign pause.
  4. The fastest mitigation is a feed re-sync. Force a catalogue push so Criteo sees quantity zero and drops the SKUs from the dynamic pool automatically. Most stores running daily feed sync are exposed during flash events; moving to hourly or near-real-time stock sync closes the window.
  5. The structural fix is stock-aware feed rules. Configure the feed export to exclude or suppress zero-quantity SKUs at the source, so a stock-out removes the SKU from Criteo’s eligible pool the moment it happens rather than at the next scheduled sync.
  6. There may be a small residual conversion. If any of these SKUs shows an attributed conversion, it is almost certainly lagged credit from a click before the stock-out, not a sale of an out-of-stock item.
Quick sanity tests:
  • Breach concentrated on hero SKUs during a promotion = feed lag against fast sell-through, tighten sync cadence.
  • Breach on a single SKU = isolated stock-out, suppress that SKU in the feed.
  • Breach clears after a forced feed re-sync = confirmed feed-lag cause, no campaign change needed.
  • Breach persists after re-sync = the feed export is not honouring stock state, fix the feed rule.
  • At-risk spend is large relative to total = your feed cadence is too slow for your stock velocity.

Sibling cards merchants should reference together

Reconciling against Criteo

Where to look in Criteo’s own dashboard:
Criteo Management Centre → Catalogue / Feed Manager → Products to see which SKUs Criteo currently treats as available, and your commerce platform’s inventory view (Shopify Admin → Products → Inventory, BigCommerce → Products, or Adobe Commerce → Catalog → Products) for the live stock quantity.
Criteo on its own cannot show you this card, because Criteo only knows what its catalogue says, not what your storefront actually has in stock at this second. That is the cross-platform gap Vortex IQ closes. To reconcile manually, take the breached SKU list from this card, look each up in Criteo’s catalogue (it will show as available, which is the bug) and in your commerce inventory (it will show quantity zero, which is the truth). The mismatch between the two is exactly what this card surfaces automatically. Why our number may legitimately differ from a manual check: Cross-connector reconciliation: This card is inherently cross-platform; the join is its whole reason for existing:

Known limitations / merchant FAQs

Why does Criteo keep serving ads for a product I have sold out? Because Criteo serves from its catalogue, and the catalogue is only as fresh as your last feed sync. The storefront recorded the sell-through immediately, but Criteo will not know until the next feed push tells it the quantity is zero. On a daily-sync store, that gap can be most of a day, long enough to waste real money during a fast-moving promotion. Tightening feed cadence is the direct fix. Is this really waste if the shopper might buy something else when they land? Some recovery happens, but you should not count on it. The shopper clicked an ad for a specific product they wanted, found it sold out, and most will bounce rather than browse. Treat the spend as waste for planning purposes; any cross-sell recovery is a bonus, not a reason to tolerate the leak. What is the fastest way to stop the bleed when this fires? Force a catalogue feed re-sync so Criteo sees the zero quantity and drops the SKUs from the dynamic pool. That is minutes of work and stops the waste immediately. The durable fix is a feed export rule that suppresses or excludes zero-quantity SKUs at the source, so future stock-outs remove themselves from the eligible pool the moment they happen. My SKU is at zero but it is on backorder and still buyable, is this a false flag? Yes, and it is worth fixing. A backorder-enabled SKU at quantity zero can still convert, so it should not be treated as out of stock. Configure the feed rule and the inventory policy so backorder and pre-order SKUs report as available; otherwise the card will over-flag them. The card honours whatever stock definition your feed and inventory policy supply. Does ATT or attribution loss affect this card? Barely, which is one of its strengths. The card keys off stock state and ad-serving state, both of which are observed directly rather than attributed, so iOS ATT and Safari ITP do not distort it. A breach here is high-confidence: a quantity of zero cannot convert regardless of how attribution is measured. How is this different from feed rejections? Two distinct feed failures. A feed rejection means Criteo refused the catalogue or specific items, so no creative renders at all. An out-of-stock-serving breach means the creative renders fine, the SKU just is not buyable. One stops ads; the other runs ads that cannot convert. Review both feed-health cards together for the complete picture.

Tracked live in Vortex IQ Nerve Centre

Active Dynamic Ads on Out-of-Stock SKUs is one of hundreds of KPI pulses Vortex IQ tracks across Criteo and 70+ other ecommerce connectors. Nerve Centre runs the detection layer; Vortex Mind investigates the cause when something moves; Ask Viq lets you interrogate any number in plain English. Start for free or book a demo to see this metric running on your own data.