ROAS — and when to scale or pause
ROAS = purchaseValue / spend. Scale when ROAS > target × 1.2 + meaningful spend; pause when ROAS < target × 0.5. Use last_7d minimum.
Written By Salvatore Sinigaglia
Last updated About 5 hours ago
ROAS = purchaseValue / spend. Scale when ROAS > target × 1.2 + meaningful spend; pause when ROAS < target × 0.5. Use last_7d minimum.
ROAS — and when to scale or pause
ROAS = purchaseValue ÷ spend. The headline number for e-commerce campaigns. Decision framework: scale when ROAS > target × 1.2 AND spend > meaningful threshold; pause when ROAS < target × 0.5 AND spend > meaningful. ROAS targets vary by industry (e-commerce typical 2-4; subscription 1-2; lead-gen uses CPA not ROAS). Critical caveat: postback lag means recent days have incomplete data — use
last_7dminimum for decisions.
Who is this for
Anyone making scale-or-pause decisions on ad campaigns. The single most-asked metric question in mediabuyer work.
What ROAS measures
Return on ad spend:
ROAS = purchaseValue / spendExample: spend €500, generated €1.500 in tracked purchases → ROAS = 3.0 (= €3 returned per €1 spent).
ROAS targets vary by business
There's no universal "good ROAS":
Calculate yours: take your gross margin, account for fixed costs, derive the break-even ROAS — then add a profit margin.
The decision framework
Once you know your target ROAS, the question becomes "scale, pause, or hold?":
Scale signal
ROAS > target × 1.2 AND spend > meaningful_thresholdExample: target ROAS 3, current ROAS > 3.6, current spend > €50 / day.
meaningful_threshold ensures the ROAS signal is reliable (low spend = noisy ROAS). Set based on your typical campaign size — for €1K daily, threshold €50 is fine; for €100 daily, threshold might be €20.
Pause signal
ROAS < target × 0.5 AND spend > meaningful_thresholdExample: target ROAS 3, current ROAS < 1.5, current spend > €50 / day.
Sub-half target = clear unprofitable. Pause + investigate.
Hold (do nothing)
ROAS in between target × 0.5 and target × 1.2. Either:
- Optimize creative / audience (small adjustments)
- Wait for more data
- Test variants
No knee-jerk decisions here.
Critical caveat: postback lag
ROAS depends on purchaseValue from postback data:
- Meta API postback: 24-72h lag after the conversion event
- Custom commerce / tracker integration: faster (seconds to hours)
This means:
- Today's ROAS is incomplete (purchases from yesterday's clicks still flowing in)
- Yesterday's ROAS is mostly settled but may grow further
- Last 7 days ROAS is reliable
Use last_7d minimum for ROAS decisions. Acting on today or yesterday ROAS = acting on incomplete data → whiplash decisions.
See am-121 postback vs Meta conversions for the deep dive.
ROAS across platforms
Cross-Channel mode unifies ROAS across Meta / Google / TikTok / etc. — but attribution windows differ:
Same purchase may be claimed differently by platforms. Cross-Channel does best-effort unification but small variance is expected.
For tighter analysis: use postback / tracker data (PRD-14 com-*) which provides single-source-of-truth attribution.
ROAS in Rules Engine
Connection to PRD-17 Rules Engine: ROAS-based rules are the most common automation:
IF roas < target × 0.5 AND spend > 50 FOR last_7dTHEN pause adsetOr:
IF roas > target × 1.5 AND spend > 100 FOR last_3dTHEN increase_budget_pct 20Common mistakes
- Acting on today's ROAS: incomplete data; wait for 7-day settle
- Comparing platforms 1:1 on ROAS: attribution windows differ; small variance is normal
- Scaling without spend guard: low-spend ROAS is noise — could be 1 lucky purchase
- Using ROAS for lead-gen: lead-gen campaigns don't have
purchaseValuenatively; use CPA instead - Treating ROAS as static: it varies by audience, creative, time-of-day, season; review periodically
- One ROAS target for whole account: different campaigns have different target ROAS (prospecting vs retargeting; cold vs warm audience)
When ROAS doesn't apply
- Brand campaigns → measure reach / impressions / brand-lift studies
- Lead generation → measure CPA / CPL
- App installs → measure CPI + LTV
- Subscription → blend ROAS with LTV for true picture
- Top-funnel awareness → measure reach + frequency
For these: pick the right metric, don't force ROAS.
FAQ
How does Wevion calculate ROAS?
Wevion computes ROAS as purchaseValue divided by spend. For example, spending €500 that generates €1.500 in tracked purchases gives a ROAS of 3.0, meaning €3 returned per €1 spent. It's the headline number for e-commerce campaigns, sourced from postback purchase data across the platforms you've connected.
When should I scale or pause a campaign based on ROAS?
Wevion's decision framework says scale when ROAS is above target × 1.2 and spend exceeds a meaningful threshold, and pause when ROAS falls below target × 0.5 with meaningful spend. Anything in between is a hold: optimize creative or audience, wait for more data, or test variants rather than making knee-jerk decisions.
Why does yesterday's ROAS keep changing in Wevion?
Because ROAS depends on postback purchaseValue, which lags 24-72 hours for Meta API conversions. Today's ROAS is incomplete and yesterday's is mostly settled but may still grow as purchases from earlier clicks flow in. Use the last_7d window as a minimum for reliable ROAS decisions and avoid acting on today or yesterday.
What ROAS target should I aim for?
There's no universal good ROAS; it varies by business model. Low-margin e-commerce typically targets 4-6+, high-margin 2-3, and subscription 1-2 since LTV makes up the difference. Lead generation and brand awareness don't use ROAS at all. Calculate yours from gross margin, fixed costs, and break-even, then add profit margin.
Does ROAS work for lead-generation campaigns?
No. Lead-generation campaigns don't have purchaseValue natively, so ROAS doesn't apply; use CPA or CPL instead. Similarly, brand awareness uses reach or CPM, app installs use CPI plus LTV, and top-funnel awareness uses reach and frequency. Pick the right metric for the goal rather than forcing ROAS everywhere.