Skip to content
all posts
Revenue 5 min read

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.

By Sourav · Building sonex
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 marginBreak-even ROASSo a 3x ROAS is
20%5.00xa loss
40%2.50xa thin profit
60%1.67xhealthy
90% (software)1.11xvery 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.

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. Email and email are two channels forever.
  • A fixed vocabulary for utm_medium. Pick five values; never invent a sixth.
  • utm_source is the platform, utm_campaign is the campaign, utm_content is 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
Questions

Frequently asked.

Cookies, install and pricing, answered. Still stuck? Ask us anything .

01 Can sonex show revenue next to my traffic?

Yes. Connect Stripe or Polar with a read-only key and sonex reads revenue straight from your payment provider, per website. Revenue then appears as a focusable series on the Overview chart and as its own report, beside the traffic that earned it. No tracked event is needed for it to work.

02 Does sonex use cookies?

No. sonex sets no cookies and needs no consent banner. It counts visits without cookies, fingerprinting, or any personal data, so it is GDPR, PECR and CCPA-ready by default.

03 How do I install sonex?

Add one script tag to your site's <head> with your website id. It is a single lightweight tracker — no build step and no SDK required.

04 Is sonex a Google Analytics alternative?

Yes. sonex gives you the reports that matter — visitors, pages, referrers, funnels, revenue and a world map — without surveilling your audience or drowning you in configuration.

05 How is sonex priced?

By monthly tracked events. Free covers 2k events, Pro is $20/mo for 200k events, and Business is $200/mo for 2M events with team seats.

See what your traffic actually earns.

Revenue beside the visitors that produced it. No cookies, no credit card, no consent banner.

Get started