True ROAS, in one line
True ROAS = revenue that hit the bank (your Stripe payments) ÷ ad spend.
Platform-reported ROAS = the revenue Meta or Google credits to its own ads ÷ the spend in that platform.
On our homepage we put it this way: "See true ROAS from Stripe revenue, not platform reported numbers." The sample report card on the same page shows the two figures side by side, labelled "True ROAS" and "reported" (thexly.com).
Picture a client meeting. "We spent €100k on ads. Which campaigns made the €300k that hit our bank?" (A framing example, not a client result.)
Meta's report shows one number. Google's shows another. True ROAS starts from the other end, the €300k in the bank: €300k ÷ €100k = 3.0×. That's the number the client can check against their own Stripe account.
The harder part is the second half of the question: which campaigns. We'll get to that. First, why the two kinds of ROAS come apart.
Why platform ROAS and true ROAS differ
Each platform credits its own ads, on its own rules. Meta's help centre says purchases on your website "are attributed back to your ad if they happened within a certain number of days after someone viewed or clicked on your ad" (Meta help). Google's help centre says its default model is "Data-driven" (Google Ads help).
Two platforms can claim the same sale. One reply on r/GoogleAnalytics: "Platform ROAS often is way off with multiple platforms claiming the same sale." (r/GoogleAnalytics, April 2026). Another in the same thread: "Ad Networks will overstate ROAS because they try to claim as many people as possible."
The bank counts money, the pixel counts events. A platform counts a conversion when its tag fires. Stripe counts a payment when it's collected. One r/PPC poster comparing the two for a client wrote: "when I compare ga4 and google ads revenue to stripe (which is the actual source of truth), the gap is big enough that it also makes me question attribution itself, not just ROAS." (r/PPC, January 2026)
None of this makes platform ROAS useless. It's what each platform's bidding runs on, and it's the right number for optimising inside that platform. It's a different number from the one in the bank.
How to work out true ROAS for one client
You can do this today with a spreadsheet.
- 1Pick the dates. The last full month is easiest. Use the same dates everywhere.
- 2Add up ad spend. Total spend from each ad account for those dates.
- 3Add up the money collected. In Stripe, total the payments collected for the same dates. Decide whether you subtract refunds, then do it the same way every month.
- 4Divide. Revenue collected ÷ ad spend. The ROAS calculator gives you the answer as x and %.
- 5Put the platform numbers next to it. Write down what Meta and Google each report for the same dates. The platform vs payment gap calculator shows how far the platform claims sit above the payments.
One thing to know about this number. Stripe revenue ÷ all ad spend is an account-level figure. It counts every payment, including ones from organic, email and returning customers. That's close to what many teams call MER or blended ROAS, and our guide to blended ROAS and MER covers it.
To get true ROAS per campaign, each payment has to be matched to the ad click that led to it. That's the job of a payment-matched tool.
ROAS vs ROI
ROAS and ROI both compare what you got back with what you put in. They use different inputs.
- ROAS = revenue ÷ ad spend. It ignores what the product cost to make, fees, shipping and everything else.
- ROI = (revenue minus all costs) ÷ all costs. It's about profit.
So a campaign can show a ROAS above 1× and still lose money. The line between the two is break-even ROAS. If your gross margin is 40%, break-even ROAS is 1 ÷ 0.40 = 2.5×. That's arithmetic, not a benchmark. The break-even ROAS calculator does it from your margin.
True ROAS matters here because the margin math only holds if the revenue is money that was collected. Compare break-even ROAS with true ROAS, not with what a platform reports.
Setting a target ROAS when you know your true ROAS
Google's Target ROAS bidding works from Google's own numbers. Its help page says "Google Ads predicts future conversions and associated values using your reported conversion values" and then tries "to achieve an average return on ad spend (ROAS) equal to your target" (Google Ads help).
So the target you type into Google is a platform-reported ROAS. If your true ROAS sits below what Google reports, a target picked from the bank numbers needs translating before it goes in.
How Google defines the setting, with a worked example: what target ROAS means in Google Ads.
Here's one way to think it through:
- 1Work out break-even ROAS from margin.
- 2Work out true ROAS and Google-reported ROAS for the same dates.
- 3Note the ratio between them for that client. If Google reports more than the bank shows, a target that looks safe in Google can still sit below break-even in the bank.
- 4Recheck every month. The ratio isn't fixed.
One r/PPC reply, on a thread about moving to Stripe revenue, suggested starting from the true number and stepping up: "I would calculate what the actual ROAS is when taking real revenue data into consideration. Move down the ROAS to that level, and as long as it hits it, increase by 10-20% per week until you hit your desired ROAS." (r/PPC, January 2026). That's one practitioner's approach. Test it on one campaign first.
Where Thexly fits
Thexly does the matching step for agencies. One script on each client site picks up the ad click IDs and UTM tags. Thexly connects to the client's Stripe with a read-only key and matches each payment back to the visit and campaign click that led to it, counted once (docs).
How payment-matched tools compare with multi-touch suites and CRM attribution: marketing attribution software, the four kinds.
What it doesn't do: it doesn't send conversions back to Meta or Google, and it doesn't pull spend from their APIs. You bring spend from the client's ad accounts (guide).
If you'd like to see the gap for one client first, the payment gap check walks through it: Stripe-matched revenue next to what Meta and Google each report, for the same dates. There's a 14-day trial, no card needed.
What does true ROAS look like for your biggest client this month? If you work it out, we'd like to hear how far apart the numbers were: hello@thexly.com
FAQ
What is true ROAS?
True ROAS is the revenue that hit the bank divided by ad spend. It uses the payments your payment processor, such as Stripe, collected, instead of the revenue an ad platform credits to its own ads.
How do you calculate true ROAS?
Pick a date range, add up ad spend across your ad accounts, add up the payments collected in Stripe for the same dates, and divide revenue by spend. To get it per campaign, each payment has to be matched to the ad click that led to it.
What is the difference between ROAS and ROI?
ROAS is revenue divided by ad spend. ROI is profit divided by all costs, so it takes product cost, fees and other costs into account. A campaign can have a ROAS above 1x and still lose money if it sits below break-even ROAS.
Is true ROAS the same as MER or blended ROAS?
At account level they're close. Stripe revenue divided by all ad spend counts every payment, including organic and email sales. True ROAS per campaign needs each payment matched to the click that led to it.
What is a good true ROAS?
There isn't one number that fits every business. Start from break-even ROAS, which is 1 divided by your gross margin, and compare it with your true ROAS, not with what a platform reports.
Should I set my Google Ads target ROAS from true ROAS?
Google's Target ROAS bidding uses the conversion values Google reports, so the target you enter is a platform-reported ROAS. Work out true ROAS and Google-reported ROAS for the same dates, and use the difference to translate your target before you enter it.