Skip to main content
Card class: HeroCategory: Ad Platform

At a glance

Return on ad spend on StackAdapt. conversionsValue ÷ spend, with view-through credit included where configured. DSP ROAS reads in the 2, 4× band typically; below 2× the working media isn’t paying for itself; above 4× either retargeting is dominating the mix or view-through is over-claiming. A 3× DSP ROAS often translates to 1.5, 2× true incremental ROAS once view-through inflation and multi-touch overlap are factored out.
The formulaconversionsValue ÷ spend from reports/campaigns at account level. Both come from the same call; the ratio is internally consistent within StackAdapt.
What “spend” meansGross media cost (incl. StackAdapt platform fee 15, 25%) in account currency, after IVT credits, before agency markup.
What “revenue” meansStackAdapt-pixel-attributed conversion value within the configured attribution window (default 30/1 click+view, configurable to 30/7 for CTV-heavy accounts).
Cost basisMostly CPM (display, video, CTV, audio); CPC for native and some display. ROAS is unit-agnostic; the ratio compares revenue to spend regardless of how spend was bought.
CurrencyAccount currency.
Conversion attributionClick-through + view-through. Attribution is generous compared to Search; CTV view-through alone can lift ROAS 30, 60% over click-only.
Attribution window30-day click + 1-day view default. Extend to 30/7 for CTV-heavy accounts; shortening for honest-only-clicks reads is sometimes preferable for CFO-side measurement.
Bot / invalid trafficIVT-filtered; minor leakage.
Time window30D vsP. Real-time ingest with 1, 4 hour pixel-fire lag.
Alert trigger<2 (warn), <1 (critical). Below 2× DSP ROAS on a mid-market account is concerning; below 1× is unprofitable on any margin structure.
Sentiment key{'type': 'gauge', 'thresholds': {'good': 4, 'warn': 2}}
Rolesowner, marketing, finance

Calculation

Calculated automatically from your StackAdapt data. See the At a glance summary above for what the metric tracks and the worked example below for a typical reading.

Worked example

The same US homeware brand. The 30-day window is 02 Apr 26 to 01 May 26.
CampaignChannelSpend ($)Total revenue ($)Per-campaign ROAS
Display ProspectingDisplay12,40042,4003.42×
CTV Awareness “Spring Living”CTV18,20028,4001.56×
Native Article DistributionNative5,40016,0002.96×
Audio Spotify SponsorshipAudio3,2005,0001.56×
RetargetingDisplay + Video4,80025,6005.33×
Account total (this card)$44,000$117,4002.67×
Shopify-truth context: UTM-tagged StackAdapt revenue $48,200. Business ROAS on Shopify-truth = 1.10×. Both are real; both answer different questions. What’s interesting:
  1. Account ROAS 2.67× sits in the “warn” gauge band (good ≥4, warn ≥2). For DSP this is on the lower side; healthy mid-market DSP runs 2.5, 4× when the channel mix is balanced. The CTV-heavy mix here (41% of spend) drags the headline down.
  2. Retargeting at 5.33× is the standout. This is StackAdapt’s sweet spot. Cross-channel retargeting reaches users who already showed intent; conversion rates are 3, 5× higher than prospecting. Scale this campaign aggressively, but watch for diminishing returns past 25, 30% of total spend (you’ll exhaust the audience).
  3. CTV at 1.56× ROAS reads bad on a last-click basis but is misleading. CTV’s job is to seed intent; the conversions appear weeks later as Direct, Branded Search, or Email orders that Shopify credits to other channels. Real CTV ROAS measured via incrementality is often 2.5, 4× even when StackAdapt-attributed reads under 2×.
  4. Audio at 1.56× ROAS is unprofitable on direct attribution. If your audio strategy is awareness-only, accept it as awareness spend. If you expected direct response, the channel-product fit is probably wrong; audio shines for low-consideration impulse products, not homeware.
  5. Prior 30D ROAS was 3.51×. Down to 2.67× this window, a 24% decline. Spend up 21%, revenue down 8%. Classic scaling-beyond-efficient-frontier shape. Action: cap budget at prior-period level for two weeks, refresh creative on Display Prospecting, audit CTV view-through window to ensure it’s at 7-day not 1-day.
Quick sanity tests:
  • ROAS up + spend up = healthy scaling.
  • ROAS down + spend up = scaling beyond efficient frontier; cap budget.
  • ROAS down + spend flat = something changed (pixel, audience, attribution window). Investigate before throttling.
  • CTV ROAS very low + display ROAS healthy = CTV view-through window probably misconfigured.
  • All channels ROAS down simultaneously = pixel issue or site-wide tracking problem.

Sibling cards merchants should reference together

CardWhy pair it with ROAS
StackAdapt Total SpendThe denominator. ROAS up + spend up is healthy scaling.
StackAdapt Total RevenueThe numerator. Tells you whether ROAS moved on cost-side or revenue-side.
StackAdapt ROAS by CampaignAccount ROAS hides per-campaign variance; retargeting at 5× and CTV at 1.5× average to 2.7× and tell you very different stories.
StackAdapt ROAS TrendDaily series. DSP ROAS is volatile; 7-day rolling is the actionable read.
StackAdapt Clicks vs ConversionsThe pixel-health canary.
StackAdapt CTR TrendCreative-fatigue early warning. CTR drops typically precede ROAS drops by 1, 2 weeks.
The Trade Desk ROASEnterprise DSP peer; comparable structural attribution.
GA4 Revenue by ChannelIndependent attribution check.
Shopify Total RevenueTruth side. Real business ROAS is 30, 50% of DSP-claimed.

Reconciling against the vendor’s own dashboard

Where to look in StackAdapt: StackAdapt → Reports → Campaigns → ROAS column at account level. Should match this card to within sub-percent rounding once ingest catches up. Why our number may legitimately differ from StackAdapt’s UI:
ReasonDirectionWhy
Time zoneBoundary days offAccount TZ vs UTC. Marginal at 30D.
Real-time ingest lagCard slightly low for “today”1, 4 hour pixel-fire-to-report lag.
View-through window changesDirection dependsView-through window changes reflow data retroactively.
Click vs view-through inclusionCard == StackAdaptBoth include both. Click-only ROAS is a separate StackAdapt UI toggle.
Fee inclusionBoth grossWorking Media ROAS (excluding platform fee) is a separate UI toggle, runs ~20% higher.
Cross-connector reconciliation:
CardExpected relationshipWhat causes legitimate divergence
google_analytics.ga_revenue_by_channel(GA4 Paid Display revenue ÷ StackAdapt spend) ≈ this card × 0.5, 0.7StackAdapt includes view-through; GA4 typically does not. Structural over-claim.
shopify.total_revenueBusiness ROAS = UTM-StackAdapt Shopify revenue ÷ StackAdapt spend, typically 0.3, 0.5× this cardView-through, multi-touch, pixel block. The “true” ROAS sits between.
the_trade_desk.the_roasPeer DSP; comparable structural attributionDifferent inventory pools and audience tooling; absolute ROAS comparison is benchmarking only.
google_ads.gads_roasDifferent ecosystem; not directly comparableSearch captures intent, programmatic seeds it. Search ROAS is structurally higher.
facebook_ads.fac_roasBoth have view-through; comparable benchmarkMeta has CAPI inflation issues; StackAdapt has DSP view-through inflation. Both over-claim, similar magnitude.
Why DSP ROAS reads so differently from Search DSP ROAS sits in the 2, 4× band on a generous (view-through-included) basis because:
  1. Cold audience. Most DSP impressions reach users who weren’t actively shopping; click value is lower than Search.
  2. View-through inclusion. StackAdapt credits impressions that didn’t lead to a click but where the user later converted. Search does not.
  3. Multi-touch hand-off. DSP often seeds intent that Search closes; last-click attribution credits the closer.
For honest DSP ROAS, run periodic incrementality holdouts (turn off DSP for 14 days in a control region). Real incremental DSP ROAS is typically 1.2, 2.5× last-click DSP ROAS, but with high variance.

Known limitations / merchant FAQs

My StackAdapt ROAS is 2.5× and Google Ads ROAS is 6×, should I move budget? Maybe, but not on that comparison alone. The two channels do different jobs. Search captures intent (people searching for your product); DSP seeds intent and reaches users who weren’t shopping. Moving budget from DSP to Search often shows a Search ROAS lift in the short term and absolute revenue contraction in 30, 60 days as the funnel-feeder dries up. Run a holdout test before reallocating: pause DSP in one geo for 14 days vs control. If Direct/Branded Search/Email volumes hold, move the budget; if they drop 10, 20%, DSP was working harder than its ROAS suggested. Why is CTV ROAS so much lower than display ROAS? CTV cannot generate clicks (you can’t tap a TV). All CTV attribution is view-through. With a 1-day view-through window CTV ROAS is artificially compressed because most CTV-driven conversions take 3, 7 days to surface. Set CTV view-through to 7 days and ROAS typically rises 30, 60%. Even at 7 days, CTV ROAS will be lower than display because the audience is colder and earlier-funnel. My ROAS dropped 30% after I extended view-through from 1 day to 7 days, that doesn’t make sense. You probably didn’t extend; you shortened. Re-check the campaign settings. Extending the window should raise ROAS (more conversions credited), not drop it. If you genuinely extended and ROAS dropped, the cause is elsewhere (creative fatigue, audience exhaustion, attribution-window-independent issue). Should I optimise BidCore for ROAS or for CPA? Depends on AOV. High AOV (>200)**: optimise for ROAS; the algorithm targets revenue × value. **Low AOV (&lt;80): optimise for CPA; ROAS optimisation gets confused by AOV variance and small samples. Mid-range: try both for 14 days each, pick whichever delivered better Shopify-truth incrementality. My retargeting ROAS is 5× and prospecting is 2×, can I just shut off prospecting? You can, but the funnel will erode. Retargeting needs prospecting to refill the audience pool; without it, the retargeting audience exhausts in 30, 60 days and ROAS collapses. Healthy DSP accounts maintain a 60/40 to 70/30 prospecting/retargeting split. The high retargeting ROAS depends on the prospecting work; do not separate them. Why does this card show ROAS dropping when I just turned on a new campaign? New campaigns enter BidCore’s learning phase; the algorithm pays exploration cost to find the converting audience. ROAS is depressed for the first 7, 14 days while learning. Expect ROAS to lift after 50, 100 conversions (when learning phase exits). If ROAS hasn’t lifted by day 21, the campaign config is probably wrong (audience, creative, landing page). Can I trust the “today” ROAS? Less than rolling 7-day. Today’s ROAS is built from incomplete data; clicks today often convert tomorrow or later (especially on CTV view-through). The 7-day rolling is the actionable read. Why is Audio ROAS so low even though podcast/audio sponsorship is supposedly effective? Streaming audio is structurally hard to measure. The user heard your ad while driving; bought 4 days later via Branded Search. Your DSP gets no credit (no click, no view-through pixel fire), Search claims the conversion. Audio’s value shows up in incremental Search volume not direct DSP attribution. Run a Search-volume-by-region analysis during/after audio campaigns; that’s where audio ROAS actually lives. My multi-region account, how does ROAS work? StackAdapt accounts are single-currency. Multi-region advertisers run separate accounts per region; this card is per-account. Aggregate ROAS across regions requires a weighted blend at the report layer.

Tracked live in Vortex IQ Nerve Centre

ROAS is one of hundreds of KPI pulses Vortex IQ tracks across StackAdapt 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.