That's a Director of Paid Media at a global eCommerce brand, describing a variance between client-side and server-side purchase events on a major ads platform that had been growing for months.
Server-side numbers matched Shopify closely. Client-side numbers diverged — minimally at first, then ballooning over months. The paid media team grew weary of the signal infrastructure underpinning thousands of dollars of weekly ad spend.
The investigation
I started where anyone would: testing the client- and server-side tagging setups. Console and network logs from purchase events. Then I drew several hypotheses and examined each thoroughly — Enhanced Conversions misconfiguration, ID parameter deduplication failure, platform settings errors.
Each came back with disconfirmatory evidence.
The culprit
Google's modeling algorithms, trained on incomplete inputs. Too much "Direct / (not set)" traffic feeding attribution models — like pine needles feeding wildfire. The tracking infrastructure was intact. State of the art, even. The payloads checked out. The server-side setup withstood scrutiny. But incomplete attribution data upstream led to rampant purchase event inflation downstream. Google's models filled the gaps with noise.
The result: sleepless nights and hesitance to invest further in the platform.
The fix
Attribution involves enormous coordinated effort, and creating anything coherent with GA4 is no small feat. Fixing attribution infrastructure also takes time. So while addressing the root cause, I implemented a workaround: since server-side signals were sound, I built custom events that allowed more precise purchase measurement — bypassing the faulty client-side noise entirely. Confidence crept back in.
Three takeaways
The happy ending? A new suite of server-side signals feeding campaigns accurate and reliable data — and a roadmap to implement even more complete event capture.
This is what signal quality looks like: not just whether your tags fire, but whether the data feeding your AI-driven optimization is trustworthy end to end.