A conversion tracking audit is the first thing we do in any paid media account, before a campaign is built or a budget is raised. Every ad platform now optimizes toward the conversion events you give it. If those events are wrong, missing, duplicated, or pointed at the wrong action, the platform will spend your money efficiently toward the wrong outcome, and the reports will say it is working. This is the checklist we run, in order, and what each item catches.
Why the audit comes before the budget.
Modern bidding is automated. Target cost per acquisition, maximize conversions, Performance Max, Advantage+ shopping: all of these hand the bidding decision to the platform and ask it to find more of whatever you defined as a conversion. That makes the definition the most important setting in the account. A misconfigured conversion action does not produce a small error. It produces a campaign confidently optimized toward page views or a phone button tap that never connected.
It is common to inherit an account where the platform story looks fine and the business has not seen a new customer from ads in months. The cause is nearly always tracking, not targeting. So the audit runs first, and nothing gets scaled until its fix list is clear.
Conversion actions: what counts, and what counts as primary.
In Google Ads, every conversion action is marked primary or secondary, and only primary actions feed bidding. The first thing we read is that list. Accounts connected to GA4 often have every key event imported automatically, so a scroll event or an outbound click ends up primary and the bidding system optimizes toward it. We want one or two primary actions that represent real business outcomes, and everything else demoted to secondary.
Two settings on each action get checked next. The count setting should be one per click for leads, since one person submitting a form twice is not two leads, and every conversion for purchases. The value setting should be a real number or nothing.
Meta has the same problem in different clothing. The ad set optimizes toward a single event, and custom conversions built on URL rules often match more pages than intended. A rule that fires on any URL containing "thanks" will count newsletter confirmations and unsubscribe pages as leads. We read every custom conversion rule and test what it matches.
Goal overrides and campaign-level settings.
Google Ads has account-level default goals and campaign-level overrides. A campaign set to use account defaults inherits every primary action, which means a new primary action added for one campaign quietly starts driving bidding in every other campaign. Performance Max is especially sensitive to this, because it will find the cheapest path to whatever it has been told counts. We open every campaign and confirm which goals it is actually using.
Attribution model and conversion window are set per action, and both change the numbers. Data-driven attribution spreads credit across clicks, last click does not, and a campaign compared across the two will look like it changed when nothing did. We note the model on every action and keep reporting consistent with it.
Form and call events.
Forms fail in predictable ways. The event fires on button click rather than on successful submission, so every validation error counts as a lead. The thank-you page is reachable by direct URL and indexed, so it collects conversions from people who never filled anything out. Embedded forms from HubSpot or another tool live in an iframe, so the page-level tag never sees the submission. Multi-step forms fire on step one, which is just a click.
Calls fail differently. A click-to-call button on mobile fires the moment it is tapped, whether or not the call connects. Website calls should run through a call tracking number, from CallRail or the Google forwarding number, with a minimum duration before they count. Call assets on the ad itself need their own conversion action with a duration threshold.
- Form submission events fire once, on confirmed success, with an identifier that can be matched in the CRM.
- Thank-you pages are noindexed and, where possible, unreachable without a prior submission.
- Embedded and multi-step forms send a callback or dataLayer event from the form tool, not a page-level trigger.
- Calls count only above a minimum duration, and the call recording or transcript is available for lead quality review.
Click IDs to the CRM.
The most valuable piece of tracking plumbing is a hidden field. When a visitor arrives from an ad, Google appends a gclid, or gbraid and wbraid on iOS, Meta appends an fbclid, and Microsoft Ads appends an msclkid. If the form captures those identifiers along with the landing page and UTM parameters, and the CRM stores them on the contact record, you can later tell every platform which of its clicks turned into revenue. If not, that information is gone the moment the page closes.
We check that the identifiers are captured, that they persist across pages so a visitor who browses before submitting is not lost, that they are stored on the HubSpot contact or equivalent record, and that they survive the consent banner. This is a small piece of work on the website form, and it is the foundation for the next section.
Offline conversions and the feedback loop.
Offline conversion import is how the CRM talks back to the ad platform. When a lead moves to qualified, appointment, or closed-won, that stage change, with the stored click ID, is sent to Google Ads, Meta, and Microsoft Ads as a conversion. The platform then knows which campaigns and creative produced customers rather than form fills.
The audit checks whether an offline import exists, which stage triggers it, and whether it is landing. A native HubSpot integration, a scheduled sheet upload, or a direct API push all work. The stage chosen should be far enough down the pipeline to mean something and early enough that the platform receives it within its conversion window. For most service businesses that is a qualified lead or booked appointment.
Duplicate tags and consent.
Duplicate tags are the most common defect we find and the easiest to miss. A GA4 tag hardcoded in the page template and another in Google Tag Manager. Two Meta pixels, one from a plugin and one from a theme. A Google Ads conversion tag whose trigger was left at All Pages. Each of these doubles a number somewhere, and the doubled number feeds bidding.
Consent is the other half. Where a consent banner is required, Google's consent mode needs a correct default state and a correct update after the visitor chooses. A banner that blocks every tag until consent, without consent mode, means the platform sees nothing from those visitors. A banner that never blocks anything is a compliance problem instead. We test the page in both states with Google Tag Assistant and the Meta Pixel Helper, and we confirm the conversion linker is present so click IDs survive the consent flow.
| Defect | What the account looks like | Fix |
|---|---|---|
| Page view or scroll event marked primary | Cheap conversions, no new customers, Performance Max spending heavily | Demote to secondary, keep one or two real outcomes primary |
| Form event fires on button click | Lead counts far above CRM contacts, cost per lead looks excellent | Fire on confirmed submission only, deduplicate by submission ID |
| Thank-you page indexed | Conversions with no matching form record | Noindex the page, gate it behind a submission |
| Click ID not captured | No offline conversions possible, revenue cannot be tied to campaigns | Hidden fields on every form, stored on the CRM record |
| Two pixels or two GA4 tags | Every event counted twice, platform and CRM disagree widely | Remove the duplicate, confirm one firing in the debugger |
| Consent banner blocks all tags | Large share of conversions invisible, bidding starved of signal | Implement consent mode with correct default and update states |
“The platform will find more of whatever you told it a conversion is. The audit is how you make sure you told it the truth.”
The conversion tracking audit, step by step.
This is the sequence we follow. Each step produces a note in the audit document, and the document becomes the fix list.
What to do with the findings.
The audit ends with a written document. It lists every defect, what it is doing to the account, the fix, and who owns it, since some fixes belong to the web developer, some to the CRM administrator, and some to the person running the ads. Fixes go in order of impact.
After the fixes, the account needs a short baseline period with clean data before anyone judges performance or changes budget. Comparing a post-audit week to a pre-audit week is comparing two different definitions of a conversion. We hold budget steady, let the platforms relearn, and then start the actual work of paid media management with numbers that mean something.
How long does a conversion tracking audit take?
For a typical account with one site, a handful of forms, and two or three ad platforms, the audit itself is a matter of days. The fixes depend on who controls the site and the CRM, and a baseline period follows before performance can be judged fairly.
Do we need Google Tag Manager to do this properly?
Not strictly, but it makes every step easier. A container gives you one place to see every tag, a preview mode to test triggers, and a clean way to add hidden field capture and consent handling.
What if our CRM cannot store click IDs?
Most can, through a custom property or field. If yours cannot, a sheet or small database that stores the submission ID alongside the click ID still allows offline conversion uploads. Replacing the CRM is rarely the right first move.
Should the offline conversion be closed-won or an earlier stage?
For bidding, an earlier stage such as qualified lead or booked appointment gives the platform a signal within its conversion window. For reporting, closed-won is what matters. Many accounts send both, with the earlier stage as primary.