Tracking fixes, measured by the number that moved.
Every case here started with an ad platform reporting one figure and the back-end showing another. We fix the tracking, then publish what the platform reported afterwards. Named clients, reported figures, no composites.
VäxterOnline, days after moving tracking server-side. Same ads, same budget.
Meta was reporting × on campaigns the store knew were profitable.
The number was not wrong because the ads were bad. It was wrong because Meta was only seeing part of the purchases. Here is what was breaking, what we changed and what the platform reported days later.
- Client
- VäxterOnline
- Sector
- Online plant shop
- Platform
- WooCommerce
- Market
- Sweden
- Ad channels
- Meta, Google Ads
- Delivered in
- days
The problem
- Purchase events fired in the browser only, so ad blockers and iOS privacy features removed a share of them before Meta or GA4 received anything.
- The consent banner and the tags raced each other on page load. On some sessions the purchase tag fired before consent was read and was dropped.
- The Klarna checkout redirect meant the thank-you page did not always load in a way the existing tags could rely on.
- GA4, Google Ads and Meta each counted purchases their own way, so there was no single number the team could trust.
- Campaign bidding was learning from the incomplete signal, so budget went to the audiences Meta could see rather than the ones that bought.
Reported ROAS in Meta Ads Manager, day 0 vs day
Same ads, same budget, same store. Server-side GTM, Meta Conversions API with deduplication, consent fix, data layer rebuild.
What we did
Audited the purchase path end to end
We traced every purchase event from the WooCommerce data layer through GTM to GA4, Google Ads and Meta, including the Klarna redirect, and logged where events were duplicated, blocked or never sent.
Fixed consent before touching the tags
We found the race condition between the consent banner and tag firing and fixed it, so consented purchases are always sent and non-consented ones are always withheld. Consent Mode v2 signals were set correctly for both states.
Moved collection to a first-party server container
Server-side GTM now runs on a subdomain of vaxteronline.se that the store controls. Events leave the browser to a first-party endpoint, which is what ad blockers and iOS restrictions were cutting off.
Connected Meta Conversions API with deduplication
Purchases are sent from the server with the same event ID as the browser pixel, so Meta receives every purchase once, including the ones the pixel never fires for.
Rebuilt the data layer as one source of truth
GA4, Google Ads and Meta now read from the same purchase object with the same order ID, value and currency. When the three platforms differ, the difference is explainable.
Ran browser and server in parallel, then verified
We compared browser events, server events and WooCommerce orders before switching bidding over, and handed the store documentation of every tag, trigger and destination.
The result
Within days of go-live, Meta's reported ROAS went from × to ×. The difference is that Meta could finally see what was being bought and optimise towards it.
How to read this number
"Reported ROAS" is what Meta Ads Manager shows. Part of the increase is purchases Meta was already generating but could not see; part is the algorithm bidding better once it received complete purchase signals. Both are real money for the store, but only the second one is new revenue. We publish the reported figure because it is the number the store's team looks at every morning and the one that decides whether budget scales.
What clients say after the fix
Verified reviews on Trustpilot. We link to the source so you can read every one.
"Expertly helped by Jerry. Fast, critical, a true specialist. Our tracking is back on point. Finally we can see where clients are coming from and steer on real leads and data."
"I'd been searching for the right GTM setup for ages. Thanks to Jerry, it's finally falling into place. No fuss, just someone who knows what he's talking about and actually moves you forward."
Want to see what your ad platforms are not seeing?
Book a 30-minute tracking call. We look at your GTM, GA4 and consent setup together and tell you where conversions are being lost, before any proposal.

