About Services Cases Blog Tools Reviews Partners Contacts

Analytics at Risk: What Ad Blockers and Incognito Mode Do to the Events on Your Site

Analytics at Risk: Ad Blockers and Incognito Mode

A very delicate question that everyone has run into: why don’t sales match the ad account, analytics and the actual CRM data? And it’s not just about sales events — it’s about event tracking in general.

Contents
  1. Background
  2. Tools for the test
  3. Test one: a browser without blockers
  4. Test two: a browser with the uBlock ad blocker
  5. The second cause: incognito mode
  6. How widespread the impact is
  7. Conclusion
  8. FAQ

A disclaimer right away: this article doesn’t cover slow page loading — there the cause is clear: the page takes too long to load, scripts don’t have time to fire, events don’t get tracked. That’s a separate topic.

Let’s look at a real example, in real time, at how ad blockers (using uBlock as the example) and incognito mode in some browsers prevent certain events from being tracked.

Video: Analytics at Risk: What Ad Blockers and Incognito Mode Do to the Events on Your Site

Background

I built a script for my own needs. While testing it, I noticed that the information the script was supposed to send didn’t reach the system from every device. I started digging deeper — and a well-known fact kicked in: ad blockers and some browsers in incognito mode prevent trackers from running on the site.

Tools for the test

  • A test site with the script installed
  • The browser console
  • A Telegram bot that receives information from the script when a trigger fires on the site

Two verification methods: through the bot in real time, and directly through the browser console.

Test one: a browser without blockers

I refresh the page — the trigger is set on page load. Switch to the bot — the information came through: the event is tied to a dataLayer-level event, and everything fired.

In the console I run the dataLayer call — the data is there, everything’s fine. I check whether the system sees Google Tag Manager itself — yes, it does, a GTM object has loaded in this browser.

Note: this browser has no blockers at all — it’s clean. As a control, I send one more event by refreshing the page again — the trigger fired, and the information reached the bot again. Everything works correctly.

Test two: a browser with the uBlock ad blocker

I refresh the page in the browser with uBlock. We wait. Switch to the bot — and there’s nothing. The event didn’t fire and wasn’t sent.

I call dataLayer through the console in this browser — and there’s nothing in it. Comparing the dataLayer code in both browsers, they differ significantly: the browser without a blocker has far more events, while in the browser with a blocker the events are simply missing.

Key point. The ad blocker blocked the Google Tag Manager script itself from loading. Everything inside GTM simply doesn’t work — all the trackers, all the events you send technically fire on the site but never reach the analytics system, because the main script responsible for loading GTM is blocked.

The second verification method is a function that detects GTM in the browser. In the browser with a blocker it returns undefined — meaning it doesn’t see GTM. In the browser without a blocker the same function returns a full object — GTM is detected and working.

Bottom line for this cause: in the browser without a blocker, GTM is there, detected and working. In the browser with a blocker — it isn’t there, isn’t detected and doesn’t work.

The second cause: incognito mode

Same test, but in mobile Safari in incognito mode. I load the site — nothing happens. Safari + incognito mode blocks trackers just like an ad blocker does.

I tested several combinations — Chrome, Chrome incognito, Firefox, Firefox incognito. In different variations it sometimes fired and sometimes didn’t — there’s no consistent pattern.

How widespread the impact is

There’s no correlation between a specific project and the percentage of lost data. In some cases 10% of data may not come through, in others 20%. On small data volumes there are cases where the error exceeds even 50%.

It all depends on the specific project’s audience and what tools (anti-detect browsers, blockers) it uses to avoid having its interactions with the site tracked.

This is quite common — you’ve definitely seen it in practice: when you use an ad blocker and go to a site, the site (especially one offering free content) asks you to turn off the blocker. First, to show the ad units embedded on the site. Second, to be able to track user interactions and metrics.

Conclusion

Next time a client asks why the data in analytics or the ad account doesn’t match the actual data in CRM — you can show them exactly this kind of test. Provided your tracking is set up and tested correctly and you’re 100% sure of it. I wrote separately about how to build a system that shows the real picture instead of the numbers in the ad account in the article on end-to-end analytics.

Losing part of the data to blockers and incognito mode isn’t a setup error but an objective technical limitation that every site faces, regardless of tracking quality. I looked at a similar gap between the ad account and reality in the case about a chain of metal warehouses — only there the cause was untracked conversion sources, not blockers.

One of the simplest ways to recover some of the data that blockers cut is Google Tag Gateway. Step-by-step setup via GTM and Cloudflare — in the article “Google Tag Gateway: +14% More Data in 2 Minutes”.

But even complete data will not help if the events themselves are set up wrong. Typical Google Tag Manager mistakes — in the article “GTM Tracking for $750 a Month”.

What direct traffic and lost attribution look like in real channel data — in the breakdown of 9,171 leads and 425 deals from Google Ads, SEO, Meta and TikTok.

Another cause of data loss is a missing or misconfigured consent mode for the EEA and the UK. More — Consent Mode v2 setup.

To keep traffic sources from getting lost in analytics, tag your links, for example with the free UTM builder.

How to see in GA4 how many transactions get lost — see 11 GA4 reports I use in my work.

Related services
Conversion tracking with GTM and GA4 Accurate tracking: Google Tag Manager, GA4, Enhanced Conversions, Google Tag Gateway. from $50Learn more End-to-end analytics All inquiry sources and CRM sales in one picture: you see which channel actually brings money. from $400Learn more
Suspect some of your conversions get lost before they ever reach analytics? Get in touch, we’ll check

FAQ on the topic

Frequently asked questions

Why does an ad blocker break site analytics?
Blockers like uBlock don’t block individual events — they block the Google Tag Manager loading script itself. If GTM doesn’t load in the user’s browser, none of the tags inside it — analytics, conversions, pixels — can physically fire, even if the code on the site is set up correctly.
Does incognito mode affect event tracking the same way blockers do?
Yes, although the mechanism is different and less predictable. Some browsers in incognito mode (especially mobile Safari) restrict trackers by default. There’s no consistent pattern between browser, platform and outcome — tracking works in some combinations and not in others.
How much data is actually lost to blockers and incognito?
There’s no universal number — it all depends on the specific project’s audience and how often it uses blockers or private browsing modes. In practice, losses can range from 10% to 20%, and on small data volumes the error sometimes exceeds 50%.
How do you check whether GTM is blocked in a specific browser?
The simplest way is to open the developer console on the site and call the dataLayer variable. If it’s empty or missing where a normal browser would have it full of events, that’s a sign the GTM script didn’t load. The second way is to check a function that detects the GTM object: undefined means the tracker is blocked.
Does a mismatch between the ad account and CRM mean tracking is set up wrong?
Not necessarily. If tracking is set up and tested correctly, part of the mismatch is an objective technical limitation caused by ad blockers and private browsing modes, which every site faces regardless of setup quality. Before hunting for an error, first check whether this is the cause.



Contact

Let's discuss
your project

Leave a request — we'll assess your situation, discuss your goals and find the best solution for your business and budget.

🏆
As a Google Partner, I can help you get a Google Ads bonus of up to 55,000 UAH ($1.2K) for your first campaigns.
❌ I don't work with: gambling · betting · alcohol · tobacco · crypto · grey niches · payday loans
▸ new_project.init()
Discuss a project