The problem: three dashboards, three different numbers
You open GA4 and see 120 enquiries last month. Google Ads says 165. Meta says 210. Your CRM says 98 real leads. None of these tools is lying on purpose. Each one counts different things, and some of them are counting the same thing twice. This course is about getting to numbers you can defend. It starts with how the data gets from your site into those tools.
Life before tag managers
Every marketing tool used to ask a developer to paste its own JavaScript snippet into the site template:
<!-- In the <head> of every page, added by hand -->
<script async src="https://www.googletagmanager.com/gtag/js?id=G-ABC123"></script> <!-- GA4 -->
<script> /* Google Ads conversion snippet, pasted in 2022 */ </script>
<script> /* Meta pixel, pasted by an agency in 2023 */ </script>
<script> /* Hotjar, LinkedIn, TikTok ... */ </script>
Any change meant a developer ticket and a release. Nobody had a list of what was installed. Snippets stayed on the site long after the contract that added them had ended. And when the site was redesigned, the conversion snippet on the thank-you page quietly disappeared.
What Google Tag Manager actually does
Google Tag Manager (GTM) replaces all of those with one snippet, the container:
<!-- The only tracking code developers install -->
<script>(function(w,d,s,l,i){ /* loads gtm.js */ })(window,document,'script','dataLayer','GTM-XXXXXXX');</script>
Think of GTM as a switchboard between your page and your tools:
web page ──events──▶ GTM container ──rules──▶ GA4 (page_view, generate_lead)
(clicks, page loads, (decides WHAT fires, Google Ads (conversion)
form submits) WHEN, with WHAT data) Meta pixel (Lead)
The container watches what happens on the page. When something matches a rule you set up, it sends the right data to the right tool. Because those rules live in GTM's web interface and not in your site code, marketers can change tracking without a code release. Every change is also kept as a version you can roll back. We cover that properly in the next level.
Trade-off: GTM makes tracking easier to change. That includes breaking it. A tag manager doesn't make data accurate by itself. It puts all your tracking in one place where you can see it and fix it.
Why numbers go wrong: the usual suspects
| Cause | What happens | Can GTM fix it? |
|---|---|---|
| Duplicate tags | GA4 is hard-coded and added through GTM, or a plugin adds a second copy, so every page view or lead counts twice | Yes. Keep one source, remove the other |
| Missing tags | A redesign removed the thank-you page, or the form now submits without reloading the page, so nothing fires | Yes. Fire on the real success signal |
| Over-eager triggers | A "lead" fires on every button click or every refresh of the thank-you page | Yes. Tighter trigger rules |
| Consent gaps | Tags fire before the visitor answers the cookie banner (a compliance risk), or never fire at all because consent isn't passed on | Partly. GTM supports consent mode, but you need a properly configured banner as well |
| Ad blockers and browser privacy | Requests to analytics and ad domains are blocked, so data is lost | Mostly no. Server-side tagging (outlined later in the course) reduces it but doesn't remove it |
| Attribution differences | Each platform credits conversions under its own rules | No. This is how the platforms are designed. Learn the rules |
Attribution needs its own explanation because it causes most "the numbers don't match" arguments:
- Google Ads only credits conversions to Google Ads clicks, uses a 30-day click window by default, and can count view-through conversions as well.
- Meta's default setting is 7-day click plus 1-day view. Someone who scrolled past your ad yesterday and then bought through Google can be claimed by Meta and by Google Ads.
- GA4 credits a conversion across every channel, so only one channel ends up with each conversion.
So Ads + Meta adding up to more than GA4 is normal. A 2× gap inside GA4 alone is not.
One naming note, current as of 20 October 2026: GA4 now calls its important events key events. When you share a key event with Google Ads, it becomes a Google Ads conversion. Also, GA4 deduplicates purchase events that share a transaction_id from the same user on web streams. Other events get no such protection, so a duplicated generate_lead is simply counted twice.
Hands-on: find a tag that fires twice
Use your test site, or any site you are allowed to inspect.
1. Go to https://tagassistant.google.com
(optional but recommended: install the Tag Assistant Chrome extension)
2. Click "Add domain", enter https://your-test-site.example, click "Connect"
3. Your site opens in a new window in debug mode. Load a page, then go back
to the Tag Assistant tab.
4. Look at the list of tags across the top: one entry per GTM container
or Google tag (GTM-..., G-..., AW-...) found on the page.
Here is a typical result on a site with a duplicate:
Tag Assistant: your-test-site.example
GTM-XXXXXXX container found
G-ABC123 Google tag found <- loaded by GTM
G-ABC123 Google tag found <- loaded AGAIN by hard-coded gtag.js
Select G-ABC123 > Hits sent, after ONE page load:
page_view ...
page_view ... <- two page_views for one page load = duplicate
What to check:
- Same measurement ID listed twice, or two
page_viewhits for one page load. That's a classic duplicate. - Find the second source: view the page source (Ctrl+U) and search for
gtag/js?id=G-. If it's there and GTM also fires a GA4 tag, you've found the problem. - No GTM container or Google tag listed at all on a page you expected to be tracked means tracking is missing.
Gotcha: Only remove the duplicate once you know which copy the rest of your setup relies on. Removing the wrong copy turns a duplicate into a missing tag. For now, write the finding down. Fixing it properly comes in later levels.
Best practice: Write down what you find (IDs, pages, how many hits). That note becomes the first entry in your tracking audit.
Key takeaways
- GTM is a switchboard. One container snippet replaces many hard-coded snippets, and rules decide which tool gets which data, and when.
- Duplicate tags, missing tags, over-eager triggers, consent gaps, ad blockers and attribution rules all distort your numbers.
- GTM can fix duplicates, missing tags and bad triggers, and it helps with consent. It can't stop ad blockers or make platforms agree on attribution.
- Ad platforms each claim credit under their own windows, so their totals often add up to more than GA4's. That's expected.
- Tag Assistant (tagassistant.google.com) shows which Google tags load and which hits they send. The same ID twice, or two
page_viewhits per page load, means a duplicate.