Google Ads conversion tracking setup: forms, calls, purchases and offline conversions

Ajay K. Published 22 Jun 2026 Updated 24 Oct 2026 38 min read Google Ads Reviewed by Max W., Performance Marketing Lead · Oct 2026 Share
Conversion tracking setup. Line drawing of a fitness tracker watch with its activity ring nearly closed.

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

Flow.
From an enquiry to a useful bidding signal
01EnquiryThe business accepts the submission
ISSUEExclude failed attempts and duplicate records
02QualificationThe team records whether the enquiry fits
03CustomerA paying customer is confirmed in the CRM
04ImportThe approved outcome reaches the correct Ads action
05DecisionThe campaign uses the selected goal

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.

One enquiry should not become two bidding signals
Before

The native Ads form action and a GA4 import both count the same enquiry as primary outcomes.

After

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.

Decision tree.
Which measurement route fits?
CHECK 1Is an existing integration already tracking this outcome reliably?
YES
Inspect its actionAvoid installing a duplicate
NOcontinueNO · continue to CHECK 2Continues to: Is a tested GA4 key event suitable for the Ads measurement needs?
CHECK 2Is a tested GA4 key event suitable for the Ads measurement needs?
YES
Create the Ads actionVerify settings and campaign goals
NO
Use a native Ads actionConfigure the confirmed outcome

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.

System map.
Who should hold each part of your tracking
grouped by who holds admin access
You hold access
Google Ads accountOwned by the business, lowest access that does the job
GA4 propertyThe right property, with Administrator access kept
CRMLead stages and the exports imports depend on
Shared access
Tag Manager containerA business account, named publishers only
Website or checkoutAdmin for whoever adds fields and events
Consent platformBanner, defaults and updates

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.

lead-success-event.js
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.

Flow.
From a submitted form to a recorded conversion
01SubmissionThe visitor submits a completed form
02Server acceptanceThe backend validates it and creates the record
ISSUEA failed or duplicate submission must stop here
03Data layer eventThe page pushes lead_submit_success with an opaque ID
04Conversion requestThe Tag Manager trigger fires the Ads conversion once
05RecordGoogle Ads attributes the conversion to the eligible click

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 test record

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.

Split.
Which call action should be primary?
Qualified callOnce your team grades calls and imports the result
Connected callUntil you can grade calls, with a threshold from your call log
Number clickNever. Keep it secondary as a sign of interest

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.

Purchase test record

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.

Flow.
Make a later customer outcome measurable
01CaptureRetain the approved matching information
ISSUEApply consent and sensitive data restrictions
02QualifyRecord the genuine stage and its time
03MapMatch CRM fields to the selected import schema
04UploadSend records through a supported connection
ISSUEInspect rejected rows and duplicate retries
05ReviewCompare mature outcomes before changing goals

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.

Google's offline import limits
90 daysClick conversionsUpload window after the last click
63 daysEnhanced leadsWindow for enhanced conversions for leads
6 hoursNew action waitGoogle says wait 4 to 6 hours
About 3 hoursReporting delayBefore imported statistics appear

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.

CRM conversion import specification

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.

STEP 1

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.

STEP 2

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.

STEP 3

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.

STEP 4

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.

Decision tree.
Turn on conversion based customer lists?
CHECK 1Is the business in a sensitive category, such as health?
YES
Leave it offaudience policies restrict it
NOcontinueNO · continue to CHECK 2Continues to: Has someone decided to use these lists for audiences?
CHECK 2Has someone decided to use these lists for audiences?
NO
Leave it offit's not a measurement setting
YES
Turn it on and record who decideddone ✓

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.

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.

Is this data suitable for enhanced conversions?
Best forEligible first party data used under the applicable terms and consent requirements.
Avoid ifThe conversion concerns a prohibited sensitive category or the required permission is missing.

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.

Decision tree.
Where does the measurement break?
CHECK 1Did a genuine outcome reach the backend?
NO
Repair deliveryRetest the form or checkout
YEScontinueYES · continue to CHECK 2Continues to: Did the correct event and request reach the intended destination?
CHECK 2Did the correct event and request reach the intended destination?
NO
Inspect the setupCheck trigger, fields and consent
YEScontinueYES · continue to CHECK 3Continues to: Do goal settings and reporting scope explain the difference?
CHECK 3Do goal settings and reporting scope explain the difference?
YES
Reconcile the reportsCompare stage, dates and attribution
NO
Inspect diagnosticsCheck duplicates, lag and import errors

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.

Not sure your conversions are real enquiries?

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

Tracking change log entry

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.

Ajay K.
Written by Ajay K.Co-founder, Elev8d

Ajay is the co-founder of Elev8d and writes most of what you will read here. Psychology grad turned marketer, which is a fancy way of saying he cares about why people click, not just where things rank. Every guide is written in plain English for Australian businesses, tested on real campaigns before it earns a spot on this site.

The next step

Ready for a Website That Actually Converts?

If the article raised more questions than it answered, that is what the free audit is for: a straight, no obligation read on your site, your rankings and what a transfer would actually involve.

Prefer to text? Message us on 0494 740 873 and we will reply the same day.