> ## Documentation Index
> Fetch the complete documentation index at: https://docs.vortexiq.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# ROAS, TikTok Ads

> ROAS for TikTok Ads stores. Tracked live in Vortex IQ Nerve Centre. How to read it, why it matters, and how to act on it.

**Metrics type:** [Key Metrics](/nerve-centre/overview#metrics-types-explained)  •  **Category:** [Ad Platform](/nerve-centre/connectors#connectors-by-type)

## 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 formula**                 | `total_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 level**         | Advertiser-level. Per-campaign, per-adgroup, per-ad ROAS rolls up to this card weighted by spend.                                                                                                                                                                                     |
| **Cost basis**                  | Auction 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" means**          | Gross media cost in account currency, before agency markup. Excludes creator-partnership fees on Spark Ads (those are invoiced separately).                                                                                                                                           |
| **What "purchase value" means** | TikTok-attributed revenue (`total_complete_payment_value`). **NOT order revenue from the commerce platform.** Includes Pixel-confirmed conversions, Events API events, and modeled-conversion fill.                                                                                   |
| **Currency**                    | Account currency. Single-currency per account.                                                                                                                                                                                                                                        |
| **Attribution model**           | **7-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 window**          | Default 7d/1d. Lengthening to 14d/1d typically lifts ROAS 5, 12% but TikTok has flagged longer windows as deprecating.                                                                                                                                                                |
| **iOS 14.5+ ATT impact**        | **Material 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-only**    | Pixel-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 dominance**  | TikTok 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-through**                | Included by default (1-day view window). Pure click-only ROAS is in `payment_value_in_click ÷ spend` (separate metric, not surfaced here).                                                                                                                                            |
| **Frequency cap relevance**     | High 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 window**                 | `30D 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}}`                                                                                                                                                                                                                             |
| **Roles**                       | owner, 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%.

| Campaign                                  | Spend (\$)   | Purchase value (\$) | Per-campaign ROAS | iOS share |
| ----------------------------------------- | ------------ | ------------------- | ----------------- | --------- |
| Conversions, cold prospect (CBO, In-Feed) | 22,400       | 78,400              | **3.50x**         | 39%       |
| Conversions, retargeting 7d               | 4,200        | 33,400              | **7.95x**         | 42%       |
| Catalog Sales (DSA)                       | 8,800        | 38,200              | **4.34x**         | 37%       |
| Spark Ads (creator boost)                 | 3,400        | 9,800               | **2.88x**         | 41%       |
| Account total (this card)                 | **\$38,800** | **\$159,800**       | **4.12x**         | **39%**   |

Shopify total revenue for the same period: $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, 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](/nerve-centre/kpi-cards/tiktok-ads/conversions-trend), [CTR Trend](/nerve-centre/kpi-cards/tiktok-ads/ctr-trend), and [Clicks vs Conversions](/nerve-centre/kpi-cards/tiktok-ads/clicks-vs-conversions) first.

## Sibling cards merchants should reference together

| Card                                                                                  | Why pair it with ROAS                                                                                  | What the combination tells you                                                                                                                      |
| ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------ | --------------------------------------------------------------------------------------------------------------------------------------------------- |
| [Total Spend](/nerve-centre/kpi-cards/tiktok-ads/total-spend)                         | The denominator. ROAS up + spend up is healthy scaling; ROAS up + spend down is just a retreat.        | The shape of growth.                                                                                                                                |
| [Total Revenue](/nerve-centre/kpi-cards/tiktok-ads/total-revenue)                     | The 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 Trend](/nerve-centre/kpi-cards/tiktok-ads/roas-trend)                           | Daily 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 Campaign](/nerve-centre/kpi-cards/tiktok-ads/roas-by-campaign)               | Account ROAS hides per-campaign variance (Conversions vs Spark vs Catalog can differ 2, 3x).           | Open before any campaign-level decision.                                                                                                            |
| [Clicks vs Conversions](/nerve-centre/kpi-cards/tiktok-ads/clicks-vs-conversions)     | The 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 Trend](/nerve-centre/kpi-cards/tiktok-ads/ctr-trend)                             | Click-through rate. CTR drops typically precede ROAS drops by 5, 10 days on TikTok (creative fatigue). | Early-warning shape for ROAS deterioration.                                                                                                         |
| [Wasted Spend](/nerve-centre/kpi-cards/tiktok-ads/wasted-spend)                       | Adsets producing zero attributed conversions.                                                          | Lowering wasted-spend share lifts ROAS without touching the numerator.                                                                              |
| [GA4 Revenue by Channel](/nerve-centre/kpi-cards/google-analytics/revenue-by-channel) | Independent attribution check on TikTok's self-reported revenue.                                       | TikTok usually reports 30, 60% higher than GA4. The ratio is your iOS gap.                                                                          |
| [Shopify Total Revenue](/nerve-centre/kpi-cards/shopify/total-revenue)                | The 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 ROAS](/nerve-centre/kpi-cards/facebook-ads/roas)                            | Peer 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 ROAS](/nerve-centre/kpi-cards/google-ads/roas)                            | Paid-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)"](https://ads.tiktok.com/i18n/dashboard). 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:**

| Reason                         | Direction            | Why                                                                                                                                                                                       |
| ------------------------------ | -------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **Time zone**                  | Boundary days off    | TikTok 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 changes** | Direction depends    | Default 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 conversions**        | Both inflate equally | TikTok blends modeled into `total_complete_payment_value`; this card reads the same blended field.                                                                                        |
| **Ingest lag**                 | Lower for "today"    | 2, 6 hour ingest lag. Today's ROAS reads low until catchup. Yesterday and earlier are stable.                                                                                             |
| **CBO opacity**                | None on the headline | Campaign 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.

| Card                                                                                                    | Expected relationship                                                                                                                                                   | What causes legitimate divergence                                                                                                                  |
| ------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------- |
| [`google_analytics.ga_revenue_by_channel`](/nerve-centre/kpi-cards/google-analytics/revenue-by-channel) | GA4 Paid Social TikTok revenue ÷ TikTok spend ≈ this card × 0.6, 0.8                                                                                                    | TikTok 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_revenue`](/nerve-centre/kpi-cards/shopify/total-revenue)                                | TikTok'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_roas`](/nerve-centre/kpi-cards/facebook-ads/roas)                                    | Peer paid-social ROAS, NOT a reconciliation                                                                                                                             | Different audiences, different attribution windows similar in shape. TikTok's ROAS is structurally slightly less inflated (lower iOS share).       |
| [`google_ads.gads_roas`](/nerve-centre/kpi-cards/google-ads/roas)                                       | Independent paid channel                                                                                                                                                | Different ecosystems. Google's ROAS is tighter (intent-driven, less iOS impact, Enhanced Conversions has cleaner consent handling).                |

***

<details>
  <summary><em>Documentation cross-reference (Events API rollout impact on this card)</em></summary>

  A clean Events API rollout typically lifts TikTok-reported ROAS by **10, 25%** in the 7, 14 days following implementation, as TikTok backfills previously-missed iOS conversions. The lift is real measurement (Events API catches conversions Pixel missed), not inflation. Annotate the Change History below when Events API goes live so future ROAS-trend reads can account for the step-change. After Events API is stable, modeled-conversion fill should drop from \~22% to \~10% of `total_complete_payment_value`. If modeled fill stays above 20% post-Events-API, your implementation has gaps (deduplication issue, missing event types, partial coverage).
</details>

## 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 $50k 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](https://app.vortexiq.ai/login) or [book a demo](https://www.vortexiq.ai/contact-us) to see this metric running on your own data.
