Skip to content

00   The Tracking Stack

Eight layers, in order. How Shopify brands should be wired.

Every home and furniture brand I audit has a tracking problem before it has a media buying problem. The two compound — bad data leads to bad bids leads to wasted spend leads to a founder who thinks the channel is broken. This is the architecture I rebuild every account to. Read it once, share it with whoever runs your tracking, and we can have a real conversation about what is leaking.

  • 8 Layers, in order
  • ~15% Conversions lost without server-side
  • 30-50% Meta ROAS inflation without dedupe
  • Mon Written summary, every week

01   The store

Shopify, or whatever runs the transaction. The source of truth.

Everything else is downstream of what Shopify says happened. Orders, refunds, line items, customer identifiers. Before a single conversion fires, get the storefront emitting clean data. That means a properly configured Shopify Customer Events pixel, the post-purchase order data exposed to GTM, and the email and phone hashed and ready for downstream platforms.

Components

  • Shopify Customer Events pixel (sandboxed, no third-party tags)
  • Order data exposed to dataLayer post-purchase
  • Email and phone SHA-256 hashed for enhanced conversions and CAPI

02   The container

GTM web container. The traffic cop, not the storefront.

The GTM web container is where everything else lives. Not the Shopify code editor. Not hard-coded in theme.liquid. The container is the single deploy surface so you can roll back any tag without touching the store. Lock down trigger conditions to prevent the standard mistake of firing purchase events on cart pages.

Components

  • One web container, owned by the founder, not the agency
  • Triggers gated on actual server confirmations, not URL path
  • Versioned, with a working preview mode before every publish

03   Server-side

A GTM server container. Where it earns its keep is iOS, ITP, and the long tail.

Server-side GTM is not optional in 2026. Safari and iOS strip client-side cookies, ad blockers eat client-side beacons, and conversion APIs (Meta CAPI, Google Ads enhanced conversions for leads) prefer server signals anyway. Run a server container on a custom subdomain. Forward purchase events from the web container to the server, then fan out to Google, Meta, GA4 from there.

Components

  • GTM server container on a custom subdomain (e.g. metrics.yourbrand.com)
  • Web container forwards purchase events to server
  • Server container fans out to Google Ads, Meta CAPI, GA4

04   GA4

Analytics, not attribution. Stop trying to make GA4 your single source of truth.

GA4 is for behavioral analytics: which pages lead to add-to-cart, which campaigns drive sessions that convert, which products correlate with returning customers. It is not the place to grade ad performance against Shopify revenue — those numbers will never agree, because GA4 sessionizes and Shopify just counts orders. Wire GA4 cleanly, then judge ad performance from inside the ad platforms, not from GA4 reports.

Components

  • Purchase event de-duplicated between web and server
  • Enhanced ecommerce items array passed cleanly
  • Custom dimensions for customer type (new vs returning)
  • GA4 ↔ Google Ads link, but for audience export only

05   Google Ads

Conversion imports, enhanced conversions, the right value model.

Google Ads gets its conversion data from one place: the server-side container, via the conversion API. Not from GA4 imports, which lag and lose ~15 percent of conversions to attribution model differences. Enhanced conversions on every conversion action. Conversion value set to gross revenue minus discounts and shipping, not order total. One primary purchase conversion, everything else set to secondary.

Components

  • Server-side conversion API as primary source
  • Enhanced conversions on every action (purchase, lead, etc.)
  • Conversion value = gross revenue minus discounts and shipping
  • One primary purchase, all others set to secondary

06   Meta

CAPI, deduplication, and a real read on incrementality.

Meta runs on the same server-side spine. Conversions API fires every event. Browser pixel fires the same events with an event_id so Meta can dedupe them. Without dedup, Meta sees double conversions and inflates ROAS by 30-50 percent — the most common reason Meta reports look great and Shopify revenue does not move. Layer in lift studies for the incrementality read once the dedupe is clean.

Components

  • CAPI gateway via server container
  • Browser pixel and CAPI share event_id for dedupe
  • Server events include hashed email and phone
  • Lift study every quarter at scale

07   Email and SMS

Klaviyo, Postscript. Identity, not just sends.

Email and SMS platforms are not just send engines — they are the cleanest first-party identity graph you have. Hashed email and phone from Klaviyo and Postscript feed back into Meta CAPI, Google enhanced conversions for leads, and customer lists for both. The most underused piece of the stack at most home and furniture brands I audit.

Components

  • Klaviyo connected to Shopify, segments synced to Meta and Google
  • Customer match lists kept fresh (weekly minimum)
  • Hashed identity feeds enhanced conversions and CAPI

08   Reporting

A weekly written summary. Not a real-time dashboard.

The last layer is not a tool — it is a discipline. A real-time dashboard nobody opens is worse than a written Monday summary that gets read. Pull the numbers that matter (spend, revenue, ROAS, new vs returning, top campaigns), write one paragraph each on what changed and why, and ship it. Looker Studio or a Notion doc — the surface matters less than the rhythm.

Components

  • Monday written summary: numbers + interpretation
  • Looker Studio (or equivalent) for ad-hoc questions
  • Quarterly re-plan against the original ninety-day plan

09   A note on what this is

Opinionated, not universal.

This is the architecture I run for home and furniture brands on Shopify spending between $25k and $500k a month on paid acquisition. Below $25k, the server-side investment is hard to justify. Above $500k, you start needing pieces I left off this page (warehouse-level customer data platforms, MMM, dedicated incrementality pipelines).

If you are running this stack and it is working: leave it alone. If you are not, this is the order I would rebuild. Tracking first, ads second, reporting last. Nothing on this page is theoretical. Every component is in production at brands I have worked with this quarter.

10   Want this rebuilt for your account?

Same person on the call as
on the keyboard.

Thirty minutes on the phone. I walk in with a tracking audit and a sharp read on where the leak is.

Book a Call