Skip to main content
Card class: HeroCategory: Ad Platform

At a glance

Per-campaign drill-down of zero-conversion spend. The companion to Wasted Spend: that card sums, this card lists. Each row is a campaign that’s been live more than 7 days and produced zero attributed purchases. The 7-day filter excludes Learning-Phase campaigns (TikTok’s algorithm typically needs 25, 50 conversions before delivery stabilises; campaigns younger than 7 days are still in that learning window).
What it countsPer-campaign rows where total_complete_payment (purchases) = 0 AND spend > 0 AND campaign_age_days >= 7. Each row shows campaign name, age, spend, impressions, clicks, CTR, the diagnostic shape.
Reporting API levelCampaign-level. Drill down further to adgroup-level via Wasted Spend drill-throughs or directly in Ads Manager.
The 7-day filterTikTok’s algorithm needs 25, 50 conversions to exit Learning. Campaigns younger than 7 days are usually still in Learning and shouldn’t be flagged as zero-conversion failures yet. The 7-day age filter is the standard. Lower-volume accounts may need to extend to 10, 14 days.
CurrencyAccount currency.
Attribution modelAccount-default (typically 7d/1d post-iOS 14.5).
iOS 14.5+ ATT impactMaterial false-positive risk on iOS-heavy campaigns. A campaign with high iOS share and Pixel-only attribution will appear here even when it’s actually converting (the attribution is just blocked). Cross-check against GA4 Paid Social TikTok sessions and Shopify UTM-tagged orders before acting.
Events API impactReduces false positives by 40, 60% on iOS-heavy campaigns post-rollout. The card will show fewer rows and lower per-row spend after Events API stabilises.
Time window30D.
Alert trigger>$0 on any campaign >7D old. Fires the moment any qualifying campaign appears.
Rolesowner, marketing, finance

Calculation

Calculated automatically from your TikTok Ads 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 US Gen-Z DTC accessories brand. 30-day window 02 Apr 26 to 01 May 26. Account currency USD. Events API live. iOS share 36%.
CampaignAge (days)Spend ($)ImpressionsClicksCTRVerdict
Cold prospect, hypebeast 18-24 (Manual)281,840412,0004,8201.17%Pause: audience-mismatch waste
Catalog Sales, summer drop SKUs211,420318,0003,1400.99%Refresh: feed-creative fatigue
Spark Ads, creator @taylor_drips boost14920218,0006,4002.94%Watch: high CTR, awareness-tier
Conversions, lookalike 5% (video viewers)11680142,0001,1800.83%Pause: weak-signal LAL
BHC support, #DripCheckChallenge94801,840,00018,2000.99%Expected: reach-objective
What this is telling you, row by row:
  1. Cold prospect, hypebeast 18-24 ($1,840, 28 days, zero conversions). CTR 1.17% is healthy for TikTok cold traffic. The audience clicks but doesn’t buy. That’s the audience-mismatch signature, hypebeasts on TikTok scroll, save, screenshot for price comparison; they don’t convert in-session. Pause this audience entirely. Don’t refresh creative; the issue isn’t the hook, it’s the buyer intent of the segment.
  2. Catalog Sales, summer drop SKUs ($1,420, 21 days). CTR 0.99% is low; impressions still high (318k) means delivery is fine but the creative isn’t engaging. Catalog ads on TikTok work best with seasonal hooks; “summer drop” feels stale by week 3. Refresh the catalog creative template (new music, new transition pattern, fresh on-screen text). Don’t pause the campaign, refresh the creative.
  3. Spark Ads, creator @taylor_drips boost ($920, 14 days). CTR 2.94% is excellent (well above platform average). Zero conversions despite strong engagement is the awareness-tier shape: people watch, save, follow the creator, but don’t click through to buy. Watch, don’t pause. Spark Ads have brand-equity value (UGC rights, creator association) that doesn’t show up here. Judge on a 60, 90 day MMM read.
  4. Conversions, lookalike 5% (video viewers) ($680, 11 days). CTR 0.83% is below platform average, conversions zero. LAL based on video-viewer signal is structurally weak (video views are a noisy intent signal on TikTok; viewers are casual, not buyers). Pause, redirect to LAL 1% (purchasers) or LAL 1, 3% (engagers).
  5. BHC support, #DripCheckChallenge ($480, 9 days). Reach-objective campaign, 1.84M impressions. Zero attributed purchases is expected for reach-objective. Don’t read this row as waste. The signal that the BHC worked lives elsewhere (branded-search lift on Google, organic site traffic, follower growth on the brand TikTok account). Filter or exclude reach-objective campaigns from this card’s read by configuring objective != 'REACH' in the alert rule.
Action priority:
  1. Pause the hypebeast cold prospect and the LAL 5% video-viewer adset today (clearest waste, $2,520 freed).
  2. Refresh creative on the Catalog Sales summer-drop campaign within 48h (don’t pause; the SKUs are still active).
  3. Re-allocate $2,520 to LAL 1% (purchasers) and the cart-abandoner retargeting pool (already at 5+ ROAS).
  4. Filter BHC support out of this card’s alert (configure objective != 'REACH' in the trigger rules).
Quick sanity tests:
  • Row count rising while account ROAS holding = experimentation cost. Expected.
  • Row count rising while account ROAS dropping = systemic creative fatigue. Refresh creative across the account.
  • Same campaign appearing here for 3+ consecutive periods = the audience or creative is broken; pause or rebuild.
  • Reach-objective campaigns appearing = configure the alert filter to exclude them.
  • High-CTR campaigns with zero conversions = post-click problem (landing page, pricing, audience intent mismatch). Don’t fix at the ad level; fix downstream.

Sibling cards merchants should reference together

CardWhy pair it with Zero-Conversion SpendWhat the combination tells you
Wasted SpendThe summary view; this is the per-row drill-down.Whether the waste is concentrated (1, 2 big campaigns) or spread (5+ small ones). Different fixes.
Total SpendThe denominator.Whether $3k of zero-conversion spend is 5% of account spend (manageable) or 30% (urgent).
CTR TrendA high-CTR / zero-conversion row is a downstream problem (landing page, pricing). A low-CTR / zero-conversion row is creative-fatigue.Different fixes: refresh landing vs refresh ad.
Conversion Rate TrendThe downstream-funnel check.If many campaigns are zero-conversion AND CR is dropping site-wide, the issue is post-click, not ad-level.
ROAS by CampaignSide-by-side with this list lets you compare zero-conversion campaigns to the rest.Are the zero-conversion ones a minority of total spend or a big chunk?
Worst Performing CampaignsThe negative-ROAS list.Some zero-conversion campaigns are also on the worst-performing list (different definitions, overlapping rows).
Campaign ComparisonPer-campaign vsP shape.Whether a zero-conv campaign is a new failure or a pattern.
Conversion LagTikTok’s 7d/1d window means today’s “zero-conv” campaign might convert tomorrow.Don’t act on day-1 reads of new campaigns.
Meta Ads Zero-Conversion SpendCross-platform peer.Compare which platform produces more zero-conv waste. TikTok typically more creative-fatigue-driven; Meta more audience-mismatch-driven.

Reconciling against the vendor’s own dashboard

Where to look in TikTok Ads Manager: TikTok Ads Manager > Campaigns > sort by “Complete payment” ascending, filter Cost > 0, filter Created > 7 days ago. The list of campaigns at the top of the sort with non-zero cost and zero purchases is the same set this card lists. Other relevant Ads Manager views:
  • Reports > Custom > Campaign Performance: same data downloadable.
  • Audience Insights per campaign: helps diagnose audience-mismatch waste.
  • Delivery > Learning Phase status: campaigns still in Learning shouldn’t be counted here (the 7-day filter approximates this).
Why our number may legitimately differ from TikTok:
ReasonDirectionWhy
Time zoneBoundary days offTikTok uses ad-account TZ; this card uses UTC. A campaign converting just after midnight TZ can look zero-conversion.
Modeled conversionsLower row count in our cardModeled fill counts toward the campaign’s purchase count; Pixel-only accounts get fewer rows here than they “should” because of modeled fill.
Learning-Phase exclusionOurs stricterOur 7-day age filter excludes Learning-Phase campaigns; TikTok’s UI does not filter automatically.
Ingest lagHigher row count for “today”Recent (2, 6h) conversions may not be in yet.
Attribution window changesDirection dependsA 14d→7d switch increases the row count (longer windows hide more campaigns from this list).
Cross-connector reconciliation:
CardExpected relationshipWhat causes legitimate divergence
google_analytics.ga_revenue_by_channelIf GA4 attributes Paid Social TikTok revenue to a campaign in this list, the iOS attribution gap is the cause.Real iOS conversions invisible to Pixel show up in GA4 but not in TikTok.
shopify.total_revenueUTM-tagged TikTok-source orders should account for any “real” conversion the listed campaigns drove.Without UTM tags, Shopify cannot attribute back to specific campaigns.
facebook_ads.fac_zero_conversion_spendIndependent paid-social peer.Different shape: TikTok rows are more often creative-fatigue (refresh works), Meta more often audience-mismatch (pause works).

Known limitations / merchant FAQs

Why is the same campaign appearing here for 3 weeks running? Three possibilities, ordered by probability:
  1. Audience-creative mismatch (most common). The audience clicks but doesn’t buy; the campaign won’t convert no matter how many creatives you swap in. Pause and rebuild around a different audience.
  2. Frequency cap too high. The same audience is seeing the ad 5+ times in 7 days; saturation kills conversion. Cap at 3, 4 in 7d.
  3. Tracking failure. Pixel mis-fires on the landing page, Events API event_id duplication, or Conversions API event mapping wrong. Audit in Events Manager > Test Events.
The campaign just started, why is it on this list? The 7-day age filter should exclude very new campaigns. If a 2-day-old campaign appears, the alert configuration is overriding the default; tighten the rule to campaign_age_days >= 7 (or 10, 14 days for low-volume accounts). My BHC support campaign always appears here, is that a problem? No. Reach-objective campaigns systematically appear because they don’t optimise to purchases. Configure the alert to exclude objective in ('REACH', 'VIDEO_VIEWS', 'TRAFFIC') to filter them out. They have value (branded-search lift, follower growth) measured elsewhere. Should I pause every campaign on this list? No. Triage by:
  1. CTR shape. High-CTR / zero-conversion = downstream problem (landing page, pricing, intent mismatch). Don’t pause; fix downstream.
  2. Creative age. Older than 14 days with declining performance = creative fatigue. Refresh, don’t pause.
  3. Audience size. Smaller than 100k = audience may be exhausted; rebuild with a broader signal.
  4. Spend size. Below $50 cumulative = often a test that didn’t get enough volume to learn. Either kill or scale up to give it a chance.
Why is the iOS share of these campaigns higher than my account average? Common pattern. iOS-heavy campaigns are over-represented here because Pixel-only attribution misses iOS purchases, making them appear zero-conversion. Cross-check against GA4 (Consent Mode v2) and Shopify UTM-tagged orders before pausing. A campaign that’s “really” converting on iOS but invisible to Pixel is a tracking problem, not a creative or audience problem. Events API rolled out, this list got shorter. Is that real or a measurement artefact? Both. Events API recovers iOS conversions that were genuinely happening (real measurement) and re-attributes them to specific campaigns (so those campaigns drop off the zero-conversion list). The shorter list post-Events-API is genuine in that the attribution improved, but the underlying campaign performance didn’t change. Don’t claim a creative or audience win from a list-shrinkage event. How do I tell creative-fatigue waste from audience-mismatch waste? Look at the campaign’s history in Campaign Comparison:
  • Creative fatigue: campaign converted historically (e.g. ROAS 3+ for 2, 3 weeks), then dropped to zero. Same audience, different time. → Refresh creative.
  • Audience mismatch: campaign never converted from launch, multiple creatives tested. → Pause and rebuild.
What about campaigns that converted but at terrible ROAS? They won’t appear here (this card is zero-conversion only). For negative-ROAS analysis use Worst Performing Campaigns. Some campaigns straddle both lists during transitions; that’s normal. Spark Ads always appearing here, why? Spark Ads (creator-boosted posts) often look zero-conversion because their value is off-platform (UGC rights, organic spillover, brand association). Direct conversion attribution is the wrong measurement. Either filter Spark Ads out of this card’s alert or judge them on a 60, 90 day MMM read, not on direct attributed conversions. The list keeps growing week-over-week, what’s the systemic issue? On TikTok this is almost always broad creative fatigue across the account. The For You feed cycles same creative to same audience faster than other platforms; if you’re not refreshing creative every 2, 3 weeks, fatigue compounds. Plan a creative-refresh cadence: budget 15, 25% of spend for new variations every fortnight on cold-prospect campaigns.

Tracked live in Vortex IQ Nerve Centre

Zero-Conversion Spend is one of hundreds of KPI pulses Vortex IQ tracks across TikTok Ads 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.