Tracking · Tracking setup · Setup record with validated screens

Server-side tracking: one counted stream instead of double counting

The screens document a two-container setup: web GTM plus server-side GTM on Stape, feeding GA4, the Meta Conversions API, and 5 Google Ads conversion actions from one counted stream.

Measurement path2 containers, 3 platformsWeb GTM plus server GTM on Stape, feeding GA4, Meta, and Google Ads.
Double countingNoneShared event IDs, checked in Meta Events Manager.
RevenueNot claimedThis is a setup record, not a return record. The next step is the client confirming which trials became members.

Client and starting point

What needed to change.

A fitness and self-defense studio could not tell which ads brought in new members. Browser-only pixels were losing data to ad blockers. Under Safari's tracking rules, a cookie can also expire in as little as 7 days, which broke the link for anyone who clicked an ad and came back later to book a trial.

Starting point: Browser-only pixels losing conversions to ad blockers and 7-day cookie expiry

When the numbers come from: Setup and validation record

The problem

What the campaign needed.

Adding a server feed the wrong way can count each event twice, once from the browser and once from the server. Without a shared event ID, more data just means double counting. The build had to prove it was not double counting.

The approach

Work applied to the record.

  • Defined a clean data layer for every meaningful action: page views, form starts, contact form submits, free-trial schedules, and email clicks
  • Set up a server-side GTM container on Stape to receive events first-party and send them out to each platform
  • Gave every event a shared ID so the browser pixel and the server event merge instead of double counting, confirmed in Meta's Events Manager
  • Mapped 5 Google Ads conversion actions: lead form, phone call, contact, appointment booking, and direction requests, with server-side tags carrying the highest-value events
  • Checked the full path in GTM preview and GA4 DebugView before handoff

Timeline

How the work happened.

01

Data layer and web container

Consistent event names, including generate_lead and freetrial_scheduled, captured with user-provided data.

02

Server container on Stape

Events received first-party and sent to GA4, Meta, and Google Ads from a domain the studio controls.

03

Validation

GTM preview, GA4 DebugView, and Meta Events Manager screens confirm events firing, matching, and not double counting.

Source screenshots

The screens behind the numbers.

Screens are shown in their original size. Each caption says what the screen shows, and what it does not prove.

Ledger position

The honest conclusion from this record.

The Profit Ledger

A monthly answer, not an activity report.

Monthly format
Money outNot applicableCampaign spend, recorded to the dollar.
Money inNot claimedSetup record with validated screens
VerdictThe measurement path is documented, validated, and free of double counting. Business return needs the client confirming which leads became members, which this foundation now makes possible.The decision is written before the next dollar is committed.

Each case study keeps the proof level of its source screens. If a record stops at a lead, this page says so.

Every attribution claim on this page was counted under the attribution standard.

Related services & industries

Where this work applies.

Related services

More records

Keep reading the case studies.

Cleaning · Lead record from Google Ads

3 to 51 reported leads, $149.00 to $27.89 per lead

The account went from 3 reported leads at $149.00 each to 51 reported leads at $27.89 each. That is an 81% drop in cost per lead, across two rebuild months.

Every number here comes from the Google Ads screens. They show clicks, reported leads, and cost per lead. The client did not confirm which leads became booked jobs or what those jobs were worth, so I claim no revenue and no return. A lead is not a deposit.

Read the full record

Cleaning · Lead record from Google Ads

72 reported leads at $12.03 CPA, target was $15.00

The account reported 72 leads at $12.03 each in a 31-day window. That is 20% under the $15.00 target the client set as the most a lead could cost.

This is a lead-stage record, not a revenue claim. The $15.00 target came from the client's own margin math. The screens do not show which leads became booked cleans.

Read the full record

Start here

Three numbers are enough to start.

  1. What the last marketing attempt cost, all-in
  2. What a booked job is usually worth
  3. How many jobs you can take on now

Send what you have. A missing number is not a blocker. Working it out is part of the audit. No contracts, ever. I reply within 12 hours.

Send the numbers

What is happening with your advertising?

Spend, leads, and what you suspect is going wrong. I reply within 12 hours.

No contracts. I reply within 12 hours.

Start with a number