Spec & Playbook · Google Ads

Feeding Google Ads our conversions — without GTM, forever

Why the experiment campaign is barely spending, what we're building to fix it, and the standing process that makes every future A/B test "just work" for conversion tracking.

Prepared 23 July 2026 · Data pulled live from the site database and the Google Ads account

TL;DR

Google throttles spend on any campaign where it can't see conversions happening. The current A/B test sends ad clicks to a pay-first funnel whose real conversion — an online payment — is invisible to Google, so the £100/day campaign only spends £25–45 and traffic drips through.

The fix isn't Google Tag Manager. Our own site already records every payment, every booked call, and every form completion, tagged with the exact ad-click ID Google needs — about 350 payments worth £44k in the last 30 days. We're going to build a small robot inside our attribution plugin that sends these to Google automatically, every hour, via Google's official API. One day's build. After that, any future experiment — whatever landing pages it uses — gets conversion tracking for free, because we track the moment of payment on the server, not the pages in between.

1 · What's actually going on

We run two ad campaigns pointing at two different funnels:

"Search – Find a Therapist"

£500/day · the classic funnel
  • Ad click → therapist-match-a
  • Fill in the matching form
  • Land on the booking page
  • Book a placement call
Google sees the form completion (≈26/day) → bids confidently → spends the budget. Working fine.

"Search – Private Therapist"

£100/day · the live A/B test (pay-first)
  • Ad click → therapist-match-b
  • Fill in the same matching form
  • Land on one of two test pages: your single match, or the placement offer
  • Pay online for the first session
Google sees only ≈3 form completions/day and never sees the payments → bids timidly → spends £25–45 of £100. This is the "drip".

The old conversion tracking was built around the classic funnel. The test funnel's true success moment — someone paying — happens on a page Google's tracking has never heard of. Google isn't refusing to spend; it's being sensibly cautious about a funnel that, from where it sits, never converts.

2 · The good news: we already have everything Google wants

When someone clicks an ad, Google stamps the visit with a click ID. Our attribution plugin captures that stamp and keeps it with the person as they move through the site. When they convert, we record the event — server-side, with the click ID attached. Last 30 days:

Event we recordCountWith a Google click IDValue recorded
Form completions970861 (89%)
Placement calls booked487421 (86%)
Online payments451353 (78%)£44,246

To report a conversion to Google you need exactly three things: the click ID, the time it happened, and (ideally) the value. We have all three, for every event, sitting in our database. On top of that, the Google Ads account already contains two upload-type conversion actions ("First Booking" and "LUFT") that were created for exactly this purpose and have never been fed. And the attribution plugin already has working, authorised access to the Google Ads API — it uses it daily to pull reports. Nothing new needs setting up on Google's side, and nobody needs to touch Google Tag Manager.

3 · What we're building

A small automatic uploader inside the attribution plugin:

Estimated effort: about one day, including tests, built test-first.

Which event feeds which Google conversion

This is the mental model to keep: different funnels end in different kinds of conversion, and each kind has its own destination in Google Ads.

How the funnel endsOur eventGoes to (in Google Ads)Role for bidding
They complete the matching formform_submission"Therapist Match Form Completed" — already tracked by the website tag todayPrimary (already is)
They book a placement callbooking"LUFT (upload)" — via the new uploaderSecondary signal
They pay online (the pay-first test pages, or any checkout)purchase, with £ value"First Booking (upload)" — via the new uploaderPrimary — this is the money signal

4 · The playbook for every future A/B test

The reason this fixes the problem permanently: we record the conversion at the moment it happens — a payment taken, a call booked, a form completed — not by watching which page someone lands on. The pages in between can change every week and nothing breaks. So for experiment number 3, 4, 5…:

  1. Design the funnel freely. Any entry page, any form config, any landing pages for control and variant. Conversion tracking puts zero constraints on the design. no work
  2. Ask one question: how does this funnel end? If the answer is a payment through our checkout, a placement-call booking, or a form completion — it's already covered. Launch the test; conversions flow to Google automatically, correctly split between the campaigns whose ads were clicked. automatic
  3. Only if the funnel ends in a genuinely new kind of action (say, a callback request through some new widget) do we do anything: log it as a new event type in the attribution plugin and create a matching upload conversion in Google Ads — which we can also do through the API. Roughly half a day, once per new kind of conversion, then it's covered forever too. small dev task
The habit to form: when planning a new experiment, the only conversion-tracking question anyone needs to ask is "does this funnel end in a payment, a booking, or a form?" If yes — and it almost always will be — there is nothing to set up, nobody to wait for, and no GTM.

5 · Things worth knowing before we switch it on

6 · Next steps

  1. You approve this spec (and give the ads guy a heads-up).
  2. We build the uploader in the attribution plugin (~1 day, test-first) and verify uploads against a small batch first.
  3. Backfill the full 90-day window of payments and bookings.
  4. Sanity-check: numbers in the Google Ads interface match our database, and the "Search – Private Therapist" campaign's spend starts climbing over the following fortnight.