Why Agency-Reported ROI Differs From In-House ROI
Agency dashboards almost always show a higher ROI than your in-house calculator. Four mechanisms — excluded fees, platform attribution, view-through windows, and revenue source — explain the gap and how to reconcile it.
Quick answer
An agency's reported ROI typically exceeds your in-house figure by 30-120% because the agency report (1) excludes management fees and creative costs, (2) uses the ad platform's last-click + view-through attribution, (3) counts 7-day view-through and 28-day click windows Shopify never sees, and (4) pulls revenue from pixel-fired conversions rather than reconciled order data. Reconcile by stripping view-through, aligning the attribution window, adding fees to spend, and using Shopify orders as the revenue source of truth.
Agency-vs-In-House ROI Discrepancy
The systematic gap between the ROI a media agency reports and the ROI an in-house finance or marketing team calculates from order data.
Agency-vs-in-house ROI discrepancy is the structural mismatch between the return-on-investment number a paid media agency shows in its monthly report and the number an in-house team produces from a Marketing ROI Calculator fed by Shopify or ERP data. The gap is rarely fraud — it's the predictable output of four design choices: which costs count as spend, which conversions get credited to ads, how long the attribution window stays open, and whether revenue is read from the ad pixel or the order ledger. Most discrepancies fall in the 30-120% range and can be reconciled line-by-line once you know where to look.
If your Meta agency reports 4.2x ROAS and your finance team's spreadsheet says 1.9x, neither side is necessarily wrong. They're measuring different things with different inputs.
Why the gap exists: four mechanisms
Mechanism one is cost scope. Agency reports almost always show media spend only — the €40,000 you paid Meta last month. They exclude the agency retainer (€6,000), creative production (€3,500), and the platform fee on your reporting tool. In-house calculators include all of it.
Mechanism two is attribution model. Meta Ads Manager defaults to a 7-day-click + 1-day-view model that credits any sale within seven days of an ad click — and any sale within one day of a mere ad impression — to the campaign. Your Shopify dashboard, by contrast, runs on last-non-direct-click via UTMs.
Mechanism three is the view-through window. A user scrolls past your video ad, doesn't click, then buys 18 hours later from a Google search. Meta claims that order. Shopify attributes it to organic search. Same order, two channels, double-counted across the org.
Mechanism four is revenue source. The Meta pixel fires on the order confirmation page and reports gross order value including tax, shipping, and orders that get refunded or cancelled. Your finance ROI is net of refunds, taxes, and shipping cost — often 15-25% lower per order before any attribution disagreement enters the picture.
Where double-counting hides
Sum the reported revenue across Meta, Google, TikTok, and Klaviyo dashboards for a single month, then compare to total Shopify revenue. If the channel sum exceeds Shopify by more than 20%, view-through and overlapping attribution windows are inflating every channel's ROI — including the agency's.
How to detect which mechanism is driving your gap
Start with the cost reconciliation. Pull the agency invoice and add retainer, creative, and any tech fees back into the spend column. On a €40k media budget with a €6k retainer and €3.5k creative, your true spend is €49.5k — 24% higher. ROAS drops proportionally before you touch attribution.
Next, ask the agency to re-export the same period with view-through stripped (click-only attribution, 7-day window). On a typical apparel store, view-through accounts for 15-35% of Meta-attributed revenue. That single setting change usually closes a third of the gap.
Then compare the agency's reported order count to Shopify orders tagged with Meta UTMs for the same window. If the agency reports 1,240 orders and Shopify sees 890 Meta-tagged orders, you've quantified the attribution overlap directly.
How to fix it: reconciliation playbook
Agree one source of truth for revenue with the agency in writing: Shopify net revenue (after refunds, ex-tax, ex-shipping) for any order tagged with the channel's UTM. The pixel becomes a campaign-optimisation signal, not the billing yardstick.
Standardise the attribution window to 7-day-click, no view-through, across every channel and every dashboard. This is the same model behind the Marketing ROI Calculator and aligns with how most finance teams want to see channel performance. Pair it with a Blended vs Channel ROAS view so you can sanity-check channel totals against blended performance every month.
Finally, build one reconciled ROI line per channel that includes agency fees in spend and uses Shopify net revenue as the numerator. Run it alongside the agency's native report — not instead of it. The agency keeps optimising on platform signals; you make budget decisions on the reconciled number.
Realistic post-reconciliation outcome
A €2M-revenue apparel store reconciled a Meta agency reporting 4.2x ROAS down to 2.1x reconciled ROI — without firing the agency or cutting budget. The agency kept their pixel-based optimisation; the founder made reinvestment decisions on the 2.1x figure. Both numbers were correct for their purpose.
When the gap signals a real problem
Most gaps are mechanical. But a few patterns deserve a harder conversation. If the agency refuses to re-export with view-through stripped, or can't produce a UTM-tagged order list matching Shopify, the reporting setup itself is the problem — and you're flying blind regardless of who's right about ROI.
Also watch for branded search cannibalisation: if the agency runs Google Ads on your brand terms, they'll claim orders that organic would have captured for free. Pause brand bidding for two weeks and compare Shopify revenue. If total revenue holds steady, the agency's Google ROI was largely fictional incremental — a finding the in-house calculator will surface immediately.
Reconciling agency and in-house ROI
Four reasons stack: the agency excludes its fees and creative costs from spend, uses platform-native attribution with view-through, counts gross pixel revenue including tax and shipping, and double-counts orders that other channels also claim. Each effect adds 10-30% to reported ROAS independently.
Use both for different jobs. The agency dashboard optimises campaign bids and creative — it needs the pixel signal. The in-house Marketing ROI Calculator decides budget allocation across channels — it needs reconciled order data. Mixing the two purposes is what creates the conflict.
7-day-click, no view-through, is the most common middle ground. It captures most considered-purchase journeys without crediting passive impressions. For impulse categories (under €30 AOV) drop to 1-day-click; for high-AOV (€200+) consider 14-day-click.
After stripping view-through, adding fees to spend, and using Shopify net revenue, agency and in-house ROI should agree within 10-15%. Residual gap usually comes from cross-channel overlap (Meta and Google claiming the same order), which Blended vs Channel ROAS helps quantify.
Yes — for upper-funnel video and prospecting campaigns where clicks are rare but impression frequency drives consideration. Keep view-through visible to the agency for optimisation but exclude it from the ROI figure you report to finance.
Marketing spend. The fee exists because of the media activity; without the ads, there's no retainer. Excluding fees is the single biggest reason agency-reported ROAS overstates actual return — typically 15-25% inflation on its own.
Lock the definitions in the contract: which costs count as spend, which attribution window applies, which revenue figure is the numerator, and which dashboard is the system of record. Doing this in week one prevents the quarterly fight in month six.
Marketing Mix Modelling and incrementality testing produce more defensible ROI than platform-native attribution, but they still need cost inputs to include fees and revenue inputs to match the ledger. The same four mechanisms apply — just at the tool level rather than the pixel level.
Historical reconciliation is possible if the agency can re-export with adjusted attribution settings and you have UTM-tagged Shopify orders for the period. Most platforms preserve 13-25 months of data. Anything older usually has to be left as-is and replaced with a forward-looking standard.
It's the neutral reference number both sides reconcile to. By codifying spend (incl. fees), attribution window, and revenue source in one formula, it removes the per-meeting debate about which figure is real. The agency's report becomes an input, not the verdict.
Track CAC, channels, and funnel conversion in one place
Metricuno connects ad spend, funnel events, and revenue so you can see CAC by channel, cohort, and campaign — without stitching together five tools.