Tracking that disagrees with your order table is costing you money right now. MESSAGE ME ON WHATSAPP

CASE_007 / SHOPIFY / UK / SKINCAREFIXED

UK Shopify skincare brand

A Shopify brand selling into the UK and EU had two checkout paths and no way to tell which one a given order came through. GA4 revenue ran consistently below the Shopify order table, and nobody could say by how much.

SGTMMETA CAPICONSENT MODE V2BIGQUERY
BEFORE61%
AFTER98%
PURCHASE TRACKING ACCURACY · 90-DAY WINDOW
+37ptsACCURACY
0DUPLICATE PURCHASES
7.2/10META MATCH QUALITY
14daysTO FULL REBUILD

What was broken

The theme's default checkout fired the purchase event on the thank-you page. A second, app-driven checkout path never fired it at all, so an entire segment of orders was invisible in GA4.

Where the event did fire, a thank-you page refresh fired it again. The same order counted two, sometimes three times.

The consent banner was set to deny-by-default with no Consent Mode v2 configuration, so tags for non-consenting visitors were blocked outright rather than sending cookieless pings. That removed a further slice of purchases with no error anywhere to show for it.

What I changed

I stood up a server-side GTM container on a subdomain of the client's own domain, so events are first-party and survive ad blockers and ITP cookie capping.

Purchase events were keyed on the Shopify order ID as the event ID, which makes a repeat fire a duplicate the platforms can discard rather than a second sale.

Consent Mode v2 was implemented properly, so denied visitors still contribute modelled conversions instead of disappearing.

Every event was mirrored into BigQuery so the client can run the reconciliation themselves without asking me.

GA4 DebugView showing a view_item event firing once as a product page renders.
GA4 DebugView showing begin_checkout firing as checkout starts, with the running event counts alongside.
GA4 DebugView showing add_shipping_info firing when a shipping method is selected.

How it was verified

For 90 days after go-live, GA4 purchases were reconciled against the Shopify order export daily. Sign-off was not a screenshot of a dashboard. It was the two tables agreeing within a tolerance the client set.

GA4 DebugView showing a purchase and an add_payment_info event firing once each on a live session, beside the running event counts for the last 30 minutes.
READ THE PLAN BEHIND THIS WORK →← ALL CASE FILES