Skip to main content
Card class: HeroCategory: Ad Platform

At a glance

Return on ad spend, the headline efficiency number for TikTok. total_complete_payment_value ÷ spend. A 4x ROAS means £1 of TikTok spend produced £4 of TikTok-attributed purchase value. TikTok is a discovery-time channel: creative quality dominates over targeting precision, so ROAS swings more on a fresh creative drop than on audience tweaks. Caveat: post-iOS 14.5, expect TikTok-claimed ROAS to over-state UTM-truth Shopify by 30, 60% on iOS-heavy audiences without Events API.
The formulatotal_complete_payment_value ÷ spend, both pulled from the TikTok Ads Reporting API (/v1.3/report/integrated/get/) at advertiser level. Result is unitless.
Reporting API levelAdvertiser-level. Per-campaign, per-adgroup, per-ad ROAS rolls up to this card weighted by spend.
Cost basisAuction CPM converted to CPC / CPA / CPV by the optimisation goal. Campaigns optimised for COMPLETE_PAYMENT (Conversions objective) bid against expected purchase value; campaigns optimised for CLICK or IMPRESSION are awareness-tier and won’t show meaningful ROAS.
What “spend” meansGross media cost in account currency, before agency markup. Excludes creator-partnership fees on Spark Ads (those are invoiced separately).
What “purchase value” meansTikTok-attributed revenue (total_complete_payment_value). NOT order revenue from the commerce platform. Includes Pixel-confirmed conversions, Events API events, and modeled-conversion fill.
CurrencyAccount currency. Single-currency per account.
Attribution model7-day click + 1-day view (post-iOS 14.5 default). Configurable per ad account to 1d, 7d, 14d, 28d for click and 1d, 7d for view.
Attribution windowDefault 7d/1d. Lengthening to 14d/1d typically lifts ROAS 5, 12% but TikTok has flagged longer windows as deprecating.
iOS 14.5+ ATT impactMaterial but smaller than Meta’s. TikTok skews younger and Android-heavier in US Gen-Z (typical iOS share 35, 45% vs 55, 65% on Meta). Without Events API, expect TikTok-reported ROAS to over-state by 30, 60% on iOS-heavy audiences. With Events API live, narrows to 10, 25%.
Events API vs Pixel-onlyPixel-only: ATT-blocked iOS conversions missing → ROAS under-states (real higher); TikTok auto-fills with modeled conversions → over-states (modeled differs). Net: noisy and slightly inflated. Events API live: tighter, less modeled fill.
Creative-fatigue dominanceTikTok ROAS deteriorates faster than Meta because the For You feed surfaces the same creative to the same audience faster. Typical creative fatigue 2, 3 weeks per ad (vs 4, 8 weeks on Meta). Plan fortnightly creative refreshes.
View-throughIncluded by default (1-day view window). Pure click-only ROAS is in payment_value_in_click ÷ spend (separate metric, not surfaced here).
Frequency cap relevanceHigh frequency (>4 in 7d) compresses ROAS by exhausting the audience. The card doesn’t filter by frequency, but a falling ROAS alongside high frequency is the creative-fatigue signature.
Time window30D vsP (default 30D vs prior 30D). 2, 6 hour ingest lag on today; modeled-conversion convergence takes 24, 72h.
Alert trigger<2 (warn), <1 (critical). Below 2x is unprofitable for most DTC margins after COGS, fulfilment, and overhead; below 1x is bleeding cash.
Sentiment key{'type': 'gauge', 'thresholds': {'good': 4, 'warn': 2}}
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 beauty brand on Shopify. 30-day window 02 Apr 26 to 01 May 26. Account currency USD. Events API live since 18 Mar 26. iOS share 38%.
CampaignSpend ($)Purchase value ($)Per-campaign ROASiOS share
Conversions, cold prospect (CBO, In-Feed)22,40078,4003.50x39%
Conversions, retargeting 7d4,20033,4007.95x42%
Catalog Sales (DSA)8,80038,2004.34x37%
Spark Ads (creator boost)3,4009,8002.88x41%
Account total (this card)$38,800$159,8004.12x39%
Shopify total revenue for the same period: 194k.UTMtaggedTikToksourcerevenue:194k. UTM-tagged TikTok-source revenue: 58k. GA4 Paid Social TikTok-attributed revenue: $74k.
  1. The headline 4.12x is honest by TikTok’s measurement, but the business ROAS is closer to 1.5, 2.0x. Real TikTok-driven Shopify revenue (a probabilistic blend of UTM truth and modeled lift) is probably 60,80k,not60, 80k, not 159k. Divide by spend: 1.5, 2.1x. Don’t quote 4.12x to the CFO without the gap caveat.
  2. Retargeting 7d at 7.95x is misleading. Recent site visitors were going to come back anyway; you’re paying TikTok to defend revenue you’d capture for free via email or organic. Same dynamic as Branded Search on Google Ads. The “true acquisition” ROAS is closer to the cold-prospect 3.50x (or ~1.4x on Shopify-truth basis).
  3. iOS share is 39%, structurally lower than Meta’s typical 60%+. That makes the iOS gap less severe than on Meta. Events API rolled out in March; pre-rollout the gap was probably 80, 110%, post-rollout it’s down to 50, 80%. Don’t apply Meta heuristics directly.
  4. Modeled fill is running 13% of total_complete_payment_value. Reasonable, indicates Events API is healthy (modeled fill dropped from ~24% pre-rollout). If you see modeled fill above 22% on an Events-API-live account, the implementation has gaps; check event_id deduplication and event coverage.
  5. 30-day prior window had ROAS 4.62x, 11% decline. Spend up 7%, ROAS down 11%. That’s more than mild scaling pressure on TikTok where creative-fatigue cycles are short. Plan a creative refresh in the next 5, 7 days (cold-prospect creative frequency hit 4.8 last week, the textbook fatigue threshold for TikTok).
Quick sanity tests:
  • ROAS up + spend up = healthy scaling on a winning creative. Hold.
  • ROAS flat + spend down = budget pull-back without channel deterioration. Channel is healthy.
  • ROAS up + spend down = pulled back wisely from low-quality auctions, scale back when audience refreshes.
  • ROAS down + spend up = scaling beyond the efficient frontier. Cap budget, refresh creative immediately on TikTok, fatigue is faster.
  • ROAS down + spend flat = something changed in attribution, conversions, or creative resonance. Investigate before cutting. Check Conversions Trend, CTR Trend, and Clicks vs Conversions first.

Sibling cards merchants should reference together

CardWhy pair it with ROASWhat the combination tells you
Total SpendThe denominator. ROAS up + spend up is healthy scaling; ROAS up + spend down is just a retreat.The shape of growth.
Total RevenueThe numerator. Tells you whether ROAS moved on cost-side or revenue-side.If ROAS dropped because revenue cratered (not spend rising), the issue is on the conversion path.
ROAS TrendDaily series. ROAS is volatile day-to-day on TikTok; the 7-day rolling is the actionable read.Detect the shape of decline (gradual creative fatigue vs sudden tracking break).
ROAS by CampaignAccount ROAS hides per-campaign variance (Conversions vs Spark vs Catalog can differ 2, 3x).Open before any campaign-level decision.
Clicks vs ConversionsThe broken-tracking canary. Clicks up + conversions flat = tag-fire failure.ROAS will look like it dropped, but the cause is measurement. Don’t cut spend on a tracking bug.
CTR TrendClick-through rate. CTR drops typically precede ROAS drops by 5, 10 days on TikTok (creative fatigue).Early-warning shape for ROAS deterioration.
Wasted SpendAdsets producing zero attributed conversions.Lowering wasted-spend share lifts ROAS without touching the numerator.
GA4 Revenue by ChannelIndependent attribution check on TikTok’s self-reported revenue.TikTok usually reports 30, 60% higher than GA4. The ratio is your iOS gap.
Shopify Total RevenueThe truth side. Real business ROAS = (Shopify revenue × TikTok channel share) ÷ TikTok spend.If business ROAS is 1.7x and TikTok-claimed ROAS is 4.1x, that’s a 2.4x over-claim, normal post-iOS without Events API.
Meta Ads ROASPeer paid-social ROAS on a different platform.Different ecosystems, similar attribution mechanics. TikTok’s number is structurally slightly less inflated than Meta’s because of lower iOS share.
Google Ads ROASPaid-acquisition peer.Different ecosystems. Google’s ROAS is typically tighter (less attribution gap, intent-driven).

Reconciling against the vendor’s own dashboard

Where to look in TikTok Ads Manager: TikTok Ads Manager > Campaign > Columns > “Complete payment ROAS (shared)”. This is the column TikTok itself surfaces as the headline efficiency reading. Match the date range to this card’s window and the footer total reconciles to within sub-percent rounding. Other Ads Manager columns that look similar but aren’t:
  • Mobile App ROAS: app-purchase ROAS via SDK; separate ecosystem from web. Not in this card.
  • Conversion ROAS (lead-gen): lead-form conversion value, not purchase value. Different objective.
  • Click-through rate (CTR): an engagement metric, not ROAS.
Why our number may legitimately differ from TikTok:
ReasonDirectionWhy
Time zoneBoundary days offTikTok uses ad-account TZ (immutable for the existing account). This card uses UTC. For 30D windows the gap averages out; for “today” or “yesterday” it can shift on US Pacific accounts.
Attribution window changesDirection dependsDefault 7d/1d post-iOS 14.5. If your account changed mid-window, TikTok retroactively reflows the data. A 7d→14d switch typically lifts ROAS 5, 12%.
Modeled conversionsBoth inflate equallyTikTok blends modeled into total_complete_payment_value; this card reads the same blended field.
Ingest lagLower for “today”2, 6 hour ingest lag. Today’s ROAS reads low until catchup. Yesterday and earlier are stable.
CBO opacityNone on the headlineCampaign Budget Optimisation aggregates audience and placement breakdowns invisibly; the headline ROAS reconciles.
Cross-connector reconciliation: The ROAS reading is TikTok’s view of TikTok-driven performance. The same purchase will be claimed differently by every platform with a tag in the path.
CardExpected relationshipWhat causes legitimate divergence
google_analytics.ga_revenue_by_channelGA4 Paid Social TikTok revenue ÷ TikTok spend ≈ this card × 0.6, 0.8TikTok uses last-click within 7d/1d; GA4 uses last-non-direct click. TikTok inflates by 30, 60% versus GA4 structurally on iOS-heavy accounts.
shopify.total_revenueTikTok’s total_complete_payment_value is a subset of Shopify total revenue but TikTok-attributed Shopify revenue (UTM-tagged) is much smaller than TikTok claims.TikTok typically claims 1.4, 2.0x the UTM-truth Shopify number on Gen-Z DTC accounts. Use a 40 / 60 TikTok / Shopify blend for the CFO read.
facebook_ads.fac_roasPeer paid-social ROAS, NOT a reconciliationDifferent audiences, different attribution windows similar in shape. TikTok’s ROAS is structurally slightly less inflated (lower iOS share).
google_ads.gads_roasIndependent paid channelDifferent ecosystems. Google’s ROAS is tighter (intent-driven, less iOS impact, Enhanced Conversions has cleaner consent handling).

Known limitations / merchant FAQs

Why does TikTok say I’m at 4x ROAS but Shopify says I’m at 1.5x? Three layers stack:
  1. Different denominator definitions. TikTok’s ROAS uses total_complete_payment_value = TikTok-claimed revenue including modeled conversions and 7d/1d attribution. Shopify’s “TikTok-source revenue” uses UTM-tagged orders only.
  2. iOS 14.5 ATT. Even on the same orders, TikTok has Pixel + Events API + modeling; Shopify has only what’s tagged with the right UTM.
  3. Last-click vs UTM-truth. TikTok credits any purchase that touched a TikTok click within 7 days. Shopify only credits orders where the customer arrived via a UTM-tagged TikTok link.
Practical answer: real ROAS is between the two. Use a 40/60 TikTok / Shopify blend. Don’t quote 4x to the CFO. Don’t quote 1.5x either. Use 2.2, 2.8x as the directional read. iOS 14.5 ATT impact, the structural answer: ATT gave iOS users a system-level prompt to opt out of cross-app tracking. Around 60, 75% of UK / US iOS users opt out. For TikTok, this means:
  • The Pixel can still fire on opted-in users.
  • For opted-out users, Pixel is blocked from receiving advertiser-id (IDFA), so TikTok can’t link the conversion back.
  • TikTok backfills with statistical modeling and Events API (server-to-server bypass).
Net effect on this card: without Events API, expect TikTok-reported ROAS to over-state real TikTok-driven ROAS by 30, 60% on iOS-heavy audiences. With Events API, narrows to 10, 25%. Action: roll out Events API immediately if you haven’t. Why is TikTok’s iOS gap smaller than Meta’s? TikTok’s audience skews younger and more Android-heavy in US Gen-Z. Typical iOS share on a US TikTok account is 35, 45%, vs 55, 65% on Meta. Lower iOS share = smaller pool affected by ATT = smaller attribution gap. Don’t apply Meta heuristics to TikTok directly. What’s the Events API rollout playbook?
  1. Shopify: TikTok official Sales Channel app > enable Events API > “Maximum” data sharing. 30, 60 minute setup. Auto-deduplicates Pixel + Events via event_id.
  2. BigCommerce: TikTok Pixel app + manual Events API via Tag Manager + custom event_id. 2, 4 hours.
  3. Adobe Commerce / Magento: TikTok extension + custom server endpoint. 1, 3 days.
  4. Custom / headless: server-side proxy mirroring Pixel events. 1, 2 weeks.
  5. In all cases: deduplicate via event_id. Test in TikTok Events Manager > Test Events. Allow 7, 14 days for retraining.
How do I interpret modeled conversions on TikTok? TikTok auto-fills attribution gaps with statistically-modeled values, typically 12, 22% of total_complete_payment_value for Pixel-only DTC. Patterns:
  • Pre-Events-API: ~20, 30%. Inflated.
  • Post-Events-API clean: ~5, 12%. Healthy.
  • Post-Events-API still high (>20%): implementation gaps.
You cannot opt out. Trust the rolling 30-day, not the daily. Why does TikTok ROAS swing more than Meta ROAS? Two reasons:
  1. Creative fatigue is faster (2, 3 weeks vs 4, 8 on Meta). The For You feed surfaces same creative to same audience faster.
  2. Algorithm reactivity. TikTok’s CBO responds aggressively to viral creative; a single ad going viral can lift ROAS 30, 50% in 48 hours, dying creative drops it back.
Use 7-day rolling, expect higher weekly variance than Meta or Google. Spark Ads ROAS, how should I read it? Spark Ads ROAS reads lower than In-Feed because the cost line here doesn’t include the creator partnership fee. Real Spark cost is media + creator fee. Spark also has off-platform value (UGC rights, organic reach on the creator’s profile, social proof) that doesn’t show up here. Don’t kill Spark on direct ROAS alone, judge it on a 90-day MMM read. Hashtag Challenge ROAS, why is it so low? BHC is awareness-tier reach buying. The auction-bought support spend will show some direct attributed revenue, but most BHC value lands as branded-search lift on Google or organic site traffic 1, 4 weeks later, not as direct attributed revenue here. Don’t expect BHC ROAS to read accurately on direct attribution. TikTok vs Meta vs Google, who’s most reliable on ROAS?
  • Google Ads: most reliable. Search has less iOS impact (intent-driven, desktop / Android-heavier). Modeled-conversion share is lowest (5, 12%).
  • TikTok: middle. Lower iOS share than Meta, similar modeled fill. Higher week-to-week variance from creative fatigue.
  • Meta: least reliable on iOS-heavy audiences. Highest iOS share (55, 65%), highest modeled fill (8, 18% post-CAPI; 20, 30% pre-CAPI).
Can I trust today’s ROAS on TikTok? Less than the rolling 7-day. Today’s is built from incomplete data: Pixel / Events API events are still ingesting (2, 6h lag), modeled conversions take 24, 72h to converge. Don’t restructure campaigns based on a single day’s ROAS, especially on TikTok where daily volatility is structurally high. Multi-account aggregation, how does ROAS work? TikTok ad accounts are single-currency by design. Multi-currency or multi-region brands run separate accounts. This card is per-account. To roll up across accounts: weight each account’s ROAS by spend, then sum. A simple average across accounts is wrong; it gives equal weight to a 50kaccountanda50k account and a 500 account.

Tracked live in Vortex IQ Nerve Centre

ROAS 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.