How to Track Real ROAS Across Every Ad Channel
Platform-reported ROAS is inflated by 25-40%. Here's how to set up cross-channel tracking that uses actual collected revenue — not what ad platforms claim.
You run Google Ads and Meta Ads. Google says ROAS is 4.2x. Meta says 3.8x. If you add those together, you've apparently generated $80,000 from $10,000 in ad spend.
Then you check your bank account. $47,000 came in. Where did the other $33,000 go?
It didn't go anywhere. It never existed. Both platforms claimed credit for the same sales, counted revenue that was later returned, and attributed organic purchases to ads. This is the cross-channel attribution problem, and it affects every business running ads on more than one platform.
Here's how to build a tracking system that shows your real numbers.
Why Platform ROAS Is Always Wrong
Every ad platform has the same incentive: make their numbers look good so you keep spending. They do this through:
Overlapping attribution windows. Google uses a 30-day click window. Meta uses 7-day click / 1-day view. A customer who saw a Meta ad and later clicked a Google ad gets counted by both platforms.
Counting gross revenue. Platforms count the order amount at checkout. They don't subtract the return filed a week later, the chargeback disputed a month later, or the payment that failed and was never collected.
View-through attribution. Meta counts a sale if someone merely saw your ad and bought within 24 hours — even if they never clicked it and found you through organic search.
The Real ROAS Tracking Stack
You need three data sources connected:
Source 1: Ad Platform Spend Data
Pull daily spend from each platform:
- Google Ads: campaign spend, clicks, platform-reported conversions
- Meta Ads: ad set spend, impressions, platform-reported conversions
- TikTok, LinkedIn, etc.: same data points
Source 2: Payment Processor Revenue
This is your source of truth. Pull from Stripe, Shopify Payments, or whatever processes your actual transactions:
- Collected revenue (money that hit your account)
- Refunds and returns
- Chargebacks and disputes
- Failed payments
Source 3: Customer Identity Matching
Connect ad clicks to actual purchases by matching:
- Email addresses (from ad platform lead forms → payment processor customer records)
- UTM parameters (from ad click → website session → purchase)
- Transaction IDs (from conversion pixel → payment confirmation)
Step-by-Step Setup
Step 1: Tag Every Ad with UTM Parameters
Every ad URL should include:
?utm_source=google&utm_medium=cpc&utm_campaign=brand_2026&utm_content=ad_v2
Store these UTM parameters in a cookie or session when the user lands. When they purchase, attach the UTM data to the transaction. This is how you trace a purchase back to the specific campaign.
Step 2: Calculate Real ROAS Per Channel
For each channel, the formula is:
Real ROAS = (Collected Revenue - Returns - Chargebacks) / Channel Ad Spend
Not platform-reported revenue. Not gross order value. The actual money that stayed in your bank account from customers who came through that channel.
Step 3: Deduplicate Cross-Channel Attribution
When a customer touches multiple channels before buying, you need a rule:
- Last click: Credit goes to the last ad they clicked (most conservative)
- First click: Credit goes to the first ad they clicked (rewards discovery)
- Linear: Split credit equally across all touchpoints
Pick one and be consistent. Last click is the most common because it's easiest to track and hardest to game.
Step 4: Subtract Organic Overlap
Some percentage of your ad-attributed sales would have happened anyway. The best way to measure this:
- Run a geographic holdout test — turn off ads in one region for 2 weeks
- Compare sales in the holdout region vs. active regions
- The difference in organic sales is your baseline
Most businesses find 15-25% of ad-attributed conversions were organic.
Step 5: Automate the Dashboard
Manually doing this every week is unsustainable. You need automated daily tracking that:
- Pulls spend data from each ad platform via API
- Pulls collected revenue from your payment processor
- Matches transactions to campaigns via UTM data
- Calculates real ROAS per channel, per campaign, per ad group
- Alerts you when any campaign's real ROAS drops below your target
This is exactly what NuMoon does automatically — it connects your ad platforms to your payment processor and calculates real ROAS daily without any manual work.
Real ROAS Benchmarks
After adjusting for returns, chargebacks, and organic overlap:
| Real ROAS | What It Means | |-----------|---------------| | 4x+ | Highly profitable — scale aggressively | | 3-4x | Profitable for most businesses after COGS | | 2-3x | Breakeven territory — depends on your margins | | 1-2x | Losing money on ads after all costs | | Below 1x | Burning cash — pause and fix immediately |
Remember: a platform-reported 4x ROAS often translates to 2-2.5x real ROAS. If your target is 3x real, you need platforms showing 5-6x reported.
Common Mistakes
Trusting platform dashboards for budget decisions. Use platform data to compare Campaign A vs Campaign B within the same platform. Use your real ROAS calculation for budget allocation across platforms.
Checking ROAS weekly instead of daily. A campaign can go from profitable to burning money overnight. By the time you check on Friday, you've wasted 5 days of budget. Set up daily automated alerts.
Ignoring refund timing. A sale counted today might be returned in 14 days. Your ROAS today looks great, but the real number won't stabilize for 2-3 weeks. Track rolling 30-day real ROAS, not daily snapshots.
Optimizing for reported conversions instead of collected revenue. Platform algorithms optimize for what you tell them. If you optimize for "purchase" events, you get more purchases — including ones that refund. If you could feed back collected revenue data, you'd get better optimization. Some platforms support offline conversion uploads for this.
Frequently Asked Questions
How often should I recalculate real ROAS?
Daily for the raw numbers, but use a 7-day or 30-day rolling average for decisions. Individual days have too much variance from refund timing and payment processing delays.
Can I track real ROAS without an integration platform?
Yes, but it takes 3-5 hours per week of manual spreadsheet work. Download spend data from each ad platform, download transaction data from your payment processor, match them via UTM parameters or customer email, then calculate. Most founders do this for 2 months then stop because it's unsustainable.
What if I can't match a purchase to a specific channel?
Unmatched purchases go into an "unattributed" bucket. If this bucket is larger than 30% of your revenue, your UTM tracking has gaps. Common causes: missing UTM parameters on some ads, customers switching devices between click and purchase, or direct/organic traffic mixed in.
Does NuMoon handle all of this automatically?
Yes. NuMoon connects to your ad platforms (Google Ads, Meta Ads, TikTok, LinkedIn) and your payment processor (Stripe, Shopify) via one-click OAuth. It calculates real ROAS daily per channel, per campaign, deduplicates attribution, and alerts you when campaigns need attention. See how it works.
Stop Guessing. Start Measuring.
Every day you run ads without real ROAS tracking, you're making budget decisions based on inflated numbers. The platforms are incentivized to show you good results. You're incentivized to know the truth.
Set up real ROAS tracking — manually or with a tool like NuMoon — and make your next budget decision based on collected revenue, not platform promises.
Take the free health scan to see how much your ROAS numbers might be inflated.