Conversion Tracking · Architecture
What's the difference between Google Tag Manager and GA4?
Google Tag Manager is a container that loads and fires tracking tags on your site. GA4 is an analytics product those tags send data to. GTM is the plumbing. GA4 is one of the destinations the plumbing feeds. You run both, doing different jobs.
They are not competing tools
People line these two up as if you pick one. You do not. Google Tag Manager and GA4 sit at different layers of the same stack and do different jobs.
Google Tag Manager (GTM) is a tag-management system. It is a single container snippet you place on your site, and from then on you add, edit, and fire tracking tags from the GTM interface instead of editing site code. Those tags can be a GA4 tag, a Meta Pixel, a Google Ads conversion tag, a TikTok pixel, a server-side endpoint, or a custom HTML script.
GA4 (Google Analytics 4) is an analytics product. It is a destination. It collects events, sessions, and conversions, then gives you reports on traffic, behavior, and attribution. GA4 has to receive data from somewhere, and on most sites that somewhere is a GA4 tag fired by GTM.
So the relationship is plumbing and fixture. GTM is the plumbing that decides what fires, when, and with what data attached. GA4 is one fixture the plumbing feeds. You can run GA4 without GTM by hardcoding the gtag.js snippet, and you can run GTM without GA4 by sending data only to other platforms. On a real ecommerce or lead-gen site you almost always run both.
What each one actually does
GTM: the firing layer
GTM works on three primitives.
- Tags are the code that runs: a GA4 event, a conversion pixel, a remarketing script.
- Triggers decide when a tag fires: a page view, a button click, a form submission, a custom dataLayer event like
purchase. - Variables pull in the values a tag needs: order value, transaction ID, page path, a click element’s text.
The dataLayer is the spine. It is a JavaScript object your site (or your platform) pushes structured data into, and GTM reads from it. A clean dataLayer with purchase, value, currency, and transaction_id is the difference between tracking that reconciles and tracking that does not.
GA4: the reporting layer
GA4 takes the events GTM sends and organizes them. Every interaction is an event. Some events get flagged as conversions (now called key events). GA4 builds sessions, assigns channels, runs attribution models, and lets you build explorations and audiences. It does not decide what fires on your site. It reports on what it receives.
Why the distinction matters in practice
Most tracking problems I get called in on are layer-confusion problems. Someone says GA4 is wrong, when the real issue is that GTM is firing the GA4 tag twice, or firing it before the dataLayer is populated, or firing it with a missing transaction_id. GA4 is reporting the data faithfully. The data going in is broken, and the break is in GTM.
A few patterns I see repeatedly:
- Double-counting. GA4 is installed once through the gtag.js snippet hardcoded on the theme, and a second time through a GA4 tag in GTM. Pageviews and revenue both inflate. The fix is to pick one delivery method, not to touch GA4 settings.
- Pageview-only tracking. GTM fires the GA4 config tag on every page but never sends ecommerce or lead events. GA4 looks alive, sessions count, and yet GA4 and Meta or Google Ads never reconcile because the conversion events were never wired.
- Race conditions. The GA4 tag fires on the standard page-view trigger before the platform pushes purchase data into the dataLayer, so the value lands empty. The tag fired. The number is zero.
If you cannot tell which layer a number lives in, you cannot debug it. That is the entire reason to keep these straight.
How they fit with the rest of the stack
GTM is where you also feed everything that is not GA4. The Meta Pixel, Google Ads conversions, and server-side tagging through a tool like Stape all run as tags in the same container, reading the same dataLayer. That shared source is what gets your platforms to agree. When GA4, Meta, and Google Ads all read the same purchase event with the same value, they reconcile. When each one is wired separately by a different person at a different time, they drift.
GA4 sits downstream as a reporting and audience source. You can pipe GA4 audiences and conversions back into Google Ads, which is useful, but that is GA4 acting as a data source, not as a tag manager.
The short version
Think of it this way. GTM is the question “what fires, when, with what data.” GA4 is the question “what happened on my site, organized into reports.” One is delivery. One is destination.
If you are setting up tracking from scratch, install GTM first, build a clean dataLayer, then add a GA4 tag inside GTM along with your ad-platform tags. That order keeps every platform reading one source.
If your numbers already disagree across platforms, do not start in GA4. Start in GTM and the dataLayer, because that is where the firing logic lives, and firing logic is where most reconciliation failures are born.
Related questions
-
What conversion value should I send to Google and Meta, and how do I keep them reconciling?
How to pick the conversion value you send to Google Ads and Meta so the two platforms reconcile with each other and with the numbers in Shopify or your CRM.
Read the answer
-
What are enhanced conversions in Google Ads and how do I set them up correctly?
How enhanced conversions work in Google Ads, the two types (Leads and Web), setup paths via GTM or the API, and the consent and hashing rules that decide match rates.
Read the answer
-
Why don't my GA4 and Meta conversion numbers match?
GA4 and Meta count conversions differently: attribution windows, modeling, and dedup. Here is how to read the gap and when it signals a real tracking problem.
Read the answer
Want this diagnosed in your account?
Same diagnosis,
run on your account.
Thirty minutes on the phone. I look at your spend, your tracking, and your search-term reports before the call. You walk out with a clear list of what is leaking and what to fix first.