At a glance
Spend on campaigns more than 7 days old that have produced zero attributed purchases. Stricter than Wasted Spend because it filters out fresh campaigns still in the Meta learning phase. The “this campaign should be working by now and isn’t” alert.
| What it counts | SUM(spend) for every campaign where actions[purchase] = 0 AND campaign_start_date < (today - 7 days). Excludes brand-new campaigns. |
| Insights API level | Campaign-level. The card aggregates across all qualifying zero-conversion campaigns. Drill-down by campaign is in Spend by Campaign sorted by purchases ascending. |
| The 7-day-old filter | Meta’s learning phase requires ~50 conversions in 7 days for an adset to optimise reliably. New campaigns can legitimately spend with no conversions for the first 5, 7 days while the model trains. This card filters those out to focus on campaigns where learning has had time and still isn’t producing. |
| Currency | Account currency. |
| Attribution model | Whatever the account is configured for (default 7d/1d). |
| iOS 14.5+ ATT impact | Significant. Same as Wasted Spend, ATT-blocked iOS conversions are invisible to Pixel-only campaigns. A genuinely-converting iOS-heavy campaign can flag here. Without CAPI, expect 15, 30% false-positive rate. |
| CAPI vs Pixel-only | Pixel-only: false-positives common. CAPI live: cleaner read but still some modeled-conversion ambiguity. |
| Conversions vs all-conversions | Purchase events only. A campaign with thousands of add-to-carts but zero purchases still flags. Use All Conversions for the broader view. |
| Frequency cap relevance | A campaign with a tight frequency cap might spend slowly without converting; the cap is throttling delivery. Audit cap config before pausing. |
| Time window | 30D (last 30 days, with the 7-day-old campaign filter applied). |
| Alert trigger | >$0 on any campaign >7D old. The default fires on any spend on any qualifying campaign. Tightening to spend >$X reduces noise on small test campaigns. |
| Roles | owner, marketing, finance |
Calculation
Calculated automatically from your Meta Ads (Facebook) data. See the At a glance summary above for what the metric tracks and the worked example below for a typical reading.Worked example
A UK home & garden DTC brand. Window: 02 Apr 26 to 01 May 26. Account currency GBP. iOS share 51%. CAPI live since 18 Mar 26. Today is 28 Apr 26. The card surfaces these campaigns:| Campaign | Started | Days old | Spend (£) | Purchases | Status |
|---|---|---|---|---|---|
| ”Spring Sale, Outdoor Furniture” | 09 Apr 26 | 19 | 1,840 | 0 | Flagged |
| ”Awareness, BBQ Range” (Engagement objective) | 12 Apr 26 | 16 | 620 | 0 | Flagged (but objective is Engagement, not Sales) |
| “Lookalike test, gardening enthusiasts 1%“ | 18 Apr 26 | 10 | 980 | 0 | Flagged |
| ”Catalog Sales, full feed” | 20 Apr 26 | 8 | 1,100 | 14 | Not flagged |
| ”Black Friday teaser, early-warm-up” | 25 Apr 26 | 3 | 240 | 0 | NOT flagged (under 7d) |
| Account total flagged | £3,440 | 0 |
- The “Spring Sale, Outdoor Furniture” campaign is the priority pause. £1,840 over 19 days with zero attributed purchases is unambiguous waste, even after iOS-gap correction. Possible causes: (a) creative didn’t land (CTR is 0.6%, half the account average), (b) audience is too cold and the optimiser couldn’t find converters, (c) landing page broke (check Landing Page CR). Action: pause today, audit landing page, redesign creative for a re-launch.
- The “Awareness, BBQ Range” campaign is a false positive in this card’s logic. The campaign is on Engagement objective, not Sales, so by design Meta isn’t optimising for purchases. Zero attributed purchases is expected. Action: exclude Engagement / Awareness / Reach objectives from this card’s filter, OR ignore the alert for non-Sales campaigns. (Vortex IQ accepts an objective-filter override; ask the team to update the card config.)
- The “Lookalike test” campaign is borderline. £980 over 10 days, zero purchases. iOS share on this audience is 58%. Without CAPI this would be a false-positive risk; with CAPI live for 6 weeks, it’s probably real waste. Pause and re-run with a different LAL seed (current seed is “site visitors 90d”; try “purchasers 180d” instead, tighter intent signal).
- “Catalog Sales, full feed” is not flagged because it converted (14 purchases) within the window. Healthy. £1,100 / 14 = £78 CPA, fine for this category.
- “Black Friday teaser” is excluded because it’s only 3 days old. Even though it’s spent £240 with no conversions, it’s still in learning phase. Re-evaluate at day 7 or later. Don’t pause learning-phase campaigns unless spend has run away or CTR is catastrophically low.
Sibling cards merchants should reference together
| Card | Why pair it with Zero-Conversion Spend | What the combination tells you |
|---|---|---|
| Wasted Spend | The broader bucket (no 7-day-old filter). | Total wasted vs only-mature wasted. |
| Spend by Campaign | Drill-down on which specific campaigns are flagged. | The actionable list. |
| Conversions by Campaign | Independent confirmation that the flagged campaigns truly have zero. | False-positive check. |
| CTR by Campaign | If the flagged campaign has very low CTR (<0.7%), the creative or audience is wrong. | Diagnose upstream. |
| Conversion Rate Trend | If the whole account’s CR is dropping, the issue is post-click (landing page, stockouts), not specific to flagged campaigns. | Distinguish account-wide vs campaign-specific. |
| Landing Page CR | The flagged campaign may be sending traffic to a broken or off-topic landing page. | Diagnose the post-click experience. |
| Frequency / Impressions Trend | A campaign with low frequency (<2 in 7d) and zero conversions is mostly under-delivering, not failing. | Avoid premature pause on under-delivered campaigns. |
| GA4 Paid Social Sessions | Independent attribution check. | If GA4 sees Paid Social sessions and conversions for the flagged campaign’s UTM, the iOS gap is the cause; don’t pause. |
Reconciling against the vendor’s own dashboard
Where to look in Meta Ads Manager: Meta Ads Manager → Campaigns → filter “Created date >7 days ago” → sort by “Purchases” ascending. Campaigns at the top of the sorted list with Spend > 0 and Purchases = 0 are the same set this card flags. Sum their “Amount Spent” column to reconcile. Other relevant Ads Manager views:- Campaign-level Delivery → Learning Phase status: campaigns stuck in Learning often appear here even past 7 days because they didn’t hit the 50-conversion threshold to exit.
- Ads Diagnostics: identifies creative-rejection, audience-overlap, low-quality-ranking issues on the flagged campaign.
- Reports → Predefined → Campaign Performance: same data downloadable for sharing.
| Reason | Direction | Why |
|---|---|---|
| Time zone | Boundary days off | The 7-day-old filter is on UTC dates; Meta uses ad-account TZ. A campaign launched at 22:00 PT may be “7d old” in Meta’s view but only “6d 14h” in this card’s UTC frame. Edge cases. |
| Attribution window changes | Direction depends | Tighter windows (7d/1d vs 28d/1d) shrink the conversion pool; more campaigns flag here. |
| Modeled conversions inclusion | Lower flag rate in our card | Modeled conversions count toward actions[purchase]. A campaign Meta modeled as having converted (without Pixel-confirmed conversions) won’t be flagged. |
| Ingest lag | Edge cases for “today” | Recent (1, 4h) conversions pending. Yesterday and earlier are stable. |
| Advantage+ opacity | Same on the headline | Advantage+ Shopping campaigns aggregate internally; the campaign-level purchase total is reliable. |
| Card | Expected relationship | What causes legitimate divergence |
|---|---|---|
google_analytics.ga_revenue_by_channel | If the flagged campaign’s UTM tag shows Paid Social conversions in GA4, the iOS gap is the cause. Don’t pause. | Real iOS conversions are visible to GA4 (with Consent Mode v2) but not to Meta Pixel. |
shopify.total_revenue | UTM-tagged Meta-source revenue should account for any “real” conversion the flagged campaign drove. | Shopify only knows what UTM tags allow. |
google_ads.gads_zero_conversion_spend | Cross-platform peer (also age-filtered). | Different ecosystems, run separate diagnostic loops. |
Known limitations / merchant FAQs
Why is the 7-day-old filter important? Meta’s learning phase needs ~50 conversions in 7 days for an adset to leave the unstable training period. Campaigns in learning phase legitimately spend without converting while Meta calibrates. Pausing them prematurely re-starts the learning clock when you re-enable, wasting more spend over time. This card waits for campaigns to mature past the learning window before flagging. iOS 14.5 ATT impact, the structural answer for this card: Same as ROAS and Wasted Spend, ATT-blocked iOS conversions are invisible to Pixel-only campaigns. A campaign serving heavily to iOS may genuinely convert but read as zero-conversion here. Without CAPI, expect 15, 30% false-positive rate. With CAPI live, false positives drop to 5, 10%. Wait for CAPI before paunsing borderline iOS-heavy campaigns. What’s the practical CAPI rollout playbook for fixing this card?- Roll out CAPI for
purchaseevents. - Verify Events Manager shows post-rollout event volume up 20, 40%.
- Wait 14 days for Meta’s attribution model to stabilise.
- Re-read this card. Several “zero-conversion” campaigns will now show conversions; those were the iOS false positives.
- Pause whatever still flags after this rebaseline, those are real failures.
event_id) gives the most accurate zero-conversion read. A broken dedup setup (events double-count) under-states this card’s flag count, some really-zero-converting campaigns will appear to have converted because Pixel + CAPI double-fired on a single conversion. Test dedup in Events Manager before trusting either direction of this card.
My flagged campaign is on Engagement objective, why is it here?
By default this card filters on purchase conversions only, regardless of campaign objective. An Engagement-objective campaign is expected to have zero purchases because Meta isn’t optimising for purchases. Either (a) ignore the alert for non-Sales-objective campaigns, or (b) configure the card to filter on objective. Vortex IQ accepts an objective-filter override; ask the team to set exclude_objectives: [engagement, awareness, reach, video_views, traffic] on the card config.