Home / Case studies

Case studies

Four tracking problems and how I solve them, step by step: the situation, the setup and how it is tested. These are implementation case studies built on test setups. Client results are added only when a client agrees to share them.

Start with this website

Everything here runs on the page you are reading. Open your browser console and type dataLayer, or check the site with Google Tag Assistant.

  • Consent Mode v2, denied by default, with a working cookie banner
  • Named events: book_call_click, whatsapp_click, cta_click, form_start, generate_lead, faq_open, consent_update
  • Click IDs and UTM values captured on landing and passed with the contact form, stored only with ad consent
  • Email hashed with SHA-256 in the browser before it reaches the dataLayer, ready for Enhanced Conversions
  • Fonts hosted on this site, so no third-party requests happen before consent
// Sent only after the form is accepted by the server dataLayer.push({ event: 'generate_lead', form_name: 'contact', business_type: 'Personal injury law firm', service_interest: 'Tracking audit and fix', lead_source: 'google', user_data: { sha256_email_address: 'b4c9a289…' } });

Personal injury firm: from call to signed case

  • Test setup, no client data
  • Google Ads
  • Call tracking
  • GTM
  • CRM
  • Offline conversions

A firm counts every call over 60 seconds as a conversion. Intake signs a fraction of those callers, and Google Ads keeps buying more calls like the ones that never become cases.

The setup

  • Calls from ads and website calls as separate conversion actions
  • gclid and UTM values saved in hidden form fields and with call records
  • Intake stages mapped to conversions: qualified, consultation, signed
  • Daily import from the CRM through Zapier, Make or a scheduled upload
  • Primary bidding goal moved to qualified leads once volume allows

How it is tested

  • A test call and a test form with a known gclid
  • The lead appears in the CRM with source fields filled
  • Upload diagnostics in Google Ads show matched clicks
  • Payloads checked: no case details leave the firm

What the firm gets

  • Tracking plan and conversion action map
  • Looker Studio dashboard from spend to signed case
  • Handover document and video

Service business on WordPress: Consent Mode v2 and Enhanced Conversions

  • Test setup, no client data
  • WordPress
  • GTM
  • GA4
  • Google Ads
  • Consent Mode v2

Form leads are counted twice in GA4, Google Ads shows fewer than the inbox, and the cookie banner is not connected to Google tags at all.

The setup

  • Cookie banner connected to Consent Mode v2 defaults and updates
  • One generate_lead event on a confirmed submit, not on thank-you page load
  • GA4 key event and Google Ads conversion from the same event
  • Enhanced Conversions for leads with a hashed email
  • Phone and WhatsApp clicks as secondary conversions

How it is tested

  • Accept, reject and partial consent checked in Tag Assistant
  • Submit and reload: the lead fires once
  • Enhanced Conversions diagnostics in Google Ads
  • Event parameters checked in GA4 DebugView

What the business gets

  • Clean GTM container with naming conventions
  • Lead counts that match the inbox
  • Short document of every event and tag

Shopify store: Meta Pixel and Conversions API without double counting

  • Test setup, no client data
  • Shopify
  • Customer Events
  • Meta CAPI
  • Stape

Meta reports more purchases than Shopify, because the pixel and a server integration both send Purchase without a shared event ID.

The setup

  • Shopify Customer Events pushes standard ecommerce events
  • One event_id shared by the browser and server event
  • Server events through server-side GTM on Stape with the Meta CAPI tag
  • value, currency and content_ids taken from checkout data
  • Advanced matching with hashed customer data where consent allows

How it is tested

  • Test purchase in Events Manager shows the events deduplicated
  • Order value in Meta matches Shopify
  • Event match quality reviewed for Purchase

What the store gets

  • Purchase counts that match Shopify
  • Server events that keep working when the theme changes
  • Handover video

Server-side GTM on your own subdomain

  • Test setup, no client data
  • sGTM
  • Stape or Cloud Run
  • DNS
  • GA4

Tags run only in the browser, the container sits on a vendor domain, and nobody is sure who owns the hosting account.

The setup

  • Server container created in your own GTM account
  • Hosting on Stape or Cloud Run, billed to you
  • Custom subdomain such as sgtm.yoursite.com with DNS and SSL
  • GA4 client, then Google Ads and Meta tags server-side
  • Separate preview server for debugging

How it is tested

  • Network tab shows requests to your subdomain
  • Server preview shows each incoming and outgoing request
  • GA4 realtime and platform diagnostics confirm single events

What you get

  • Infrastructure you own and can hand to any specialist
  • Monitoring notes and a cost estimate for your traffic

Want one of these built for you?

Tell me what you use today. I will say which blueprint fits and what it involves.