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. A genuine ROAS drop means you are burning the same budget for less return, so it warrants a same-session look before the day’s spend compounds. Caveat: a ROAS drop can be a measurement break (Pixel or CAPI failing) rather than a demand drop, so always confirm against Clicks vs Conversions before cutting spend.
| What it watches | Campaign-level ROAS, derived from Meta-attributed purchase value divided by spend, pulled from the Meta Marketing API Insights endpoint. 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. The spend floor suppresses noise from tiny campaigns 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 CAPI events stopping) rather than a demand drop. Pair with CAPI/Pixel Tracking Broken to separate the two causes. |
| Modeled conversions | Meta blends modeled conversions into reported value. 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. Single currency per ad account. |
| Time window | RT (real-time, recomputed on the standard refresh, roughly every 30 to 60 minutes). |
| 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 homeware brand running Meta on a 7d/1d attribution window. The alert fires at 09:10 on 14 Mar 26. Account currency GBP. CAPI 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 |
|---|---|---|---|---|---|
| Advantage+ Shopping (cold) | 1,820 | 2.10× | 3.40× | -38% | Yes |
| Advantage+ Shopping (returning) | 640 | 5.90× | 6.20× | -5% | No |
| Manual broad audience | 410 | 1.95× | 2.05× | -5% | No |
| Lookalike 1% (purchasers) | 35 | 0.80× | 2.90× | -72% | No (below spend floor) |
- Only the cold Advantage+ 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 Lookalike campaign 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 CAPI/Pixel 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 fatigue or competition. A 38% drop on a cold Advantage+ campaign alongside rising frequency points to creative fatigue. 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 CAPI/Pixel Tracking Broken.
- ROAS drop + CTR already declining for 1 to 2 weeks = creative fatigue. Refresh.
- ROAS drop + spend up sharply = scaling beyond the efficient frontier. Cap budget.
- ROAS drop + frequency above 5 in 7 days = audience exhaustion. Widen or refresh.
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. |
| CAPI/Pixel 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 1 to 2 weeks. | 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 Meta ROAS dropped, suspect Meta-side tracking. |
| Google Ads ROAS Drop Alert | The same alert on the paid-search channel. | Tells you whether the drop is Meta-specific or a store-wide demand shift. |
Reconciling against Meta Ads Manager
Where to look in Meta Ads Manager: Meta Ads Manager → Campaigns → Columns → “Purchase ROAS (return on ad spend)”, with the date range set to today and a comparison range set to the prior 7 days. Meta 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: Meta’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 | Meta uses the ad-account time zone (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 | Meta’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 | A 1 to 4 hour ingest lag means today’s ROAS is incomplete; the alert weights the rolling read to avoid false fires on lag alone. |
| Modeled-conversion recalibration | Variable | A Meta 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 Meta ROAS drops but GA4 Paid Social holds, suspect Meta-side tracking | GA4 uses last-non-direct click; Meta 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 Meta ROAS dropped, the issue is Meta-specific (tracking or fatigue), not market demand. |
google_ads.roas_drop_alert | Both firing at once suggests a store-wide cause | Both quiet except Meta points at a Meta-only problem. |