Calculating ROAS by channel without trusting the ad platform
Ad platforms mark their own homework and their reported revenue rarely reconciles to your bank account. Here is how to compute ROAS from your own payment data, and what break-even actually is.
All posts
Ad platforms report their own ROAS, and every one of them is grading its own work. The result is a number that looks precise, cannot be reconciled to your bank account, and is used to allocate real budget.
Here is how to compute it yourself.
The formula, and the number that actually matters
ROAS = revenue attributed to the campaign ÷ campaign spend
Reported as a multiple (4x) or a percentage (400%). Both mean the same thing.
The number people get wrong is not this one. It is the threshold:
Break-even ROAS = 1 ÷ gross margin
| Gross margin | Break-even ROAS | So a 3x ROAS is |
|---|---|---|
| 20% | 5.00x | a loss |
| 40% | 2.50x | a thin profit |
| 60% | 1.67x | healthy |
| 90% (software) | 1.11x | very good |
A physical-goods business and a software business can post identical ROAS with opposite outcomes. Publish your break-even line next to the metric, or the metric will be read as though it were a grade.
Why platform-reported revenue overstates
Three mechanisms, all of them working in the same direction:
View-through conversions. Someone saw the ad, did not click, bought later. The platform counts it. Whether the ad caused the purchase is unknowable from the platform’s side.
Generous attribution windows. A click seven, fourteen or twenty-eight days before a purchase is claimed as the cause of it. Two platforms with overlapping windows will both claim the same sale.
Self-interested last touch. Each platform sees only its own traffic and, from inside its own data, every conversion it can associate with itself looks attributable to itself.
The test is simple and worth running once: add up the revenue every platform claims for a month and compare it to what actually arrived in your account. If the first is larger — and it usually is, sometimes by a lot — you now know exactly how much of your reporting is fiction.
Computing it from your side
Spend from the platform. This is the one number the platform has no reason to overstate. Take it directly.
Revenue from your payment provider. Not from a browser event. A purchase event fired from the page is lost whenever the tracker is blocked, whenever the checkout completes on the provider’s domain, and whenever the tab closes early. Your payment provider is a system of record and is never blocked.
Attribution from your own analytics, using one model you name on the report. Last-click is the honest starting point for paid campaigns, because a paid click is usually recent and close to the purchase.
Then:
Channel ROAS = (revenue attributed to that channel, from your payment data)
÷ (spend on that channel, from the platform)
Your figure will be lower than the platform’s. That is the point. It will also be consistent across platforms, because one system counted all of it, which makes cross-platform comparison meaningful for the first time.
Tag the links, or none of this works
ROAS by channel requires knowing which visits came from which campaign, and a referrer will not tell you — modern browser defaults strip it to the origin, and paid clicks often arrive through redirects that lose it entirely.
That is what UTM parameters are for. The discipline that makes them useful:
- Lowercase everything.
Emailandemailare two channels forever. - A fixed vocabulary for
utm_medium. Pick five values; never invent a sixth. utm_sourceis the platform,utm_campaignis the campaign,utm_contentis the creative.- Write the convention down before anyone else builds a link.
Our UTM builder applies these rules as you type, which works better than agreeing on them and then not following them.
Subscriptions break single-period ROAS
If the customer keeps paying, first-month ROAS is not wrong so much as incomplete — it measures one instalment of a return that continues.
Two defensible fixes:
Fix a horizon. Decide that ROAS means 90-day revenue, apply it to every campaign, and never quietly change it. Comparable across campaigns, and honest about what it covers.
Switch metric. Compare acquisition cost against lifetime value instead, which is the version built for recurring revenue.
What does not work is comparing a first-month ROAS on one campaign to a lifetime ROAS on another, which happens more often than anyone admits.
Reading the result without fooling yourself
The marginal visitor is worse than the average one. A campaign at 6x ROAS on $500 of spend will not hold 6x at $5,000. You are buying additional impressions, and the additional ones are further from your best audience. Scale in steps and re-measure.
Small samples are not results. A campaign with eleven conversions has a ROAS that is mostly one or two customers’ order sizes. Wait for volume before reallocating budget.
A falling ROAS is not automatically a failing campaign. If you deliberately scaled spend, a lower ROAS above break-even may be more total profit than a higher ROAS on a smaller base. Optimise for profit, not for the ratio.
ROAS ignores everything unpaid. Organic search, referrals and word of mouth have no spend to divide by, so they never appear. A dashboard sorted by ROAS quietly hides your best channel if that channel is free.
sonex reads revenue from Stripe or Polar on every plan and reports it by channel and campaign, so the numerator comes from a system of record rather than a browser. Start free.
Frequently asked questions
- What is a good ROAS?
- There is no universal answer, because break-even ROAS is the inverse of your gross margin. At 20% margin you need 5x just to break even; at 90% margin you need 1.11x. A 3x ROAS is a loss for the first business and a strong result for the second.
- Why is my ROAS different in the ad platform than in my own analytics?
- Each platform counts conversions it can plausibly claim, using its own attribution window and view-through rules. Two platforms can both claim the same sale, so the sum of platform-reported revenue routinely exceeds the revenue that actually arrived.
- How do I calculate ROAS without the ad platform's numbers?
- Take spend from the platform, which is a fact it has no reason to overstate, and take revenue from your payment provider attributed by your own analytics. Spend from them, revenue from you.
- Does ROAS work for subscription businesses?
- Not in a single period. First-month ROAS understates every campaign because the customer keeps paying. Fix a deliberate horizon — 3, 6 or 12 months — or compare acquisition cost against lifetime value instead.
sonex is privacy-first web analytics. No cookies, no consent banner, no personal data. Drop one script and read realtime visitors, funnels and a world map in seconds.
Try sonex free