The brief
CQC AI Auditor is a compliance product for care providers in England, built by PCMS, where I’m the product and marketing manager. People try a free self-check, sign up, run full audits, export reports and buy a plan. Before any paid campaign went live, I wanted every step of that journey measured, so we’d know where people drop out and so the ad platforms could eventually learn from paying customers rather than visits.
What I did
Named every step of the funnel. Each product action is pushed to the data layer as its own event, and each one has a matching GA4 event: self_check_started, self_check_completed, sign_up, audit_started, audit_completed, report_exported, begin_checkout and purchase. That’s the whole path from a stranger trying the tool to a paying customer, in order.
Sent purchases with the detail that matters. The purchase event carries value, currency, the plan tier and a transaction ID, all from data layer variables. Revenue reaches GA4 with the plan attached, and the transaction ID stops the same order being counted twice.
Fixed page views for a single-page app. The product doesn’t reload between screens, so the normal page view only fires once. Page views are sent on a route_change event instead, with the page path, title and location read from the data layer.
Kept campaign parameters on every page. In a single-page app the UTM tags can drop off after the first screen. A custom JavaScript variable rebuilds page_location with any UTM, gclid or LinkedIn click ID from the landing URL, and a shared event settings variable applies it to every GA4 event, so a sign-up three screens later is still credited to the campaign that brought the person in.
LinkedIn, behind consent. The LinkedIn Insight Tag loads on page load or when consent is updated, and three conversions (sign-up, completed self-check and purchase) only fire once the visitor has granted ad storage and ad user data consent.
Results
Google rates the container “Excellent” with no issues. The product now reports the full journey from first self-check to paid plan in GA4, with revenue and plan tier on every purchase, and LinkedIn has the conversions it needs for the campaigns. The measurement went in first, so the first pound of paid spend is judged on sign-ups and plans rather than on visits.
In short
Eight funnel events, purchases with real revenue and plan tier, and campaign attribution that survives a single-page app, set up before the campaigns rather than after.

