Conversion Tracking Setup: GTM, GA4, and Offline Imports Explained
Most founders running paid ads are flying blind — not because they lack tools, but because GTM, GA4, and offline imports are all firing and none of them agree.


Most founders don't have a tracking gap. They have a tracking collision. GTM fires a conversion, GA4 fires a different one, the Google Ads tag fires a third, and somewhere downstream a CRM upload adds a fourth. The ad platform sees multiple signals for the same customer and optimizes toward whatever it can count most easily — which is rarely the one that actually matters.
This is the real problem behind "bad tracking setup" posts. It's not that the tools are broken. It's that each tool was wired up independently, at different times, by different people, and nobody ever drew a map of what fires when.
TL;DR — 5 things to know about conversion tracking setup
- GTM is a deployment mechanism, not a tracking system. GA4 and Google Ads tags both live inside GTM but measure different things for different purposes.
- GA4 conversion events are not the same as Google Ads conversion actions, even when you import them. The import creates a copy with its own attribution window and counting rules.
- Offline conversion imports depend almost entirely on gclid capture at the moment of the click. If your forms don't store the gclid, the upload will fail silently or match poorly.
- Many advertisers have reported declining offline conversion match rates when a valid gclid is absent — enhanced conversions for leads is the current workaround Google recommends.
- Duplication is the most common expensive mistake: the same conversion fired by a GTM-based Google Ads tag AND imported from GA4 counts twice in Smart Bidding, inflating reported conversions and corrupting your target CPA.
What GTM actually does (and doesn't do)
Google Tag Manager is a container. It holds tags — snippets of JavaScript — and fires them when specific triggers occur. That's it. GTM doesn't store your conversion data, it doesn't attribute anything, and it doesn't talk to Google Ads on its own.
When someone asks "do I need GTM to run a lead form campaign?" the honest answer is: no, but you'll want it eventually. Native lead forms on Google Ads capture leads inside the platform without any site-side tagging at all. If you're running a small test and don't have a developer, you can start there. The moment you want to track what happens after the lead — a phone call, a qualified opportunity, a closed deal — you need server-side events or an offline import, and GTM becomes useful for capturing the click data you'll need later.
Hardcoding a Google Ads conversion tag directly on a thank-you page works fine for simple setups. The problem comes when you add a second tag, then a third, then someone edits the page template and breaks the tag without knowing it. GTM centralizes that surface area and makes audits possible.
The specific question founders should ask about GTM isn't "do I need it?" but "what are all the tags currently firing on my site, and do I know what each one sends?" If you can't answer that, open Tag Assistant or GTM's preview mode before doing anything else.
GA4 conversions vs. Google Ads conversion actions
This is where most setups quietly break.
GA4 has "conversion events." Google Ads has "conversion actions." They sound like the same thing. They are not.
When you create a Google Ads conversion action by importing from GA4, Google pulls the GA4 event and wraps it in a conversion action with its own settings: attribution model, counting method (every conversion vs. one per click), conversion window, and value. Changing the original GA4 event does not automatically update the imported Google Ads conversion action. They drift apart over time.
More critically: if you already have a Google Ads conversion tag firing via GTM for the same event — say, a form submission — and you also import that event from GA4, you now have two conversion actions for the same user action. Smart Bidding sees both. Your reported conversions go up, your target CPA looks achievable at a lower actual cost, and the algorithm starts chasing ghost volume.
The fix is straightforward but requires a decision: pick one source of truth for each conversion action and disable the other. Most accounts should use either direct Google Ads tags via GTM or GA4 imports — not both for the same action.
For each conversion action in Google Ads, exactly one tag or import should be responsible for firing it. Audit this before you touch bidding strategy.
Choosing your conversion source: a quick decision framework
Before wiring anything up, it helps to know what each source is actually good at.
| Source | Best for | Latency | Main risk |
|---|---|---|---|
| Google Ads tag via GTM | Simple on-site actions (form submit, purchase) | Real-time | Duplicate fires if GA4 import also active |
| GA4 import | Unified event schema across platforms | Hours | Attribution drift from GA4 settings |
| Offline CSV / API upload | Post-click revenue, CRM-qualified leads | 1–7 days | gclid capture failures |
For e-commerce with a clear on-site purchase event, a Google Ads tag via GTM is the most direct path. For SaaS trials where the meaningful conversion is activation or payment days later, offline imports win — even if they're slower and harder to set up. For lead-gen businesses, you probably need both: a lightweight on-site signal for bidding stability in the early days, plus offline imports once you have enough CRM data to close the loop.
The mistake most accounts make is not choosing. They accumulate all three sources for the same event without ever deciding which one drives the algorithm.
The offline conversion import problem
Offline conversions are where the real money is for lead-gen businesses. A form fill is not a sale. A qualified call is not a sale. The conversion that actually drives revenue happens in your CRM, days or weeks after the click.
Importing those conversions back into Google Ads is the right instinct. The execution is where it breaks.
The gclid problem
Every Google Ads click generates a gclid — a unique identifier appended to the landing page URL. To match an offline conversion to the original click, you need to have captured that gclid at the moment the user submitted your form and stored it in your CRM alongside the lead record. Google's own offline conversion import documentation makes this the primary matching method.
Many advertisers have reported declining match rates when a valid gclid is absent — a pattern that has intensified as cookie-based fallback matching has become less reliable. If your gclid capture is broken or inconsistent, your offline import match rate drops, and you only find out when you compare uploaded rows to matched conversions in the UI.
Three things break gclid capture silently:
- Redirect chains. If the landing page URL redirects before the form loads, the gclid parameter can be stripped.
- Form builders that don't pass hidden fields. Many drag-and-drop form tools need explicit configuration to capture URL parameters as hidden fields. The default is to ignore them.
- CRM integrations that don't store custom fields. Even if the form captures the gclid, if the CRM mapping drops it before saving the record, you're left with nothing to upload.
Check your last 30 leads in your CRM right now. If most of them are missing a gclid value, your offline import will match poorly regardless of how correctly you format the upload file.
Passing conversions from Mixpanel (or any third-party event tool)
The question of how to get Mixpanel conversion events into Google Ads comes up regularly, and the answer is more constrained than people expect.
Google Ads offline conversion imports accept a CSV upload or an API call via the OfflineConversionFeedService. Neither accepts a raw Mixpanel webhook payload natively. You have two real options:
Option 1: Middleware integration. Mixpanel can send webhook events when a conversion fires. A Zapier workflow — or n8n, or a custom Cloud Function — catches that webhook, formats the payload with the gclid, conversion name, and timestamp, and sends it to the Google Ads API. This works but adds a latency and failure point. If the webhook fires and the middleware errors, the conversion is lost without a retry mechanism.
Option 2: Batch export. Pull a daily or weekly export from Mixpanel of conversion events that include the stored gclid, format it as a Google Ads CSV, and upload manually or via script. Less real-time, but more auditable.
In both cases, the constraint is the same: you need the gclid in Mixpanel in the first place. That means your Mixpanel instrumentation needs to read the gclid from the URL on first page load and attach it to the user's Mixpanel profile as a property. If that step was skipped, neither option helps you.
Google's enhanced conversions for leads is worth testing if your gclid capture is inconsistent. Instead of matching on gclid, it hashes the email or phone number submitted in the form and matches it against logged-in Google account data. Match rates vary, but it can recover a meaningful share of conversions that would otherwise go unattributed. Set it up via the Google Ads tag or GTM — not via the GA4 import path.
Managed conversions and why they confuse experienced advertisers
"Managed conversions" in Google Ads refers to a mode where Google takes partial or full control of which conversion actions feed Smart Bidding. It's distinct from which conversions you report and which you use to bid.
The confusion, even among people who understand GTM and GA4 individually, is that Google can appear to be optimizing toward conversions you didn't explicitly choose — or ignoring ones you thought you'd set as primary. This happens because:
- Conversion actions marked "primary" are used for bidding. Actions marked "secondary" appear in reports but don't influence the algorithm.
- When you import from GA4, the default marking is primary. If you import several GA4 events without reviewing the settings, all of them feed Smart Bidding simultaneously.
- Google's automated recommendations can silently change conversion action settings; the UI notification is easy to miss.
The fix: in your Google Ads account, go to Goals → Conversions → Summary. For every conversion action, confirm whether it's set to primary or secondary, and confirm the counting method. This audit takes ten minutes and is almost always revealing.
Building a map before touching any settings
The recurring theme across broken tracking setups is that changes get made in isolation. Someone adds a GTM tag. Someone else imports a GA4 event. A third person uploads an offline CSV. Nobody knows what the other did.
Before changing anything, build a simple table:
| Conversion action | Source | Tag or import ID | Counting | Primary or secondary |
|---|---|---|---|---|
| Form submission | GTM (Google Ads tag) | AW-XXXXXXX | One per click | Primary |
| Form submission (GA4) | GA4 import | GA-XXXXXXX | Every | Primary |
| Qualified lead | Offline CSV upload | gclid match | One per click | Primary |
If any action appears twice with different sources, that's your duplication risk. If any offline action lacks a gclid-based match method, that's your match rate risk. This table takes an hour to build the first time and saves weeks of debugging later.
FAQ
What is the difference between GTM, GA4, and Google Ads conversion tracking?
GTM is a tag management container — it deploys tracking code but doesn't store data. GA4 is an analytics platform that tracks user behavior and can designate certain events as conversions. Google Ads conversion tracking is a separate system that attributes ad clicks to specific actions and feeds Smart Bidding. All three can coexist, but each needs to be configured deliberately or they will report different numbers for the same event.
Why are my offline conversion uploads matching at a low rate?
The most common cause is missing or corrupted gclid values. The gclid must be captured from the landing page URL at the moment of the click, stored in your CRM with the lead record, and included in the upload file. Redirect chains, form builders that don't capture URL parameters, and CRM integrations that drop custom fields all silently break this chain. Check your CRM records directly — if most recent leads lack a gclid, fix capture before troubleshooting the upload format.
Can I import GA4 conversions into Google Ads and also run a GTM-based Google Ads tag for the same event?
You can, but you shouldn't. Doing both creates duplicate conversion actions in Google Ads, which inflates your reported conversions and corrupts Smart Bidding. Pick one method per conversion action and disable the other.
How do I get Mixpanel conversion events into Google Ads?
You need a middle layer — either a webhook-to-API integration via a tool like Zapier or a custom script, or a batch export formatted as a Google Ads offline conversion CSV. In both cases, the Mixpanel event must include the gclid captured at the time of the original click. Without the gclid stored in Mixpanel as a user property, neither approach will match reliably.
What are enhanced conversions for leads and when should I use them?
Enhanced conversions for leads lets Google match conversions using hashed first-party data — email or phone number — rather than gclid alone. It's useful when gclid capture is inconsistent or when users convert across devices. It's not a full replacement for gclid-based matching, but it can recover a share of conversions that would otherwise go unattributed. Configure it via the Google Ads tag or GTM, not via the GA4 import path.
What does "primary" vs. "secondary" conversion mean in Google Ads?
Primary conversion actions are used by Smart Bidding to optimize toward. Secondary actions appear in reports but don't influence the algorithm. If you accidentally mark a soft event — like a page view or scroll depth — as primary, Smart Bidding will optimize toward it instead of your real business outcome. Audit your conversion action settings before enabling any automated bidding strategy.
Do I need GTM to run a Google Ads lead form campaign?
No. Google's native lead form extensions capture leads inside the platform without any site-side code. For simple campaigns, that's sufficient. But if you need to track what happens after the lead — qualification, sales calls, closed revenue — you'll need either GTM-based tagging on your site or a CRM integration with offline conversion uploads. GTM becomes essential as soon as your conversion definition moves past "form submitted."
The single most useful thing you can do today: open your Google Ads conversion summary, count how many primary conversion actions are live, and verify that no event appears more than once. If you find duplicates, pause the lower-quality source before touching any bid strategy. Everything else is downstream of that.

We build AdControlCenter — AI-powered ad management for anyone running their own ads. We write what we'd want to read: real numbers, no fluff, the things we wish we'd known when we started.
More from the team →Keep reading
All posts →
Why Google Ads Data Is Confusing—and How to Get Real Answers
Google Ads gives you more data than almost any ad platform—and somehow makes it harder than ever to get a straight answer.

Google PMax: What You Can Actually Control (And What You Can't)
PMax hands Google the wheel — here's the exact list of levers you still own, and how to use them before the algorithm makes decisions you can't reverse.

What ChatGPT gets wrong about Google Ads (with examples)
ChatGPT gives confident Google Ads advice that was accurate two years ago — here are the four mistakes that will cost you real money.