At a glance
The real-time alert that fires when a campaign’s return on ad spend falls sharply against its own recent baseline. It compares current ROAS to the prior 7-day same-day-of-week window and pings when the drop is large enough on a campaign carrying real spend. This is the first number to check when the ad team’s morning is about to go badly. On TikTok a genuine ROAS drop usually means creative fatigue (the For You feed has stopped rewarding the same video) rather than a bidding error, so it warrants a same-session look before the day’s spend compounds. Caveat: a ROAS drop can be a measurement break (Pixel or Events API failing) rather than a demand drop, and TikTok’s iOS attribution is brittle, so always confirm against Clicks vs Conversions before cutting spend.
| What it watches | Campaign-level ROAS, derived from TikTok-attributed total_complete_payment_value divided by spend, pulled from the TikTok Ads Reporting API. The alert evaluates each campaign carrying meaningful spend, not just the account total. |
| The comparison basis | Current ROAS vs the prior 7-day same-day-of-week window. Same-DOW comparison removes weekday-vs-weekend seasonality so a normal Monday-to-Sunday swing does not trip the alert. |
| Alert trigger | ROAS drop greater than roughly 25% versus the prior 7-day same-DOW window, on any campaign with spend above a configured floor. The percentage and the spend floor are both tunable per profile in the Sensitivity tab. |
| Why a spend floor | A campaign spending a few units a day can swing wildly on one or two orders, and TikTok’s auto-bid CBO can starve a small ad group entirely for a day. The spend floor suppresses that noise so the alert only speaks when real money is at stake. |
| Attribution model | Inherits the ad account’s configured window, typically 7-day click + 1-day view post-iOS 14.5. A drop is measured on a like-for-like attribution basis across both windows. |
| iOS 14.5+ ATT impact | A sudden ROAS drop can reflect a tracking regression (Pixel or Events API events stopping) rather than a demand drop. TikTok skews younger and Android-heavier than Meta, so iOS noise is structurally lower, but it is not zero. Pair with Pixel/Events-API Tracking Broken to separate the two causes. |
| Modeled conversions | TikTok auto-fills attribution gaps with modeled conversions. A modeling recalibration can move ROAS without any real change in demand. The rolling comparison smooths most of this, but a single-day spike is less trustworthy than the 7-day read. |
| Chart type | Alert list. Each row names the campaign, its current ROAS, the prior-window ROAS, and the percentage drop. |
| Currency | Account currency, set at advertiser-account creation and immutable. Single currency per ad account. |
| Time window | RT (real-time, recomputed on the standard refresh; TikTok Reporting ingest lags 2 to 6 hours, slower than Meta or Google). |
| 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 apparel brand running TikTok on a 7d/1d attribution window. The alert fires at 09:10 on 14 Mar 26. Account currency USD. Events API is live. All figures below are illustrative, not a real advertiser’s data.| Campaign | Spend last 24h ($) | ROAS now | ROAS prior 7d same-DOW | Drop | Flagged |
|---|---|---|---|---|---|
| Conversions (cold In-Feed) | 1,820 | 2.10x | 3.40x | -38% | Yes |
| Conversions (retargeting 7d) | 640 | 5.90x | 6.20x | -5% | No |
| Catalog Sales (TikTok Shop, DSA) | 410 | 1.95x | 2.05x | -5% | No |
| Spark Ads (creator boost) | 35 | 0.80x | 2.90x | -72% | No (below spend floor) |
- Only the cold In-Feed campaign trips the alert. It carries the most spend and its ROAS fell 38% against the same weekday last week. That is a real money signal, not noise.
- The Spark Ads boost fell harder (-72%) but does not fire. It is below the configured spend floor, so a one-order swing is expected. Raising or lowering that floor is a Sensitivity-tab decision based on how much daily spend counts as material for this account.
- The first diagnostic is measurement, not demand. Before cutting the cold campaign’s budget, check Clicks vs Conversions and Pixel/Events-API Tracking Broken. If clicks held steady while conversions dropped, the cause is likely a tracking break, and cutting spend would be the wrong move.
- If tracking is healthy, treat it as creative fatigue first. A 38% drop on a cold In-Feed campaign is the classic TikTok signature, the same video has cycled through the For You feed and the audience has stopped reacting. TikTok creative fatigues in 2 to 3 weeks (vs 4 to 8 on Meta), so plan a refresh and check CTR Trend for the leading-indicator decline.
- Same-DOW comparison matters here. Comparing Saturday to the prior Friday would show a false drop on a B2C account where weekends convert differently. The same-DOW basis removes that artefact.
- ROAS drop + clicks steady + conversions down = suspect tracking first. Check Pixel/Events-API Tracking Broken.
- ROAS drop + CTR already declining for 1 to 2 weeks = creative fatigue. Refresh the video, do not just raise the bid.
- ROAS drop + spend up sharply = CBO has scaled a winner into less efficient inventory. Cap the daily budget.
- ROAS drop on a Reach or BHC line item = not a real signal. Awareness objectives are not billed on conversions; do not read ROAS on them.
Sibling cards merchants should reference together
| Card | Why pair it with ROAS Dropped Below Threshold | What the combination tells you |
|---|---|---|
| ROAS | The headline level this alert watches. | Whether the drop is off a healthy base or a weak one. |
| ROAS Trend | The daily series behind the alert. | The shape of the decline: gradual fatigue vs a sudden cliff (tracking break). |
| Clicks vs Conversions | The broken-tracking canary. | If clicks held while conversions fell, the ROAS drop is measurement, not demand. |
| Pixel/Events-API Tracking Broken | Confirms whether a tracking regression caused the drop. | Stops you cutting spend on a measurement bug. |
| CTR Trend | CTR decline usually precedes ROAS decline by a week or so on TikTok. | Early-warning shape for creative fatigue. |
| ROAS by Campaign | Where the drop concentrates. | Isolates the offending campaign for action. |
| GA4 Revenue by Channel | Independent attribution check. | If GA4 Paid Social held steady while TikTok ROAS dropped, suspect TikTok-side tracking. |
| Google Ads ROAS Drop Alert | The same alert on the paid-search channel. | Tells you whether the drop is TikTok-specific or a store-wide demand shift. |
Reconciling against TikTok Ads Manager
Where to look in TikTok Ads Manager: TikTok Ads Manager > Campaign > Complete Payment ROAS column, with the date range set to today and a comparison range set to the prior 7 days. TikTok does not surface a same-day-of-week alert natively, so you reconstruct the comparison manually. Match the attribution setting to this card’s configured window and the per-campaign ROAS values should line up to within rounding. Other Ads Manager views that look related but are not:- Automated Rules: TikTok’s own rule engine can pause campaigns on a ROAS threshold, but it acts rather than alerts, and it does not use a same-DOW baseline. This card is a detection layer, not an auto-action.
- Account-level ROAS: the headline number blends all campaigns and can stay flat while one campaign collapses. This card watches each campaign individually.
| Reason | Direction | Why |
|---|---|---|
| Time zone | Boundary days off | TikTok uses the ad-account time zone (set at account creation and immutable); this card uses UTC. On a same-day comparison the boundary can shift the percentage on US Pacific accounts. |
| Same-DOW vs calendar | Different baseline | TikTok’s built-in comparison is prior-period (yesterday or prior 7 days as a block); this card compares the same weekday to strip seasonality. The two baselines can disagree on whether a drop is real. |
| Ingest lag | Today reads low | TikTok Reporting ingest lags 2 to 6 hours, so today’s ROAS is incomplete; the alert weights the rolling read to avoid false fires on lag alone. |
| Modeled-conversion recalibration | Variable | A TikTok modeling update can move ROAS without a demand change. The rolling window absorbs most of this. |
| Card | Expected relationship | What causes legitimate divergence |
|---|---|---|
google_analytics.ga_revenue_by_channel | If TikTok ROAS drops but GA4 Paid Social holds, suspect TikTok-side tracking | GA4 uses last-non-direct click; TikTok uses its own window. A divergence points at attribution, not demand. |
shopify.total_revenue | A store-wide revenue drop affects all channels | If Shopify revenue is flat while TikTok ROAS dropped, the issue is TikTok-specific (tracking or fatigue), not market demand. |
google_ads.roas_drop_alert | Both firing at once suggests a store-wide cause | Both quiet except TikTok points at a TikTok-only problem. |