Case Study: Checkout Conversion Tracking Rebuild

Two years of conversion data, none of it real: rebuilding purchase tracking for an airport parking operator

Checkout Tracking Server-Side Google Ads GA4 & GTM

The short version

An airport parking operator had been running Google Ads for nearly four years. The account reported 17,359 conversions across that period. The business took roughly 4,500 bookings.

Nothing was broken in an obvious way. Tags fired, numbers appeared in reports, campaigns ran. The account had simply never measured a booking, and every automated bidding decision made in that time had been optimised against something else entirely.

The fix took a fortnight of evenings. What it produced was not better performance in the short term. It was the first honest number the account had ever had.

The situation

The client sells off-airport parking: customers leave a car at a site near the airport, take a private transfer to the terminal, and collect on return. Bookings run through a WordPress plugin with its own checkout flow.

They came to me with a narrower question, about whether their advertising was working. Within an hour of getting access it was clear that question could not be answered with the data available, which is a different and more useful finding.

Three things were true at once:

The conversion action counted page views. A "contact" goal had been configured to fire on any URL containing the string contact. That included the contact page itself. Anyone landing on it counted as an enquiry.

Purchase data did not exist. There was no conversion action tied to a completed booking. Not misconfigured. Absent.

Bidding was set to maximise conversion value. Against actions that had no value attached, and no relationship to revenue.

The result was a bid strategy pointed at page views, running for two years, doing exactly what it had been told to do.

Why nobody had caught it

This is the part worth dwelling on, because it is the common case rather than the unusual one.

The account did not look broken. Conversions appeared. Cost per conversion was calculable. Reports rendered. Somebody looking at a dashboard would have seen numbers moving in ways that could be discussed in a meeting.

Two specific things hid the problem:

Automated campaign types flattered the figures. A Smart campaign and a Performance Max campaign, both long since paused, had between them produced 85% of all recorded conversions on 21% of the spend. One of them reported a 61% conversion rate. Those figures were never queried because a high number in a conversion column does not prompt investigation the way a low one does.

The interface encourages the misreading. In the Google Ads mobile app, the tile is labelled Purchases/Sales and displays a figure with no currency symbol. The client, reasonably, read 565 as 565 sales. It was £564.73 of booking value from four bookings. When a person misreads a number, it is worth checking whether the label is at fault before assuming the person is.

The general pattern, and the two-minute check that catches it, is written up on the blog: Your Conversion Count Is the Number Least Likely to Be Questioned.

What was built

1. Server-side purchase tracking with real values

The booking plugin was extended to send a purchase event on booking confirmation, server-side, carrying the actual booking value rather than a fixed placeholder.

Server-side matters here more than usual. Airport parking customers book well in advance: the median gap between booking and arrival was 23 days, and 43% booked more than 30 days ahead. Any tracking approach that depends on the browser surviving that long, or on a client-side tag firing reliably on a confirmation page a customer may never revisit, will undercount.

2. Session and consent handling

Two defects surfaced during implementation, both invisible from the front end:

  • The session identifier was being parsed incorrectly, so events arrived without a usable session to attach to.
  • Consent flags were hardcoded to denied, meaning events were being sent and then discarded downstream.

Neither produced an error. Both produced silence, which is the failure mode that survives longest.

3. Verification against real transactions

The chain was proven end to end rather than assumed:

  • A test booking with a live payment, checked at every hop for a numeric session identifier, granted consent flags, and a successful response.
  • The first natural paid-click booking after go-live, traced from ad click through to the value landing in the ads platform.

That second one confirmed something useful: the platform backfilled the conversion even though the import was configured after the booking took place.

The value that arrived matched the value in the booking system to the penny. Debug tools confirm a tag fired. Only a real transaction confirms the value arrived, matched, and was attributed.

4. Retiring the old measure

The contact-page action was removed and the enquiry action demoted to secondary, leaving the purchase as the only primary conversion. A free enquiry and a £144 booking are not comparable, and a bid strategy given both will chase the cheaper one.

What the honest numbers showed

Once bookings were being counted, a picture emerged that the previous two years of reporting had actively obscured.

Reported before Actual
Conversions, 6 months 177 512 bookings
Average conversion value Not tracked £144
Advertising as a share of revenue Unknown 18.3%
Conversions, all time 17,359 Roughly 4,500

The account was not in trouble. It was profitable, and had been the whole time. But nobody could have known that, and every decision taken during those two years had been taken against noise.

Three specific things the real data settled, each of which had been a live argument beforehand:

Which product they actually sell. Median booking length was 15 days. Only two bookings out of 834 were for a day or less. The ads had been advertising short stay parking, competing for searches from people who wanted something the business does not offer.

Where the wasted spend was. Around a quarter of clicks came from searches for the airport's own on-airport car parks. Cheap clicks, high click-through rate, no possibility of a booking. The high click-through rate had been read as a positive signal for years.

Which language works. Searches using the operator's actual service description converted attention at 13.6% and cost 43p a click. Generic category terms ran at 8.3% and 67p. The words that describe the business honestly outperformed the words with more search volume.

What I would tell someone in the same position

Check what your conversion action fires on before you check anything else. Not what it is named. What triggers it. A URL-contains rule matching a substring that appears in ordinary navigation is the single most common cause of this, and it is a two-minute check.

A high conversion count is not reassurance. It is the number least likely to be questioned and most likely to be wrong. Compare it against something outside the advertising platform: invoices, bookings, the CRM. If those two numbers disagree by more than a rounding error, the platform is not measuring what you think.

Automated bidding will do precisely what you configure. Value-based bidding with no reliable values is not a partially working system. It is a system optimising a random variable. If values are not flowing reliably, use conversion-count bidding until they are.

Verify with a real transaction. Debug tools confirm a tag fired. They do not confirm the value arrived, matched, and was attributed. Put a genuine booking through and follow it all the way.

Silence is the dangerous failure. Both defects found here were silent: no console error, no failed request, no alert. Systems that fail loudly get fixed. Systems that fail quietly get budget.

Scope and outcome

Delivered as two fixed-fee projects over three weeks, working evenings.

  1. Conversion tracking rebuild. Server-side purchase tracking with revenue values, consent and session handling, verification against live bookings, and retirement of the old conversion actions.
  2. Account audit and rebuild specification. Two workbooks covering account structure, keyword and quality analysis, all-time search term analysis, spend history, market share and competitive position, booking economics, and a full specification for the account rebuild, documented in enough detail for another consultant to execute.

The client now has, for the first time, a cost per booking they can trust and a documented plan they own outright.

Details anonymised at the client's request. Figures are real, rounded where necessary.

Does your conversion count match your bookings?

I rebuild checkout and conversion tracking as a one-off project: real revenue values, server-side where the browser cannot be trusted, verified end to end against live transactions. Documentation you own, no retainer.

Get in Touch