The problem with platform-reported numbers
Every ad platform reports the conversions it can claim credit for. Add those numbers together and most accounts report between 130% and 200% of actual revenue.
That is not fraud. It is modelling, and each platform models in its own favour. The moment budget decisions rest on those numbers, you are optimising toward whichever platform is most generous with attribution.
Layer one: server-side event collection
Browser-based tags lose between 20% and 40% of events to consent, blockers and iOS restrictions. Moving collection server-side recovers most of that, and gives you one canonical event stream you own rather than five vendor copies.
Every event carries a stable identifier, a timestamp and a source. That is all you need to reconstruct almost any model later.
Layer two: CRM as the source of truth
Revenue is recognised in the CRM or the finance system, not in an ad platform. Pushing closed-won values back to the platforms via offline conversion import means bidding optimises toward money instead of form fills.
This one change usually moves cost per qualified lead more than any campaign restructure.
Layer three: incrementality testing
Attribution assigns credit. Incrementality measures cause. Geo holdouts and scheduled pauses answer the only question that matters: what would have happened without this spend?
We run one holdout per quarter per major channel. It is uncomfortable and it is the most valuable line in the reporting pack.
What to do first
Start with the CRM connection. Server-side collection is more work and less immediately valuable. Once real revenue is flowing back into the platforms, everything downstream gets easier.
