Skip to main content
Card class: HeroCategory: Cross-Channel

At a glance

A cross-channel alert that joins Criteo campaign spend against the live rejection status of the product catalogue each campaign depends on, and flags any budget flowing into a campaign whose linked feed has active rejections. This is the single highest-leverage card in the Criteo manifest because Criteo is feed-driven by design: dynamic creative is rendered from the catalogue, so when items are rejected, no creative renders for them, and any spend the campaign keeps pacing is wasted on whatever fallback inventory remains. Feed rejections are silent, they do not stop the campaign, they just hollow it out. This card turns a buried diagnostics warning into a money figure: here is exactly how much spend is exposed to a feed that is partly broken right now.
What it countsThe total campaign spend over the window flowing into campaigns whose linked catalogue currently has active feed rejections (rejected items, suppressed SKUs, or a wholesale catalogue rejection). The alert is the breach; the displayed table lists each affected campaign, its spend, and the rejecting catalogue.
Cost basisCPC-dominant. The exposed spend is real billed cost on a campaign whose creative is degraded by the rejection.
CurrencyAdvertiser-account currency for the exposed-spend figure.
Conversion attribution30D click + 7D view default. Feed-rejected campaigns typically show depressed conversions because the intended dynamic creative is not rendering.
Attribution window30D click + 7D view default.
Bot / invalid trafficNot the relevant axis; the waste is structural to the feed rejection.
iOS 14.5+ ATT impact on the cardLow. The card keys off feed-rejection status and spend, both observed directly, so ATT does not distort it.
Catalogue-feed dependencyThis card is entirely about feed health. It is the most direct expression of Criteo’s feed dependency in the whole manifest: spend exposed to a broken feed, named and costed.
Time window30D (rolling 30 days) for the spend total, evaluated against the current feed-rejection status.
Alert triggerany spend on a campaign whose linked catalog has feed rejections. An illustrative rule; the breach fires whenever a campaign with active linked-feed rejections continues to accrue spend.
Rolesowner, marketing, operations

Calculation

Calculated automatically by joining your Criteo campaign spend with your connected catalogue feed status. See the At a glance summary above for what the metric tracks and the worked example below for a typical reading.

Worked example

A French DTC homeware retailer on BigCommerce runs four Criteo campaigns off a single product catalogue. On 02 Jun 26 a bulk product-description edit introduced banned promotional text in the title field, and Criteo rejected a large batch of SKUs. Account currency EUR. Window is the rolling 30 days.
CampaignLinked catalogueRejected SKUsSpend in window (€)Conv. vs priorState
Dynamic retargeting, full catalogueMain catalogue1,840 of 3,1009,200-41%BREACH
Dynamic consideration, abandonersMain catalogue1,840 of 3,1004,100-38%BREACH
Sponsored product, priority SKUsPriority feed01,300flatOK
Commerce Media prospectingMain catalogue1,840 of 3,1002,600-22%BREACH
What the pattern tells you:
  1. Three campaigns sharing the main catalogue breached; the one on a separate priority feed did not. That instantly localises the fault to the main catalogue, not to any campaign’s bidding or audience. The shared dependency is the story.
  2. Roughly EUR 15,900 of spend is exposed to a feed that is 59% rejected. That is the number this card exists to surface. Buried in Feed Manager Diagnostics it is just a warning count; expressed as exposed spend it becomes an urgent, costed problem an owner or marketer can act on.
  3. Conversions fell hardest where the rejection share is highest. The full-catalogue retargeting campaign (most dependent on the rejected SKUs) dropped 41%, while Commerce Media prospecting (less dependent on the exact rejected items) dropped only 22%. The conversion damage tracks the dependency.
  4. The campaigns did not stop, which is the trap. A feed rejection does not pause a campaign. It keeps pacing against the surviving 41% of the catalogue and any generic fallback, so spend looks normal while effectiveness has collapsed. Only a feed-aware join makes this visible.
  5. The fix is at the feed source, not in Criteo. Open Criteo Feed Manager Diagnostics to read the rejection reason (here, banned text in the title field), correct the product data on the storefront feed export, and force a re-sync. The rejected SKUs re-enter the auction within 24 to 72 hours and conversions recover.
  6. Until the feed is fixed, the exposed spend keeps accruing. If a same-day fix is not possible, consider reducing budget on the worst-affected campaign so you are not pacing full spend against a half-broken catalogue.
Quick sanity tests:
  • Multiple campaigns breach + they share a catalogue = feed-level fault, fix the catalogue.
  • One campaign breaches + others on the same catalogue are fine = campaign-specific issue, not the feed.
  • Conversion drop scales with rejection share = confirmed feed-driven effectiveness loss.
  • Breach clears after a feed re-sync = confirmed, no campaign restructure needed.
  • High exposed spend + high rejection share = reduce budget until the feed is fixed.

Sibling cards merchants should reference together

CardWhy it matters next to Spend on Campaigns with Active Feed RejectionsWhat the combination tells you
Active Dynamic Ads on Out-of-Stock SKUsThe other feed-driven waste card.Rejections stop creative rendering; out-of-stock serving runs creative that cannot convert. Together they are the full feed-waste bill.
Wasted-Spend Burst (feed-failed dynamic creative)The acute burst symptom of a feed failure.A feed rejection here often trips the burst card too; both firing confirms the cause and sizes the acute bleed.
Wasted SpendThe trailing-30-day waste audit.Sustained feed rejections show up here as chronic wasted spend.
Conversion Rate TrendThe conversion-side symptom.A conversion-rate decline that scales with rejection share confirms the feed as the cause.
ROASThe efficiency headline.Feed rejections silently drag ROAS; fixing the feed is often the single biggest ROAS lever on a Criteo account.
Total SpendThe account-level denominator.Sizes the exposed spend against total to judge how much budget is at risk.

Reconciling against Criteo

Where to look in Criteo’s own dashboard:
Criteo Management Centre → Feed Manager → Diagnostics for the rejection reasons and rejected-item counts, and Reporting → Performance Report grouped by campaign for the spend on each campaign linked to the affected catalogue.
Criteo holds both halves of this story but never puts them on the same screen: Feed Manager Diagnostics shows what is rejected, and the Performance Report shows what each campaign spent, but Criteo does not connect “this campaign depends on that rejecting catalogue, and here is the spend exposed”. That join is exactly what this card does. To reconcile manually, read the rejected-item list and rejection reasons from Diagnostics, identify which campaigns link to that catalogue, then sum their spend in the Performance Report; the total should match this card’s exposed-spend figure within rounding. Why our number may legitimately differ from a manual check:
ReasonDirectionWhy
Rejection-status timingMoves with cadenceThe breach reflects the current feed-rejection status; Diagnostics updates as feeds re-process, so a manual check after a re-sync may show fewer rejections.
Partial vs full rejectionEither directionA campaign can depend heavily or lightly on the rejected subset; this card flags any exposure, while the conversion damage scales with dependency.
Time zone and ingest lagBoundary days offCriteo reports spend in account time zone with a 2 to 4 hour lag; Vortex IQ uses UTC boundaries, so the latest spend can differ slightly.
Catalogue-to-campaign mappingOurs captures shared feedsWhere several campaigns share one catalogue, the join attributes the rejection exposure to all of them; a manual check can miss a campaign linkage.
Cross-connector reconciliation: This card is inherently cross-channel, joining ad spend to catalogue-feed status:
CardExpected relationshipWhat causes legitimate divergence
shopify.product_feed_health / bigcommerce.product_feed_health / adobe_commerce.product_feed_healthThe commerce-platform feed-health signal is the upstream cause; rejections here originate from product-data problems on the storefront export.A SKU can be valid on the storefront yet rejected by Criteo for platform-specific rules (banned text, image quality, price mismatch), so the two views are related but not identical.
shopify.total_revenue / bigcommerce.total_revenueSizes the opportunity cost: a heavily rejected feed both wastes ad spend and suppresses the sales those products could have driven.The revenue impact depends on how important the rejected SKUs are to the assortment.

Known limitations / merchant FAQs

Why is this called the highest-leverage card on Criteo? Because Criteo is feed-driven at its core. Dynamic creative is rendered from the catalogue, so a feed rejection does not just dent one metric, it hollows out the creative that the whole platform depends on, while the campaign keeps spending. Catching exposed spend the moment a feed breaks prevents the most expensive and most common failure mode on the platform. Fixing the feed is repeatedly the single biggest ROAS lever on a Criteo account. A feed rejection did not pause my campaign, so why is it a problem? That is precisely the problem. A rejection silently removes affected SKUs from the eligible pool but leaves the campaign running, pacing budget against the surviving SKUs and generic fallback. Spend looks normal while effectiveness has quietly collapsed. The campaign not stopping is what makes feed rejections so easy to miss and so expensive, which is why this card converts the warning into a money figure. What causes feed rejections most often? The usual suspects are banned or promotional text in title and description fields, image-quality failures (low resolution, watermarks, overlay text), price mismatches between the feed and the landing page, missing required attributes, and broken or expired product URLs. Criteo Feed Manager Diagnostics names the reason per item. A bulk product-data edit on the storefront is a frequent trigger, as in the worked example. Should I pause the campaign or fix the feed? Fix the feed. Pausing throws away the still-working part of the catalogue and your warm audiences. The right sequence is to read the rejection reason in Diagnostics, correct the product data at the feed source, force a re-sync, and let the rejected SKUs re-enter the auction within 24 to 72 hours. Reduce budget on the worst-affected campaign only as an interim measure if a same-day feed fix is not possible. Does iOS ATT or attribution loss affect this card? Very little. The card keys off feed-rejection status and spend, both observed directly rather than attributed, so iOS ATT and Safari ITP do not distort the exposed-spend figure. The conversion-drop context shown alongside it is attribution-sensitive, but the core “spend exposed to a rejecting feed” signal is high-confidence. My SKU is fine on my storefront but Criteo rejected it, how? Criteo applies its own catalogue rules on top of your storefront data. A product that is perfectly valid in your store can still fail Criteo’s text, image, or price-consistency checks. The feed export is the bridge, and the fix is to make the exported product data satisfy Criteo’s rules, for example removing promotional phrasing from the title or supplying a higher-resolution image, even though the storefront listing itself was never broken.

Tracked live in Vortex IQ Nerve Centre

Spend on Campaigns with Active Feed Rejections 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.