up from 1.7
recovered
unlocked
Their data looked fine. Their decisions were not.
The agency came to us with a problem they couldn't resolve internally: platform numbers and back-end numbers told different stories. Meta reported a 3.0 ROAS. The actual back-end consistently indicated 4.0. The gap had been there for months.
They weren't missing a few events here and there. They were systematically underreporting to ad platforms, meaning every automated bidding decision was working from a distorted picture of what was actually driving revenue.
-
×25% of purchase events lost to ad blockers, concentrated in the highest-value customer segment
-
×Meta and Google optimising on artificially low conversion signals
-
×No Meta Conversions API in place; relying entirely on the browser-based pixel
-
×Budget decisions constrained by fear of scaling on unreliable data
A server-side setup built around their data pipeline, not a template.
We audited the full tracking architecture first. Once we understood exactly where events were dropping, we built a server-side GTM implementation designed around their specific stack and campaign structure.
-
GTM Audit Mapped every tag, trigger, and variable. Identified duplicate events, missing data layer pushes, and the precise points where ad blocker interference was occurring.
-
Server-Side GTM Container Deployed a server-side container on a first-party subdomain. Events now route through infrastructure the client controls, bypassing browser-level blocking entirely.
-
Meta Conversions API + Deduplication Implemented Meta CAPI alongside the browser pixel with proper event deduplication. Both signals reach Meta; no double-counting, no gaps.
-
Clean Data Layer Architecture Rebuilt the data layer to carry consistent, complete event payloads. GA4, Google Ads, and Meta now receive the same source of truth.
Better data. Better decisions. Better returns.
Within 30 days of go-live, the improvement was measurable across every platform. The campaigns stayed the same. The data quality changed.
Suspect your tracking has the same gaps?
A free audit takes 30 minutes. You'll walk away knowing exactly where you're losing data and what it's costing you.

