The conversion tracking QA checklist: test it like you'd test code
Conversion tracking breaks silently after launch, and month-end is a bad time to find out. Here's a re-runnable checklist you run like a test suite after every site change: what to check, which tool checks it, and what a pass looks like, plus how to fire test conversions without polluting your data.

Month-end, and Google Ads shows a third fewer conversions than last month. Nothing on the site looks broken: checkout works, the thank-you page loads, the dashboards are full. Confirming tracking still works takes three checks: the tag fires exactly once per conversion (Tag Assistant or GTM preview), the value and currency match the actual order, and the platform reports the conversion action as active and recording. The rule that matters more than any single check: re-run the list after every site change, because tracking rots.
Tracking gets tested once, at launch, by clicking around. Then the site keeps changing while the checklist never runs again. This page is the full runbook: six check groups, each item with the check, the tool, and the pass criterion, so you can run it like a test suite instead of a vibe check.
#Why "set it and forget it" fails
Tracking breaks after launch, not at launch. The setup you verified in March meets a new consent banner in April, a checkout redesign in May, and a tag migration in June. None of those deploys re-ran your tracking tests, because there were no tracking tests, only a memory of having clicked around once. The common killers, all post-launch: site deploys that drop a data-layer push or rename a form; consent-banner updates that silently block tags for a whole region; checkout changes that break dynamic values or cross-domain persistence; and tag migrations (gtag to GTM, pixel to server-side) that leave the old tag running next to the new one. Every one of these produces wrong numbers while every dashboard looks alive. That's why this checklist is versioned and recurring, not a launch gate: it's the same discipline as regression testing code. The runbook below is the one we run before Buron's own campaign and pixel deployments, with the client-specific rows trimmed.
#The checklist
Copy it, version it, and record a pass/fail per item on every run. Six groups, ordered the way failures usually cascade.
1. Tag layer: the tag fires once, on the right page, on the right trigger.
- Fire the conversion path with Google Tag Assistant or GTM preview mode open. Pass: exactly one conversion event, on the confirmation step, not on page refresh or back-button. Setup context lives in Google Ads conversion tracking: setup and the 7 ways it silently breaks.
- Refresh the thank-you page. Pass: no second fire (or the platform's transaction ID dedupes it, so verify rather than assume).
- Check the trigger scope: the tag must not fire on lookalike pages (order-status revisits, in-app confirmations, preview URLs).
2. Dedup: one event, one count.
- If both gtag and GTM are installed, confirm only one fires the conversion (double installs are the most common duplicate source).
- Pixel + Conversions API stacks: confirm both sides send the same
event_id+event_name, and Events Manager shows the server event as deduplicated. The mechanics are in Conversions API vs the Meta Pixel: what actually changes; the Meta/Shopify failure pattern is in Why Facebook Ads conversions don't match Shopify. - Pass criterion: one purchase = one counted conversion per platform, checked against a real test order.
3. Values: the money is right.
- Place a test order (or trace a real one). Pass: the conversion value equals the order value, in the right currency, with no hardcoded fallback ("every conversion is worth exactly 1.00" is a broken dynamic value, not a setting).
- Check a discounted order and, if relevant, a multi-currency order: both are classic silent-mismatch cases. Why values matter this much is the Value-based bidding needs values you can trust argument.
4. Identity and parameters: the keys that tie a conversion to its click survive.
- Click a (test) ad and confirm the GCLID is present on the landing URL, persists past the first navigation, and lands where your CRM or forms expect it. That's the capture pattern from Offline conversion tracking: send CRM deals back to Google Ads. Auto-tagging must be on; click-ID mechanics are in Click IDs: what gclid, fbclid, and wbraid do.
- If checkout crosses domains, complete a cross-domain pass and confirm the session and click ID survive the hop. The failure and fix live in Cross-domain tracking: the checkout-domain trap.
5. Consent: know what happens when the answer is no.
- Run the conversion path once with consent denied. Pass: the tag behaves the way you decided it should (pings for modeling under Consent Mode v2 without losing your signal, or fully dropped), and you know which one you chose. "Nobody has tested the deny path" is the most common finding in this group.
6. Platform status: the platform agrees it's working.
- Google Ads: the conversion action shows "Recording conversions", and diagnostics are clean. Google's check-your-status doc decodes the states.
- Meta: Events Manager shows the event active, deduplicating, with a plausible event match quality score; use the Test Events tool for a live trace.
- Pass: no "needs attention" states, and last-received timestamps are recent on every conversion that should be firing.
#Run a test conversion without polluting the data
Each platform has a clean way to test; use it instead of hoping a stray conversion averages out.
Google Ads. Tag Assistant and GTM preview verify firing without recording. For a recorded end-to-end test, click your own ad, convert, and either exclude your IP beforehand or annotate and discount the conversion. Imported/offline paths: upload a single test row and confirm it lands in diagnostics.
GA4. DebugView shows events in real time from a device with debug mode on, and nothing pollutes reporting until the event is a key event counted in production streams. Validate names and params here first (setup in GA4 conversion tracking: setting up key events).
Meta. The Test Events tool in Events Manager takes a test code so browser and server events show up live, flagged as tests. Verify dedup here before trusting production counts.
GTM in general. Preview mode is a full staging environment for tags: validate triggers, variables, and data-layer values with zero production footprint.
#When a check fails: where to go
| Failing check | Symptom | Fix path |
|---|---|---|
| Tag / dedup | GA4 and Google Ads disagree | Why your GA4 and Google Ads conversions don't match |
| Dedup (Meta) | Meta says 140, Shopify says 90 | Why Facebook Ads conversions don't match Shopify |
| Identity | Conversions exist but campaigns get no credit | Click IDs: what gclid, fbclid, and wbraid do · Cross-domain tracking: the checkout-domain trap |
| Consent | One region's conversions cratered | Consent Mode v2 without losing your signal |
| Values | Every conversion worth the same round number | Value-based bidding needs values you can trust |
| Platform status | Imports accepted but conversions missing | Offline conversion tracking: send CRM deals back to Google Ads |
#The failure mode of manual QA
A manual checklist decays because humans stop running it. That's not a discipline problem, it's the design. The week nobody re-ran the list after a deploy is the week the numbers went quiet, and you find out at month-end. These checks are mechanical: tag fired, value matched, status green, GCLID coverage steady. Buron runs them continuously against your connected accounts and warehouse, so a failed check becomes a finding in your inbox the day it breaks, with the agent acting on the trigger instead of waiting for the quarterly audit. Connect your accounts once and the list stops depending on anyone remembering to open it.
Frequently asked questions
How do I check if conversion tracking is working?
Three checks catch most breakage: fire a real or test conversion and confirm the tag fires exactly once (Tag Assistant or GTM preview); confirm the value and currency arriving match the order or CRM record; and confirm the platform shows the conversion action as active and recording. Re-run all three after every site change.
How do I send a test conversion in Google Ads?
Click your own ad from a search (or use a test campaign with an exact-match obscure keyword), complete the conversion path, and watch the tag in Tag Assistant. The conversion appears in Google Ads within hours, attributed to your click. Exclude your IP or segment it out afterwards, or use GTM preview to validate firing without recording.
Does testing conversions pollute my data?
Only if you let it. Tag Assistant and GTM preview validate firing without recording conversions. When you do need a recorded end-to-end test, use a $0 or clearly labeled test conversion action, exclude your office IP, or annotate the date so one stray conversion never confuses a bidding or reporting decision.