Why Your ROAS Is Lying to You (And How to Find the Real Number)
Your Google Ads dashboard says 4.2x ROAS. Your Stripe account tells a completely different story. Here are the 7 ways your ad platform inflates your numbers — and how to find the real figure.
Your Google Ads dashboard says 4.2x ROAS.
You feel good. You scale the campaign. You tell your team it's working.
Then, three months later, you cross-reference what Google reported against what actually hit your Stripe account.
The real ROAS: 1.8x.
You didn't get lied to because you weren't paying attention. You got lied to because every ad platform on the planet has a financial incentive to show you a number that keeps you spending. And they're very, very good at it.
Here are the 7 ways your ROAS is getting inflated — and how to catch each one.
1. Refunds Are Never Deducted
When a customer buys through your Google Ads campaign and returns the product the next week, your ad platform still counts that sale as a conversion.
The platform recorded a purchase event when the order was placed. It doesn't have access to your fulfillment system, your return portal, or your Stripe refund data. So the revenue stays in the ROAS calculation. The refund disappears into a different dashboard.
What this looks like in practice: A campaign shows $80,000 in conversion revenue. Your return rate on that product line is 22%. That's $17,600 in revenue that never actually materialized — but it's still sitting in your ROAS denominator.
How to catch it: Pull your actual refund data from Stripe or your payment processor for the same time period and same products. Subtract it from the ad platform's reported conversion revenue. Recalculate. Be prepared for the number to drop.
2. Bot Click Traffic Is Not Filtered Out
On average, 26–37% of web traffic is non-human. Bots click ads. Some bots trigger conversion events. Ad platforms don't tell you this because filtering it out would reduce your reported results and make their platform look worse.
Click fraud is especially bad on Google's Display Network and programmatic channels. A bot clicks your ad, loads your landing page, and in some cases fires your pixel — all without a human ever seeing your product.
What this looks like in practice: You're running a Display campaign with 200,000 impressions and 8,000 clicks. Even a conservative 15% bot rate means 1,200 of those clicks were never real prospects. Your cost-per-click and conversion rate calculations are both off.
How to catch it: Compare your Google Ads click volume against your actual sessions in GA4. A consistent 15–30% gap between reported clicks and real sessions is a strong signal of significant non-human traffic. Tools like ClickCease or Fraudblocker can quantify it.
3. View-Through Attribution Counts People Who Didn't Click Anything
This is the most brazenly inflated metric in digital advertising and the one most brands never question.
View-through attribution works like this: a user sees your ad (they don't click it), they buy your product weeks later through a completely different channel, and your ad platform claims the credit for that sale.
Meta's default view-through attribution window is 1 day. Google's can be set up to 30 days. That means someone who glanced past your ad on their phone while scrolling TikTok, then Googled your brand two weeks later and bought — that sale appears in your Meta ROAS report.
What this looks like in practice: You're running Meta ads with click-through attribution showing 2.1x ROAS. Switch the attribution window to click-only and that drops to 1.3x. The difference: view-through conversions that had nothing to do with your ad.
How to catch it: In Meta Ads Manager, go to Columns → Customize Columns → and add separate breakdowns for "1-day click," "7-day click," and "1-day view." Compare these numbers. The delta between "7-day click + 1-day view" (the default) and "7-day click only" is how much your ROAS is being inflated by view-through.
4. Cross-Channel Double Counting
Your Google Ads reports a conversion. Your Meta Ads also reports a conversion. Your Klaviyo email also claims the same sale.
One customer. Three platforms. Three "conversions."
This is the attribution problem that's been embarrassing the industry for a decade and nobody has fully solved it. When a customer touches multiple channels before buying — which most customers do — every channel that touched them claims full credit for the sale.
What this looks like in practice: Your combined reported revenue across Google Ads + Meta + Klaviyo is $340,000. Your Shopify revenue for the same period is $180,000. That's $160,000 in phantom conversions being claimed across platforms simultaneously.
How to catch it: Use your actual Shopify or Stripe revenue as the ground truth. Add up all the conversion revenue being claimed across every platform you're running. The ratio of "what platforms claim" to "what Shopify received" tells you your double-counting multiplier. For most brands running 3+ channels, it's between 1.5x and 2.5x.
5. Returns Are Not Deducted (The Shopify Version)
This is different from the refund issue above. Returns are return requests processed through your returns portal — products coming back after delivery. They often appear in your order management system as a separate workflow from Stripe refunds.
Depending on your tech stack, your ad platform may never receive a signal that these sales reversed. The pixel fired on purchase. Nobody told it what happened next.
What this looks like in practice: A high-AOV product (supplements, apparel, home goods) with a 15–25% return rate will systematically inflate your ROAS by the same percentage on every campaign driving those products.
How to catch it: Cross-reference your ad platform's conversion revenue against your actual net revenue (after returns and refunds) from Shopify or your ERP for the same period. Calculate the percentage gap. Apply it as a correction factor to every ROAS number you review.
6. Broad Match Keywords Inflate Click Volume
This one is Google Ads-specific and it's gotten dramatically worse as Google has pushed advertisers toward broad match.
With broad match, your keyword "blue running shoes" can trigger your ad for searches like "athletic footwear for women," "blue sandals," "running training tips," and "shoes for the gym." Google decides what's relevant. You're paying for all of it.
The problem for ROAS: a broad match click from someone searching "how to pick running shoes" is almost certainly not going to convert at the same rate as someone searching "buy Brooks Ghost 16 blue size 10." But both clicks go into the same ROAS calculation.
What this looks like in practice: You have a campaign with broad match keywords. Your ROAS looks reasonable at the campaign level. When you break it down by search term report, you find that 40% of your spend is going to search queries that are tangentially related — and those are converting at 0.4x ROAS while your exact-match terms are at 5x.
How to catch it: Pull the Search Terms Report in Google Ads (Keywords → Search Terms). Filter for terms with significant spend and conversion rates below your target. You will almost certainly find substantial spend on irrelevant queries being averaged into your campaign ROAS.
7. Last-Click Attribution Hides What's Actually Working
If you're using Google Ads with the default attribution model, every sale that ends with a Google click gets credited entirely to Google. The Instagram story your customer saw first, the organic search they ran before clicking your ad, the email they received that morning — none of it matters. Google gets the credit.
This doesn't inflate ROAS in isolation, but it dramatically distorts which channels and campaigns you think are performing. You're scaling the wrong things.
What this looks like in practice: Your branded search campaign shows a 12x ROAS. It's capturing demand from customers who were already going to buy — they found you through Instagram, watched a video, and then Googled your brand name to find the store. You're paying for a conversion you would have gotten anyway, and your dashboard tells you it's your best-performing campaign.
How to catch it: Switch to data-driven attribution in Google Ads (it distributes credit across the full path) and compare it to last-click. Run a position-based view. The channels that "lose" credit in data-driven attribution relative to last-click are the ones that were getting false credit — often branded search and retargeting.
What Your Real ROAS Probably Is
Most DTC brands running multiple ad channels, with a normal return rate and standard attribution settings, will find their blended ROAS drops 30–50% when they cross-reference actual payment data.
A 4.2x reported ROAS often becomes a 2.1–2.8x real ROAS after:
- Deducting refunds and returns
- Removing bot click inflation
- Eliminating view-through attribution
- Correcting for cross-channel double counting
- Filtering broad match wastage
That's not a small difference. At $30,000/month in ad spend, a 4.2x ROAS means you believe you're generating $126,000. A real ROAS of 2.1x means you're actually generating $63,000. The decisions you make about scaling and budget allocation are based entirely on which number you believe.
How to Get to the Real Number
The only way to know your actual ROAS is to treat your payment processor — Stripe, Shopify Payments, or whatever holds your actual transaction data — as the source of truth, and compare everything against it.
Manually, this means exporting Stripe transactions, exporting ad platform data, matching time windows and product SKUs, deducting returns, and building the attribution model yourself. Most operators don't have the time or tooling.
NuMoon automates this. It connects directly to your ad platforms (Google Ads, Meta, TikTok) and your payment processor (Stripe, Shopify), cross-references the data, and surfaces the gap between what's reported and what's real. The average brand we analyze has a $31,420/month discrepancy between reported and actual revenue.
If you want to see where your number actually stands, the Brand Scanner is free — no account required. It gives you a starting picture of what your data actually says versus what your dashboards are reporting.
Hassanain Garawi is the founder of NuMoon. He built the platform after watching DTC brands make expensive scaling decisions based on ROAS numbers that were systematically inflated by ad platform attribution. NuMoon connects your ad data to your actual payment records so you can see the real number.