Define the business outcome you want more of, choose one measurement route and set the action's bidding role. Then test successful and failed journeys through to your CRM or order system and back to Google Ads. A tag firing proves that a tag fired. It doesn't prove a real enquiry arrived, was counted once or is being used by the campaign.
Define the outcomes and bidding goals
Start with a tracking plan, not a tag. One row per outcome with the fields below takes less than an hour. The plan settles every later argument about why two reports disagree.
Field | What to record | Example for a quote form |
|---|---|---|
Business meaning | What the outcome is worth knowing about | A quote request the team will actually follow up |
Source system | Where the truth lives | The CRM record, not the thank you page |
Success condition | What has to be true before it counts | The backend accepted the submission and created a record |
Action and goal | The Google Ads action name and its goal | Quote request, in the Submit lead form goal |
Bidding role | Primary or secondary, and which campaigns use the goal | Primary, used by the Search campaigns |
Count and value | One or Every, and the value basis | One per click, no value until qualified lead data exists |
Window and identifier | The conversion window and the unique ID | 30 day click window, opaque lead ID |
Owner | Who maintains and retests it | The person who publishes the Tag Manager container |
It's tempting to stop at the first box and call it done. But the signal worth bidding on sits further along. Every stage between the enquiry and the customer is a place the count can go wrong. So the plan names an owner for each one.
Google Ads groups conversion actions into goals by category. A campaign bids towards goals, not individual actions. A primary action is used for bidding. It appears in the Conversions column if the campaign optimises towards the standard goal that contains it. A secondary action is observation only and appears in All conversions.
The exception catches people out. Google's page on primary and secondary actions says secondary actions inside a custom goal are used for bidding. Custom goal actions count for reporting and bidding whichever label they carry.
Google's conversion goals page adds that a campaign can bid towards only one custom goal. The page also says custom goals aren't recommended in most cases.
Each campaign uses either the account default goals or campaign specific goals you choose for it. Every new campaign starts with the account defaults. Campaign specific goals can include a custom goal. The setting sits in the campaign settings under Conversion goals. So a primary label alone doesn't prove a campaign is using that action.
A common mistake is to set a new qualified lead action to primary and stop there. No one checks that the campaigns optimise towards its goal. Another mistake is to leave an old raw enquiry action primary in a goal the campaigns still use. Smart Bidding then keeps chasing the signal you meant to retire.
Our guide to Smart Bidding strategies covers what a goal change does to a bid strategy.
Count is set per action. One counts a single conversion per ad click for that action, not one per person across the account. That suits a lead. Every counts every conversion after an ad interaction. That suits purchases, because each sale has value.
Google's counting page gives an example. One person submits three forms on one action and two on another. That records two conversions under One. Changes to the count setting apply to future conversions only.
Set the conversion window to the sales cycle rather than the default. A window shorter than the time a customer takes to decide drops the slow conversions. Those are often the large ones.
Give lead values a defensible basis if you use them at all. A notional $50 on every form is a modelling assumption, not revenue. The plan should say so before anyone reads Conversion value as money in the bank.
Optimising to raw form submissions and every later stage at once needs a deliberate value and goal strategy. Otherwise the campaign will chase whichever signal is most plentiful. That's always the earliest one.
The native Ads form action and a GA4 import both count the same enquiry as primary outcomes.
The team chooses the intended action, verifies campaign goals and keeps any comparison source observational.
The account, billing and first campaigns may not exist yet. If so, start with how to set up Google Ads for a small business. Then come back here before anything goes live.
Choose one measurement route for each outcome
There are three ways an outcome can reach Google Ads. And nothing stops two of them counting the same form.
Route | When it fits | The limitation to respect |
|---|---|---|
Native Google Ads action | Ads specific measurement through the Google tag, Tag Manager or a supported platform integration | Event, value and identity fields must be configured. A base tag does not make any action a conversion |
Conversion from a GA4 key event | A reliable GA4 event already measures the outcome and the team wants one event definition | Link the right accounts, create the Ads action, inspect its settings. A key event is not a bidding goal yet |
Approved browser and server sources | An eligible supported setup supplements measurement of one action | Follow its matching and deduplication rules. Order IDs do not reconcile two unrelated primary actions |
The GA4 route needs a linked property and Ads account, auto tagging and a key event. Our guide to linking GA4 and Google Ads covers the link and the import steps.
Google's page on conversions from Analytics key events says actions created from key events are set to secondary. That's to prevent counting the same event twice for bidding. So check what yours is set to rather than assume it. Imports from Analytics bring no view through conversions. Their goal category and optimisation setting can only be changed in Google Ads.
Any Shopify or WooCommerce app, CMS plugin or booking tool that sends conversions is a route too. That's true whether or not anyone remembers installing it. It can be the one producing the duplicates.
Our audit sample is 180 Google Ads account audits from August 2021 to September 2026. Universal Analytics stopped processing data in July 2023. In the audits since then, about 1 in 5 accounts counted the same form with two primary actions. One was a native action, the other a GA4 import.
Here's how that plays out, as an example rather than an Elev8d case result. A plumber gets ten real quote requests in a week. A native Google Ads action on the success page counts ten. A GA4 key event imported into the same account counts ten more. That's because someone switched it to primary when the number looked low.
The Conversions column shows twenty. Smart Bidding treats twenty as the truth. And cost per lead looks like half what it is.
The fix is not deleting history. Choose the intended action, validate that it records correctly, and move the comparison source to secondary. Only then decide whether the action you replaced has a reporting job left.
Keep one intended bidding representation per outcome. The exception is a documented, deliberately configured multi source setup with someone who understands its deduplication rules. "Reliably" in the first check means tested against the backend, not showing a green status.
Set up the tag foundation
Before you inventory the tags, sort out who owns what. Tracking built in an agency's container, under an agency's Ads account, belongs to the agency. So does tracking built with a GA4 property nobody at the business can log into. The business loses all of it on the day the relationship ends.
Anything marked you belongs in the business's own logins, with the agency or developer invited in. Name one person as the rollback owner for tag releases. Then inventory what's already there:
Tag Manager containers
hard coded Google tags in the theme
CMS apps and plugins
server connections
Note the container, account and conversion destination each one feeds.
Tag Manager isn't mandatory for every business. A direct Google tag installation or supported platform integration can be the right answer for a simple site. Adding Tag Manager on top of a plugin that already sends conversions is how duplicates are born. So don't stop the inventory at the container.
Turn on auto tagging and verify that it survives the journey. Auto tagging appends a GCLID parameter to the URL people click from your ads.
Google's auto tagging page says it lets you track conversions in every browser. You can also import key event data from Analytics and from other sources such as a CRM. And you can send campaign and cost data to Analytics. Auto tagging is on by default for new accounts.
The same page warns that a small percentage of websites reject arbitrary URL parameters. Those sites show an error page. Where your site uses redirects, the GCLID has to reach the final landing page.
UTM parameters describe campaigns for your analytics. They don't replace the click identifier the import routes need. And GA4 prioritises auto tagging over manual tagging anyway. Confirm cross domain needs where the business controls both domains. A marketing site with a separate booking domain is one example.
Conversion Linker advice has moved on. Take a container that loads a Google tag on every page. Google's Conversion Linker page now says that container doesn't also need a Conversion Linker tag. Containers with Google Ads and Floodlight tags automatically load a Google tag first, before sending events.
The Linker still has a job when no Google tag loads on every page. Its cross domain settings still matter where you link domains. Don't add one because a checklist said so. And don't remove one until you know whether cross domain linking or another tag depends on it.
Where you use the explicit Tag Manager route, create a manual website conversion action in Google Ads first. Google's web conversion setup page describes the current paths. They run from codeless page load tracking to a guided Tag Manager setup.
Set these when you create the action:
category
name
count
value
windows
action optimisation
Then open the action, go to Tag setup and choose Use Google Tag Manager. That's where you get the Conversion ID and the Conversion Label.
Google's Tag Manager page for Ads conversions notes that the ID is unique per Google Ads account. The label is unique per action. Automatically created actions don't generate a standalone label. So this route needs a manual action.
Tag Manager sends a value of 0 when the Conversion Value field is left empty. Map value, currency and transaction ID through variables, never as typed constants.
Attach a trigger tied to the confirmed outcome, as the next section defines it. Preview the draft and watch the data layer and the network requests. Test the success and the failure. Then publish a named container version with a description that says what changed.
Verify the published site as well as Preview. That's because, in production, a consent default can block a tag that fired perfectly in debug mode. Record the container version that was live before the change. That way the rollback owner can revert in a minute.
Track successful forms and bookings
A form conversion should mean the business received an enquiry. Three methods get you there. Each has a limit worth knowing before you choose.
Success page. Fire the conversion when the browser reaches a precise success route that only an accepted submission can reach. A loose rule such as any URL containing the words thank you is not protection. People bookmark the page, refresh it, share it, and search engines find it.
Test a direct visit, a refresh and a repeat submission. Gate the event on a real success state where the developer can provide one. A one time token or an accepted lead ID in the URL or the data layer both work.
Tag Manager's form trigger. Use it only when the form emits a compatible, validated submission event. AJAX forms, embedded forms and custom builds often bypass it or fire it before validation. That is how a form with a failed email field becomes a conversion.
Don't fall back to a click on the submit button for an AJAX form. A click on Submit measures an attempt. GA4's automatic form_start and form_submit events are the same kind of evidence. None of them proves the backend received anything.
A confirmed success event. Ask the developer to push a data layer event only after the backend confirms acceptance. Match a Tag Manager custom event trigger to that exact name. And pass an opaque lead ID so a duplicate can be recognised.
We use this method wherever the site allows it. That's because it's the only one of the three where the trigger is the success.
window.dataLayer = window.dataLayer || [];
window.dataLayer.push({
event: "lead_submit_success",
form_id: "quote_request",
lead_id: "REPLACE_WITH_OPAQUE_LEAD_ID"
});
This is an event contract, not a form integration. The developer calls it after the server has accepted the submission and created the record. They also replace the placeholder with a real unique non personal identifier.
Google's data layer documentation covers the mechanics. Declare the data layer before the container snippet. Push rather than reassign the array. Keep the event name consistent. And remember that the object name is case sensitive.
Keep email, phone, symptoms and free text form contents out of the event. Keep them out of every general analytics parameter too. The snippet doesn't install tracking, handle consent or prevent a double execution on a double click. Each of those is tested separately.
Read the flow as the test plan. Each box is something you can observe:
the record in the CRM or inbox
the event in Tag Assistant
the request to Google in the network tab
the conversion in the Ads account later
If a box is missing, the one before it is where to look.
Booking tools are where form logic breaks down. If the widget sits in a cross origin iframe, your site's Tag Manager can't see inside it. The same goes when the widget sends people to an external checkout.
Check for any of these:
the provider's supported integration
a return URL or confirmation page on your own domain
a webhook
a server confirmed status your CRM can read
A click on the booking button is secondary evidence at best. If confirmed bookings can't be observed, write that limitation into the tracking plan. And use a permitted CRM handoff later. Don't create a completion event that fires when someone opens the calendar.
Clinics have an extra check. Health related booking information is a sensitive category. Confirm privacy eligibility before anything about the booking goes to an advertising platform. The consent section covers that check.
Whichever method you choose, test the failures as carefully as the success. Cover each of these:
a validation error
a server failure
a repeated click on Submit
a direct visit to the success page
a refresh after submission
a spam entry
Then follow the real submission to its destination. That might be an email, a CRM record or a calendar booking.
A test that ends at the on screen message proves nothing about delivery. In the same audits, about 1 in 5 accounts showed the success message for a labelled test enquiry. But the enquiry never reached the person who answers it. Picture the notification going to a mailbox nobody has checked since the office manager left. Meanwhile, the dashboard still looks fine.
Our guide to website enquiry form design covers the form itself. It also covers the measurement events that describe interaction rather than success.
Form and page: [form name and URL]
Test type: [success, validation error, server failure, repeat click, direct success visit or spam]
Backend result: [record ID, email or booking reference, or none]
Event observed: [data layer event and lead ID, or none]
Tag result: [fired once, fired twice or did not fire]
Conversion request: [sent to the intended action, or none]
Expected outcome met: [yes or no, with the fix owner]
Keep one record per test, including the failures, with the date and the container version. It is the evidence the maintenance section asks you to repeat after every change.
Count real phone calls separately
Google's call reporting records calls from ads. Calls from a website visit after an ad click are a different measurement. Clicks on a phone number link are a third. And a click proves nothing about a connected call.
Duration is a quality proxy, not proof of a qualified enquiry. So set a threshold from your own call log rather than a universal 30 second rule. And keep only one call action primary.
In Elev8d's service accounts, calls are commonly 30% to 50% of leads, more for emergency trades. That's our observation, not a market statistic. It covers the 45 service accounts we managed from May 2024 to September 2026, all with call tracking. Our guide to Google Ads call tracking explains that figure. The same guide covers forwarding numbers, website number replacement and call imports.
Track purchases without duplicate revenue
A purchase conversion carries money. So every field that's wrong is wrong in dollars. Treat the fired event as the start of the check, not the end. An Australian store can charge some orders in NZD or USD. That's why the currency row below says charged, not assumed.
Field or check | What good looks like |
|---|---|
Value | The agreed value basis, with quantities, discounts, shipping and tax treatment stated. Never a static price |
Currency | The currency actually charged. Hard code AUD only where every order is charged in AUD |
Transaction ID | A dynamic, non personal identifier unique to the order, stable on refresh and consistent across sources |
Duplicate sources | One intended purchase action for bidding. ID deduplication works within one action, not across routes |
Refunds and cancellations | A supported retraction or restatement route for the chosen source, matched on the original identity |
Checkout journey | Tested on mobile, through an alternative payment return, on a repeat confirmation visit and to final status |
Google's transaction ID page is specific. The ID must be unique for every transaction and dynamically generated. Using the same ID for multiple orders results in undercounting. It must not include anything that could identify a customer. The duplicate check is described for two conversions for the same conversion action with the same ID.
That last point is the one people miss. A transaction ID stops one action counting one order twice when the confirmation page reloads. It does nothing about a second action fed by a GA4 import or a plugin. That action counts the same order again under a different name.
Use Every as the count setting for purchases and let the ID handle the repeat page views.
Refunds and cancellations go through conversion adjustments. A restatement changes the value and keeps the count. A retraction removes the conversion and sets its value to zero. For online conversions Google says adjustments are only possible if the conversion was tracked with a transaction ID.
Adjustments are uploaded the same way as offline conversions. They're matched on the transaction or order ID and the action name. A retracted conversion can't be adjusted again. So decide the route and the owner before the first refund rather than after it.
Do not assume every refund updates every Ads action automatically. Whether it does depends on the platform integration you chose.
Then test the journey the way customers pay. Include a PayPal or Afterpay style return that leaves your domain and comes back.
Say the storefront and the checkout are on different domains or systems. A tag on the storefront alone may never see the confirmation at all.
Order identifier: [opaque ID]
Order status: [accepted state]
Charged currency: [currency]
Recorded value: [amount]
Value basis: [discounts, shipping and tax treatment]
Ads conversion action: [action]
Repeat confirmation result: [outcome]
Refund adjustment route: [method and owner]
Fill one in for every test order and keep it with the tracking plan. Settle the value basis first. Only then will our ROAS calculator tell you what the revenue figure means against spend and margin.
Google Ads for online stores describes how we run Shopping and Performance Max accounts. In those accounts, the revenue figure has to be right.
BigCommerce, Shopify and WooCommerce checkouts
On BigCommerce, the first job is to find out what any installed Google integration already sends. Inventory the current Google or partner app. Include any custom scripts added through Script Manager or the Scripts API. BigCommerce's developer documentation recommends both for injecting scripts into the checkout and order confirmation templates.
Identify the conversion action each integration sends to, and confirm the supported checkout implementation. Then place a test order. Compare its transaction ID, currency and value with the order record in the control panel. Choose one intended purchase action for bidding and move anything else to secondary. Check the app's current settings in your own store before assuming it handles enhanced conversions as well.
For Shopify and WooCommerce, favour a currently supported integration that meets the value, currency and ID requirements above. Check that the checkout is covered as well as the storefront. Then look for the second plugin. Two apps sending purchases to two actions, both primary, double the revenue Smart Bidding sees.
A snippet pasted into a theme's thank you page template misses any checkout that runs outside the theme. Headless or custom checkouts need a developer to place and test the tracking.
Import qualified leads and customers
Everything so far measures the moment the enquiry arrives. The signal Smart Bidding needs is what happened next. And that lives in your CRM.
Take a commercial cleaning company. Its enquiries move through four stages:
an accepted enquiry
a qualified enquiry, where the team has confirmed the job is in scope and in area
a quote or booking
a paying customer
Define qualification in business terms and name who records it.
A long phone call isn't a qualification, and neither is a form with a valid email address. Preserve the timestamp of each actual stage change. The conversion time you upload must be when the stage happened, not when someone ran the export.
Choose the deepest stage that is recorded reliably and arrives in enough volume to support bidding. Raw enquiries can stay as a reporting measure while a validated qualified lead action becomes the intended goal.
Switching goals changes the signal the bid strategy learns from. So run the import as a secondary action first. Compare it with the CRM for a few weeks, and only then promote it.
A common mistake is to make every stage primary and add the counts together. That turns one customer into four conversions and makes cost per acquisition look like a bargain.
Two ways to match an outcome to a click
The click ID route stores the GCLID from the ad visit with the lead record. The outcome is uploaded against that GCLID later. Google's offline conversions page spells out the plumbing.
Auto tagging on. A hidden GCLID field in each form. A script on every page that reads the identifier from the URL and writes it into that field. A CRM field that keeps it with the prospect.
The GCLID is case sensitive. Google's sample script stores it for 90 days. Google's offline import guidelines say conversions uploaded more than 90 days after the last click won't be imported. The limit for enhanced conversions for leads is 63 days.
The second route is enhanced conversions for leads. It supplements matching with eligible first party data, such as a hashed email address captured on the form. That's subject to policy and consent. The route still needs a working import of accurate outcomes. Enabling it doesn't import sales by itself, whatever the setup screen implies.
Those four figures come from Google's offline conversion pages. They apply to the identifier and the action, not to the connector. The connector adds its own lookback. That catches people out at the mapping step.
Run the CRM import and keep it accurate
Write the import specification before anyone connects a source. Every connector asks for these fields in some form. And the mapping step depends on them.
Source and destination: [CRM, account and action]
Stage definition: [qualified or converted lead]
Matching route: [supported click ID or eligible user data]
Event identity: [stable non personal identifier]
Conversion time: [field and time zone]
Value and currency: [fields and meaning]
Consent mapping: [required fields for this route]
Import schedule and limits: [verified configuration]
Errors and retries: [owner and process]
This is a planning template, not an upload ready file. Match the connector's current fields and eligibility. Record the time zone as a named zone such as Australia/Melbourne rather than a fixed offset. Daylight saving moves the offset. So a six month old export will be an hour out.
Then work through four steps, in this order. Mapping is where imports break. And monitoring is the step people forget to budget for.
Create the offline action and connect the source
In Google Ads, create the conversion action under Conversions offline. Set its category and its primary or secondary status. Then connect the CRM, Data Manager source or supported integration, such as Zapier or a partner connector. Confirm account ownership, permissions and the destination action before anything is mapped.
Map fields to the current schema
Match the CRM export to the connector's current fields. That means:
the identifier or the approved user data
the conversion action name or ID, exactly as it appears
the conversion time with its time zone
value and currency, where used
a stable order or event identifier, where the connector supports one
Check the lookback, because Google's figures differ by source. File, sheet, HTTP, SFTP and cloud storage sources import conversions from the previous 90 days on each run. Database sources such as BigQuery import the last 14 days on each run. Salesforce and HubSpot import 14 days on the first run, then the changes since the last one. So the same CRM data behaves differently through different connections.
Send a small test set
Wait the 4 to 6 hours after creating a new action, then send a handful of approved records. Inspect accepted and rejected rows, fix the mapping, and only then schedule regular imports. Imported statistics take about 3 hours to appear. The All conv. (by conv. time) column shows them by the conversion date in your file. A successful connection is not proof that rows were accepted or attributed.
Monitor what breaks later
Duplicate retries, delayed stage updates, cancellations, value changes and expired credentials all arrive after launch. Google removes exact duplicates when a file is uploaded again, matched on identifier, action, date and time. That protects you from a repeated file but not from a stage recorded twice with two timestamps. Assign someone to watch import failures and compare mature outcomes with the CRM each month.
Integrations and reporting
For a new API integration, point the developer at Data Manager. Don't send them to the legacy upload service. Only some existing API clients lost access in June 2026.
Google's API deprecation schedule restricted offline conversion uploads for some developer tokens from 15 June 2026. The affected tokens sent no such upload request between 17 December 2025 and 15 June 2026. Their requests return a not allowlisted error. The migration route is the Data Manager API.
An integration that was uploading through that window kept its access. Confirm the actual integration's eligibility and migration path. Leave authentication and code to the developer.
Once outcomes flow back, every report should show cost per enquiry, qualified lead and customer separately. The first number flatters the campaign. The last is the one that pays wages. Our guide to what a good cost per lead is starts from the break even figure.
Add enhanced conversions where eligible
Google has been changing the enhanced conversion controls through 2026. Its enhanced conversion settings update sets out what moves where.
The controls live in two places. At account level under Settings in the Goals menu, in the Customer data use panel. And at action level in the same panel while you create a conversion action.
You review the data terms and choose Agree and continue. Existing users who have agreed to the customer data terms move to the new unified status automatically. You can still opt out at the action level.
A unified switch does not do the work for you. Website enhanced conversions still need the tag to capture the approved fields at the moment of conversion. Enhanced conversions for leads still need an accurate offline import. The switch decides whether Google may use the data. It does not collect it.
Keep the two uses straight. On the website, enhanced conversions improve matching for the conversion that just happened. They do that by sending hashed first party data, such as an email address, alongside the event. For leads, the hashed data is captured at enquiry time. That data is what later lets a CRM outcome be matched back without a click ID.
Use only eligible first party data and the approved fields.
The Google tag hashes the data before it leaves the browser. Each connector documents whether it expects hashed or raw values. So follow that rather than hashing twice.
Don't tell anyone that hashing makes personal data anonymous. It doesn't. That's why the consent and policy checks still apply.
Verify enhanced conversion diagnostics only after the basic conversion event is proven. A matching problem on top of a firing problem is twice as hard to read.
The Customer data use panel also offers a checkbox to turn on conversion based customer lists. That lets Google build audience lists for the account from the user provided data in your conversions.
Customer lists are an audience decision, not a measurement setting. They come with their own policy and eligibility implications. And they're a poor default for any business in a sensitive category. Leave the checkbox off until someone decides to use it on purpose.
Apply consent and data restrictions
Google's EU user consent policy applies to end users in the European Economic Area, the UK and Switzerland. So it reaches further than its name suggests.
The policy requires legally valid consent for cookies or local storage where legally required. It requires consent for the collection, sharing and use of personal data for ad personalisation. Records of the consent given are required too.
Whether the policy binds you depends on the data, the product and the use case. Where your office is doesn't come into it. An Australian business that sells to visitors from London has this to think about.
Consent mode communicates choices to Google tags. It does not obtain consent and it does not replace a consent interface. Google's consent mode documentation describes two implementations.
In basic mode, Google tags are prevented from loading until the visitor interacts with the banner. Nothing is sent, not even the consent status, when they decline.
In advanced mode, the tags load with consent defaulting to denied. They send cookieless measurements while consent is denied. Full measurement comes only after it's granted. Set the defaults before any tag fires and update them after the choice.
The four consent types for ads and analytics are:
ad_storage for advertising cookies
analytics_storage for analytics cookies
ad_user_data for sending user data to Google for advertising
ad_personalization for personalised advertising
Document whether you run basic or advanced consent mode and test both states.
Australian obligations are separate. They need their own assessment, starting with whether the Privacy Act covers you at all. Being under the turnover threshold isn't the end of that question.
The OAIC's guidance on tracking pixels sets out what it expects when you deploy third party tracking:
understand what the tool collects
configure it to collect only what you need
tell people in a collection notice and privacy policy
get consent where it's required
A privacy policy link alone is not a plan. Limit access and retention as well as collection. Keep sensitive information out of URLs, event parameters and the screenshots in your test records. Our guide to Australia's new privacy laws for business websites covers the wider picture.
Google's rules add a hard line. Google's customer data policies restrict conversions related to sensitive categories. Those conversions can't be used for measurement in enhanced conversions or store sales uploads. The list includes health or medical information such as purchases of medical services, prescription drugs or medical devices.
The policy also requires that uploaded data be first party. Customers must be told their information is shared with third parties for ad measurement. And consent must be obtained where legally required.
So a clinic shouldn't be told to upload patient data. Nor should it be told to switch on health related enhanced conversions or match its CRM freely. Removing the treatment name from the event or hashing the email doesn't make a restricted conversion eligible. Review the permitted measurement plan with someone who knows the rules before the first upload.
Bottom line Check eligibility before transmitting data. Hashing does not remove the restriction.
Verify the full journey and diagnose gaps
Verification is a set of tests with evidence, not a status check. Run every row below before launch and again after any change.
Valid form or booking
One confirmed success event and one backend record, followed through the notification or CRM route
Invalid or failed submission
No conversion for a validation error, server failure or abandoned form, repeat click or direct success visit
Purchase and revisit
Correct live variables and a matching order record. A refreshed confirmation adds no revenue
Consent states
Expected tag and request behaviour for accepted and declined choices, with the model you run written down
Tag Manager and network
Right container version, trigger, ID, label, value and destination. Fired is not accepted
Ads reporting
Action status, diagnostics and the goals each campaign selects, allowing the documented processing time
Offline outcome
Test records accepted by the connector and mapped to the right stage and time, with rejected rows monitored
CRM reconciliation
Same channel scope, stage, dates, time zone and counting rules. Business leads need not equal Ads conversions
Use test traffic responsibly. A direct visit proves that the tag and the backend work. It doesn't produce an Ads attributed conversion, because there's no click to attribute it to. That's fine. Don't click your own live ads repeatedly or import clicks that never happened to force a green status.
The Tracking status column has its own vocabulary. Hover over a Tag inactive or Needs attention status and choose Troubleshoot to test it in Tag Assistant. Google's Tag Assistant troubleshooting page describes the process. A verified action shows No recent conversions until real ones arrive. Then it shows Recording, after a processing time that depends on the source.
One critical failure, such as failed submissions counting as leads, blocks launch however many other rows pass.
When the Ads number and the CRM number disagree, check the scope before the tags. Google's Understand your conversion tracking data page says primary conversion columns use click time, not conversion time. The by conversion time columns use the date the conversion happened. And imported outcomes land days or weeks after the click.
The Conversions column shows primary actions in goals the campaign uses. All conversions shows everything. A count of One collapses repeat submissions. Spam counts in the CRM until someone deletes it. A qualified lead in the CRM isn't the same stage as an accepted enquiry in Ads.
Reconcile the same stage, dates, time zone and counting rule. Even so, expect the two totals to differ for reasons you can name. Don't promise anyone identical counts or a fixed diagnostic delay.
Work the tree from the top and stop at the first No you reach. Fix the earliest broken link first, because everything after it inherits the fault. Tuning diagnostics for a form whose backend is dropping submissions is time spent in the wrong place.
We'll check your conversion actions, goals and duplicate sources in a free Google Ads audit.
Maintain and review your tracking
Tracking doesn't stay fixed. Things change around it:
themes update
plugins change their events
a developer renames a form
the consent platform ships a new default
the CRM admin renames a stage
a campaign manager swaps a goal
None of them tells the person who owns the tracking.
Each conversion action is recording
Status and diagnostics in Google Ads for every action in the plan, with any Needs attention state explained
Campaign goals still match the plan
Each campaign uses the intended goal, with no retired raw enquiry action still primary
No new duplicate route appeared
A new plugin, app or GA4 import is not counting an outcome that already has an action
Failed journeys still fail
A validation error and a direct success page visit still produce no conversion
Purchases match orders
A sample of orders matches value, currency and transaction ID, and refunds were adjusted
Imports are fresh and accepted
Last successful import date, rejected rows and duplicate retries reviewed, and credentials still valid
Consent behaviour unchanged
The banner, defaults and updates still behave as documented in both states
CRM reconciliation done
Mature outcomes compared with the CRM for the same stage, period and scope, with differences explained
Date and time: [when the change went live]
Change: [what was added, changed or removed]
Reason: [the problem or request behind it]
Systems touched: [container version, Ads action, CRM field, consent setting]
Tests run after the change: [success, failure, purchase, consent, import]
Owner: [who made the change]
Rollback owner and route: [who can revert it, how, and the container version to restore]
Retest after website, checkout, form, consent, CRM or campaign goal changes, not on a calendar alone. Keep these together where the next person can find them:
the tracking plan
the Tag Manager version
the test records
the change date
the owner
the rollback instructions
The first month after launch deserves closer attention. Our guide to the first 30 days of a Google Ads campaign sets out the rhythm.
Our Google Ads audit scorecard is a self assessment of the account. That includes whether tracking exists and has been verified. The scorecard isn't a tag validator. It can't see your account either.
What we recommend at Elev8d
We test the tracking before we touch a bid. In the same audits, about 7 in 10 accounts had at least one conversion measurement fault. So we treat an untested Conversions column as a rumour, not a number.
Our order follows this guide:
Agree what "qualified" means and write the tracking plan.
For a service business, fire a confirmed success event through Tag Manager into one native Ads action. Keep GA4 for reporting.
Run the failure tests through to the inbox or CRM.
Then build the CRM import and keep it secondary for a few weeks. Promote the qualified lead action once the counts reconcile.
We change that order in two cases. A store whose platform integration already passes the purchase tests keeps it. We remove the extra tags rather than add ours.
A clinic, or any business whose conversions fall in a sensitive category, stops at the eligibility check. It leaves enhanced conversions and customer lists off. And it gets privacy advice before any upload.
If the build is beyond your team, our managed Google Ads service covers it. That includes setting up the tracking and testing it with real enquiries.
Next steps
Send one labelled test enquiry today
Submit it on the live site and find it in the inbox or CRM. Then check in Tag Assistant that the conversion tag fired once. If either end fails, that's your first fix.
List every conversion action and its source
Note where each one comes from and whether it is primary in a goal your campaigns use. Any enquiry counted by two actions is the first duplicate to remove.
Check which goals each campaign bids on
Open Conversion goals in each campaign's settings. Confirm each campaign uses the outcome in your plan, not one you meant to retire.