conversion tracking6 min readBy Phloz team

The conversion-tracking QA checklist to run before every campaign launch

Launching a campaign on tracking you haven't verified is how a month of spend produces unusable data. The pre-launch QA pass — GA4, GTM, Meta, UTMs, server events — in the order that catches the most, fastest.

TL;DR

The most expensive tracking bug is the one you ship the day a campaign goes live — by the time the numbers look wrong, you've already bought a month of clicks you can't attribute. A pre-launch QA pass takes about 20 minutes and catches almost all of it: confirm GA4 is receiving (Realtime), confirm each conversion is shaped right (DebugView / Meta Test Events), confirm your UTMs match the channel rules so traffic doesn't go Unassigned, confirm Pixel + CAPI deduplicate, and confirm the money events carry value/currency and an order ID. This post is the checklist, in the order that finds the most problems first, with links to the deep-dive for each failure mode.


Every agency has the story: a client's new campaign ran for three weeks, spend looked fine, and then someone opened the reporting and the conversions were either missing, doubled, or filed under "Unassigned." Nothing had broken — the tracking was wrong from the first impression, and nobody checked before the budget started flowing. The fix isn't heroics after the fact; it's a 20-minute QA pass before the campaign goes live. Here it is, in priority order.

Before you start: what "verified" actually means

A campaign's tracking is only launch-ready when you can answer three questions with evidence, not assumption:

  1. Is data arriving? (collection)
  2. Is each conversion shaped correctly? (payload)
  3. Will it land in the right place in reporting? (attribution)

A green tag, a green pixel, or a Realtime blip answers only the first. The checklist below forces all three. If that framing is new, verifying conversions without trusting the dashboard is the why behind it; this is the how.

1. GA4 is receiving in production (2 min)

Load the live site in a normal window and watch GA4 Realtime. You should see yourself within ~30 seconds.

  • Nothing at all? That's a container/tag problem, not a campaign problem — most often a GTM container that was never published. Fix it before anything else; the rest of the checklist depends on it.
  • Data, but you're not sure it's complete? Don't trust Realtime for detail — that's the next step's job.

2. Each conversion event is shaped correctly (5 min)

Open GA4 DebugView (via GTM Preview, which auto-enables debug) and trigger every conversion the campaign optimises toward — form submit, signup, purchase, call. For each, confirm the full payload, not just that it fired:

  • Right event_name.
  • Required parameters present and the right type (value is a number, not "undefined"; currency set; transaction_id present on purchases).
  • No duplicate fire on a single action.

Realtime can't show you this faithfully — DebugView vs Realtime is exactly this distinction. On the Meta side, do the equivalent in Events Manager → Test Events: a green Pixel Helper isn't enough; confirm the event arrives with good match quality.

3. UTMs match GA4's channel rules (3 min)

Pull the actual ad URLs the campaign will use and check the utm_medium against GA4's recognised values — cpc/ppc for paid search, email for email, paid-social/social for social. A bespoke medium (newsletter, fb, promo) sends every click into Unassigned, where it's effectively invisible.

  • Run the UTM audit on the planned links before launch, not after.
  • Confirm UTMs survive any redirect (shorteners, /r/ links) to the landing page — a stripped param is a source you'll never recover. This is the whole story behind why traffic goes Unassigned.

4. Pixel + CAPI deduplicate (3 min)

If the campaign runs Meta (or any platform) with both browser pixel and the Conversions API — the right 2026 setup — confirm both sides send a shared event_id so the conversion counts once. Get this wrong and you either inflate conversions (and optimise toward a lie) or lose them. The dedup contract is the thing to verify, in Events Manager's multi-source view.

5. The money events carry money (2 min)

For any revenue or lead-value campaign, the single most common silent failure is a conversion that fires with no value. Confirm, in DebugView / Test Events:

  • value is populated and numeric.
  • currency is set (and correct).
  • A unique order/lead ID is present (for dedup and offline reconciliation).

A Purchase with value: 0 will run for a month and quietly make your ROAS reporting meaningless.

6. Server-side events, if any (2 min)

If a conversion fires from the backend (a confirmed signup, an offline close), remember it never appears in GTM Preview — verify it in GA4 DebugView (send debug_mode) and confirm it carries source/medium, or it lands in Unassigned like any source-less event.

7. Spot-check the report destination (1 min)

Finally, confirm the conversion is actually registered as a key event / conversion in GA4 and mapped in the ad platform — a perfectly-firing event that isn't marked as a conversion optimises nothing. This is the step people skip because it's boring; it's also why a "working" pixel sometimes drives zero conversion data into the ad account.

The pre-launch checklist, condensed

  1. Realtime — GA4 receiving in production? (else: publish the container)
  2. DebugView / Test Events — every conversion fires with the right payload?
  3. UTMs — mediums match channel rules + survive redirects?
  4. Pixel + CAPI — shared event_id, deduplicated?
  5. Money eventsvalue + currency + order ID present?
  6. Server events — verified in DebugView, carry source?
  7. Destination — marked as a key event/conversion and mapped in the ad platform?

Run it once and it takes 20 minutes. Skip it and the bill arrives a month later in spend you can't account for.

Make it a standing habit, not a one-off

The reason tracking QA gets skipped is that it's nobody's job until it's an emergency — and by then the data's already gone. The agencies that don't get burned treat this as a repeatable step in onboarding and every campaign launch, the same way they'd never ship ad copy without a second pair of eyes. That's the discipline behind a week-one tracking audit on every new client, and the reason broken tracking is a recurring cost, not a one-time bug.

Phloz exists to make that habit cheap: every client's GA4, GTM, pixels, and UTMs modeled as nodes with a health state, so the pre-launch pass is a checklist you run against a map instead of rebuilding from memory each time. The tracking-infrastructure map is the surface; CRM for PPC agencies and pricing are where it fits the workflow. But the checklist above costs nothing and stands alone — run it before the next launch.