Industry Opinion · 9 min read · Published May 23, 2026
Your Agency's ROAS Report Is Lying: How to Spot Attribution Theatre
Your agency reports 3.8x ROAS. Your P&L shows 2.2x. The gap is not bad luck. It is last-click attribution double-counting purchases across Meta and Google, and the agency staying comfortable behind the inflated combined number.
Founder, BTB Audits. $150M+ in ad spend managed across Meta and Google
This piece is part of the broader BTB worldview on the DTC ad audit category. The full position is in the Honest Audit Manifesto.
Your agency reports 3.8x ROAS (return on ad spend). Your P&L (profit and loss report) shows 2.2x. They tell you the gap is "attribution differences" or "platform reporting variance" or "post-purchase returns." All of these are real things. None of them explains the full gap.
The full gap exists because platforms last-click-attribute by default. Meta and Google both claim credit for the same purchase when the customer saw ads on both. The platforms report 7,000 combined purchases. Shopify shows 5,000 actual purchases. The 2,000 difference is not missing data. It is double-counted data.
And the agency sits comfortably behind the inflated combined number. Nobody on a weekly call wants to admit the math does not add up. The patterns repeat across $150M+ in managed ad spend.
Almost 20% of marketers say a data-driven strategy is one of their biggest challenges in 2026 per HubSpot's State of Marketing report. The monthly ROAS report from your agency sits right in the middle of that challenge. It is also where most of the inflation hides.
How attribution theatre actually works
The mechanic underneath the gap has 5 moving parts. Walk through them in order and the inflation stops being a mystery.
1. What "last-click attribution" means in plain language. Each ad platform credits the last ad clicked before a purchase. Meta credits the last Meta ad. Google credits the last Google ad. The platforms do not talk to each other. They report independently. Google's own attribution documentation defines last-click as "all credit for the conversion to the last-clicked ad." That is the default for almost every account.
2. How the overlap creates inflation. A customer sees a Meta ad on Monday. They do not buy. They see a Google ad on Friday. They click and buy. Meta reports 1 purchase, because its ad was in the journey. Google reports 1 purchase, because its ad was the last click. Two platforms. Two claims. One actual purchase.
Scale that up to a month. Meta claims 5,000 purchases. Google claims 2,000. Combined, the platforms report 7,000. Shopify shows 5,000. The 2,000 "missing" purchases are not missing. They are double-counted. The inflation is the overlap.
3. Why the platforms do not fix it. Each platform wants to look like the channel driving revenue. The bigger the claimed conversion count, the easier it is to justify the next budget increase. Meta has no incentive to admit Google also claimed the purchase. Google has no incentive to admit Meta did. The reporting model is built to flatter the seller of the ad inventory.
The platform layer is what makes the agency layer possible. For the structural mechanics of why platforms produce different numbers in the first place, see why your ad reports show 3 different numbers. To size the inflation on your own account in under a minute, use the attribution reconciliation calculator.
4. Why the agency does not fix it. The inflated combined number is what justifies the retainer's continued existence. If the agency reported Shopify revenue instead of platform-claimed revenue, the ROAS would drop from 3.8x to 2.2x overnight. The retainer would look harder to defend. Most agencies do not run that math on purpose.
Agencies sit comfortable behind inflated numbers. The credibility burden on agencies is far lower than on in-house operators or paid consultants. They can always blame the back-end, the product, or the market.
5. Why the founder does not catch it. Attribution windows, channel attribution, and UTM (Urchin Tracking Module) parameters are technical enough to make most operators defer to whoever sounds confident in the room. The agency sounds confident. The founder defers. The math stays unchecked for months.
The 5 signals your ROAS report is inflated
Pull these tonight. The work takes about 20 minutes. The findings will tell you the size of your overlap before the next agency call.
Start with the side-by-side. What the report says versus what your P&L can see.
| Metric | What the agency reports | What your P&L actually shows |
|---|---|---|
| ROAS | 3.8x to 4.2x | 2.0x to 2.5x |
| Combined platform purchases | 7,000 | 5,000 to 5,500 (Shopify total) |
| Implied revenue from spend | $100,000 | $50,000 to $62,500 |
| Cost per acquisition | $14 to $18 | $25 to $35 |
| Net contribution after ads | Strong | Break-even or marginal |
Now run the 5-signal check. Each signal can be verified in your own dashboards. No agency access required.
In one audit on a SaaS lead-gen brand spending $60K per month combined on Meta and Google, the agency's reported ROAS was 4.1x. The founder's P&L showed closer to 2.4x. The gap was 47% double-counting across the two platforms' last-click attribution. No fancy diagnostic. Just the sum of claimed conversions minus the Shopify total.
What to do instead of trusting the platform numbers
The fix is not a better attribution platform. The fix is a shift in which number you trust.
1. Use Shopify or your shopping cart as the source of truth for revenue. Whatever Shopify shows is what actually happened. Anything else is a claim. Shopify's own attribution documentation walks through how to pull the marketing-attributed sales view. That view is not perfect, but it lives next to the money. The platform reports do not.
2. Calculate blended ROAS, not platform-specific ROAS. Total ad spend across all platforms divided by total revenue from Shopify. This number cannot be inflated by attribution overlap. It is the only honest paid-channel number. The math behind real Google Ads cost per acquisition covers the same logic for CPA (cost per acquisition) and CPC (cost per click).
3. Run the diagnostic from the perspective of P&L, not the platform. At the current blended ROAS, what is the gross profit per dollar of ad spend, after returns, COGS (cost of goods sold), shipping, and overhead? That number determines whether ads are profitable. The platform ROAS is irrelevant to it. For the threshold by category, see what a good ROAS actually looks like by gross margin.
4. If the agency cannot or will not reconcile to Shopify, that itself is the finding. The technical work is straightforward. The unwillingness is what reveals the incentive misalignment. An honest agency hands over the raw data. A retainer-defending agency explains why the data does not matter.
5. Audit the post-click funnel. The post-click funnel is where the platform-reported ROAS reconciles to actual revenue. For the full audit on the most common reconciliation gap (the checkout), see the mobile-first CRO diagnostic.
How attribution theatre fits into the bigger pattern
Attribution theatre is one of three patterns I see consistently across $150M+ in managed ad spend. The other two are the free agency audit calibrated to sell, and the upstream structural decisions that cause the leaks the inflated ROAS hides. The Meta version of those structural leaks lives in the Meta audit method that catches the structural leaks behind the inflation. The Google version lives in the Google Ads audit method that surfaces these patterns.
The three patterns travel together. The free audit gets the agency in. The inflated ROAS report keeps them in. The structural leaks remain unfixed because fixing them would expose the inflation. That is the order of operations behind most $50K to $250K monthly ad budgets. They look stable in the agency dashboard and bleed in the bank account.
The opinion is uncomfortable. Most of the industry will not take it because most of the industry profits from the opposite position. I write it down because the founder paying the retainer is the one who needs to hear it.
Frequently asked questions
Common questions
About attribution and ROAS
Why does my agency's ROAS report not match my P&L?
Because the agency report sums platform-claimed revenue while your P&L sums actual revenue. Meta and Google both last-click-attribute every purchase that touched their platform. A customer who saw both ads gets claimed by both platforms. Your P&L only counts the purchase once. The gap between the agency number and the P&L number is the size of that double-counted overlap, usually 30 to 50 percent at $25K and above in combined monthly spend.
Is last-click attribution the industry standard? Why don't platforms just fix it?
Last-click is the default on Meta and Google, so yes, it is the standard. The platforms do not fix it because the overlap helps them. Every claimed conversion makes the platform look like the channel driving revenue, which justifies the next budget increase. Meta has no incentive to credit Google. Google has no incentive to credit Meta. The reporting model is built to flatter the seller of the ad inventory, not the founder paying the bill.
Can I just trust Shopify's attribution instead?
Shopify's attribution model is also imperfect, but it has one big advantage. It lives next to the actual purchase. The platform reports do not. Shopify's marketing attribution view will not match Meta or Google exactly, and that is the point. Use Shopify as the source of truth for revenue, then calculate blended ROAS (total ad spend across all platforms divided by Shopify revenue). That number is the one that cannot be inflated by overlap.
About BTB Audits
How does BTB Audits handle attribution differently?
Every BTB audit reconciles the platform-claimed numbers against the Shopify or shopping cart number. The first finding on most accounts is the size of the attribution overlap, expressed in dollars. The Free Quick Scan flags it from public data signals. The paid Forensic Report ($499) sizes it exactly using the founder's own dashboards. Either way, the reported ROAS is never taken at face value. It is reconciled to the bank account before any other recommendation gets made.
Will this work for me
What if my agency insists their reporting is right?
Ask one question. Will they export the raw click and conversion data so you can reconcile it yourself? A confident agency hands the data over within 48 hours. A defensive one explains why the export does not matter, why their methodology is different, or why you do not need to see the raw numbers. The resistance is the finding. The technical work is straightforward. The unwillingness reveals the incentive misalignment.
If your agency report and your P&L are telling different stories, attribution theatre is the most likely cause. The Free Quick Scan flags the size of your overlap before the next agency call.
If you don't have four to six hours, or you want a second pair of eyes that's managed $150M+ across Meta and Google, the Free Quick Scan is what I built for that. I'll record a private 5 to 7 minute Loom walking through the leaks I find on your account using public data only. You'll have it in 48 hours.
Get Your Free Quick Scan →Keep reading on agency reporting and the audit method
Aditya Chaturvedi is the founder of BTB Audits. He has managed $150M+ in ad spend across Meta and Google for DTC, SaaS, and lead-gen brands. The patterns in this post come from auditing accounts where the agency's monthly ROAS report and the founder's P&L told two different stories. Read more on the BTB Audits blog.