All metrics

What is true ROAS?

True ROAS is return on ad spend measured in the money you actually keep. Instead of dividing platform-reported revenue by spend, it divides the contribution margin attributed to a campaign, channel or creative — revenue minus cost of goods, shipping and payment fees — by what that spend cost.

Formula

true ROAS = attributed contribution margin ÷ ad spend

Worked example

A campaign spends €4,000 and is credited with €20,000 of order revenue. Platform ROAS reads 5.0×. Those orders carry €11,000 of COGS, €1,400 of shipping cost and €560 of payment fees, leaving €7,040 of contribution margin. True ROAS is €7,040 ÷ €4,000 = 1.76×. The campaign is profitable, but it returns a third of what the platform claims.

How Saldo Metrics computes it

Every level of true ROAS is the same division — attributed contribution margin over spend — computed by a small family of views that mirror each other at different grains:

  • v_campaign_true_roas (campaign grain) and v_channel_true_roas (channel grain) both divide attributed margin by spend at the org's configured attribution model, defaulting to linear if none is set.
  • v_channel_attribution carries the same division for every model at once — first-touch, last-touch, linear, time-decay, and a fifth, Markov-chain model, computed only once an org has at least 500 conversions to fit it on — so the app can show a model comparison. trueRoasLinear reads its linear rows specifically.
  • v_creative_ranking repeats the division at creative grain, using the same org-default model, and also ranks creatives by it within their channel.

The margin side comes from fact_attribution, which allocates each order's contribution margin — from v_contribution_margin, itself built from the order's *_base line revenue, COGS, shipping cost and payment fees — across its touchpoints under the chosen model. Cancelled and refunded orders are excluded: true ROAS counts attributed margin from completed sales only. The spend side sums spend_base from the ad platforms, already converted to EUR at the ECB rate for the spend date. Both sides of the ratio are therefore euro amounts converted at each transaction's own date — the division never mixes currencies. If your display currency is not the euro, that one finished ratio's inputs are converted for presentation at a single as-of rate, after the arithmetic, never during it.

Why it matters

Platform ROAS is a channel grading its own homework: each platform counts conversions it believes it caused, on a revenue basis, with no knowledge of your unit economics. Two campaigns at the same platform ROAS can sit on opposite sides of breakeven if one sells your high-margin range and the other moves discounted stock.

Common mistakes

  • Comparing true ROAS across attribution models as if it were one number. The formula is the same, but first-touch, last-touch and linear can disagree by a wide margin on the same spend — check the model comparison before drawing a conclusion from a single figure.
  • Reading a single campaign's true ROAS in isolation when most of its orders are multi-touch. The channel and creative breakdowns exist for exactly this reason.
  • Treating true ROAS below 1× as automatically bad. For a first purchase in a subscription or high-repeat category, the payback question is CAC payback, not ROAS.

Where you see this in the app

Marketing → Attribution, in the true-ROAS table and the model comparison; Marketing → Creatives, in the per-creative ranking; and on the Campaign True ROAS dashboard widget.

Formula
attributed contribution margin ÷ ad spend
How Saldo Metrics computes it
canonical.v_campaign_true_roas, canonical.v_channel_true_roas, canonical.v_channel_attribution, canonical.v_creative_ranking

Last reviewed 2026-08-12