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:
- Is data arriving? (collection)
- Is each conversion shaped correctly? (payload)
- 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 (
valueis a number, not"undefined";currencyset;transaction_idpresent 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:
valueis populated and numeric.currencyis 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
- Realtime — GA4 receiving in production? (else: publish the container)
- DebugView / Test Events — every conversion fires with the right payload?
- UTMs — mediums match channel rules + survive redirects?
- Pixel + CAPI — shared
event_id, deduplicated? - Money events —
value+currency+ order ID present? - Server events — verified in DebugView, carry source?
- 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.