We measured 13 analytics scripts, and checked which ones ad blockers block
Original data. Every major analytics tracker fetched and measured in raw, gzip and brotli bytes, then checked against EasyPrivacy. Google Analytics is 41x heavier than sonex, and every privacy-first tool in the study is blocked.
All posts
On 2026-08-17 we fetched thirteen analytics trackers the way a browser would, measured them in raw, gzip and brotli bytes, and checked every vendor’s domain against EasyPrivacy — the filter list behind nearly every ad blocker. Two results are worth stating up front:
Google Analytics is 41 times heavier than the sonex tracker and 109 times heavier than the smallest one measured. And every privacy-first analytics tool in the study is on the blocklist. Being cookieless does not get you past an ad blocker.
Neither of those is the result we expected to publish, and the second one is inconvenient for us to admit. The method is below so you can check both.
Method
Each tracker was requested with a normal Chrome user-agent and Accept-Encoding: br, gzip, following redirects. The returned body was then compressed locally with gzip at level 9 and brotli at quality 11, so every vendor is measured with identical settings rather than whatever their CDN happened to negotiate.
Blocklist status was checked against EasyPrivacy, version 202608170651, last modified 17 Aug 2026 06:51 UTC.
Two entries were dropped: Google Tag Manager returned 404 without a valid container id, and Microsoft Clarity returned an empty 204 without a valid tag id. Neither could be measured honestly, so neither appears.
Results: bytes over the wire
Sorted by brotli, which is what a modern browser actually downloads.
| Tracker | Brotli | Gzip | Raw |
|---|---|---|---|
| Plausible | 1,122 | 1,279 | 2,841 |
| Vercel Web Analytics | 1,125 | 1,269 | 2,495 |
| Fathom | 1,776 | 2,064 | 6,905 |
| sonex | 2,968 | 3,306 | 7,179 |
| Pirsch | 3,050 | 3,506 | 11,842 |
| Simple Analytics | 3,407 | 3,830 | 7,515 |
| Datafast | 4,618 | 5,248 | 15,376 |
| Hotjar | 4,906 | 5,525 | 13,960 |
| Cloudflare Web Analytics | 10,034 | 11,402 | 31,612 |
| Matomo Cloud | 24,015 | 27,743 | 83,875 |
| Mixpanel | 29,437 | 33,569 | 104,089 |
| PostHog | 68,135 | 80,005 | 248,932 |
| Google Analytics 4 (gtag.js) | 122,345 | 147,058 | 418,891 |
We are fourth. Plausible, Vercel and Fathom all ship less JavaScript than we do, and we would rather say so plainly than quietly pick a different metric.
The gap that matters is not between the tools at the top of this table. It is the order of magnitude between all of them and what most of the web is actually running.
What the size costs
Three separate costs sit behind one number, and only the first is obvious.
Transfer. The compressed bytes. On a slow connection 122 kB is a visible delay; on a fast one it is nothing.
Parse and execute. JavaScript must be parsed, compiled and run. On a mid-range Android phone this typically costs more than the download, and it happens on the main thread — competing with your own page during precisely the window in which it is trying to become interactive. This is the cost that shows up in Interaction to Next Paint, where the threshold for “good” is 200 ms at the 75th percentile.
Requests. Several tools in this table load a bootstrap that then fetches more. The tag in your HTML is not always the whole cost, and a tracker loaded through a tag manager pays for both.
A useful way to read the table: the difference between the top four is roughly two kilobytes, which is smaller than most of the images on your page. The difference between the top four and gtag.js is a fifth of a megabyte of JavaScript, parsed and executed on every page load, for every visitor, forever.
Results: who ad blockers block
Now the uncomfortable half. EasyPrivacy carries rules for essentially every analytics vendor in the study, regardless of privacy posture.
| Tracker | Rules in EasyPrivacy | Example rule |
|---|---|---|
| Google Analytics | 17 | ||google-analytics.com^ and 16 more |
| Google Tag Manager | 13 | — |
| Plausible | 9 | ||plausible.io^$third-party |
| Mixpanel | 7 | — |
| Fathom | 4 | ||collect.usefathom.com^ |
| PostHog | 4 | — |
| Microsoft Clarity | 4 | — |
| Hotjar | 3 | — |
| Simple Analytics | 2 | — |
| Matomo Cloud | 2 | — |
| Cloudflare Web Analytics | 2 | — |
| Datafast | 2 | ||datafa.st^$third-party |
| Pirsch | 1 | ||pirsch.io^$third-party |
| Vercel Web Analytics | 1 | ||vercel-insights.com^$third-party |
| sonex | 0 | — |
The honest reading of that last row
We are not on the list because we are new and small. That is the entire explanation. There is no filter-list policy that exempts cookieless analytics, and there is no privacy property that a maintainer checks before adding a domain.
Plausible has nine rules against it. Pirsch, Datafast and Vercel have one each. All of them are cookieless, consent-free tools that collect no personal data, and all of them are blocked anyway. The list is organised around what a request is for, not around whether the vendor behaves well.
So the correct conclusion is not “use sonex to escape ad blockers”. It is: every analytics tool undercounts, the gap grows with your audience’s technical sophistication, and any vendor claiming otherwise is either new enough to be unnoticed or measuring something other than browsers.
What follows from this
Read your numbers as an index, not a census. Measured the same way over time, changes are reliable even when levels are understated. Nearly every decision made from analytics needs the direction, not the absolute.
Know which direction the bias runs. Blocked visitors are not a random sample. They skew technical and privacy-conscious, so every segment containing developers is understated more than the site average. If you sell to engineers, your real audience is meaningfully larger than your dashboard says.
Take money from a system of record. This is why sonex reads revenue from Stripe or Polar through their APIs rather than from a browser event. A blocked tracker loses a pageview; a blocked purchase event loses a sale from your reporting. The payment provider is never blocked, because the payment already happened.
Do not fight the filter lists. Rotating domains, first-party proxying and other evasions work briefly, invite a more aggressive rule, and are precisely the behaviour that regulators have criticised in server-side tracking setups. The visitor turned it on deliberately.
Limits of this study
Stated plainly, because a study that hides these is not worth citing:
- One file per vendor. Several tools offer extended builds — outbound links, file downloads, revenue, session recording — that cost more than the default measured here. The comparison is of default installs.
- A point in time. These files change. Every number here is from 2026-08-17, and the EasyPrivacy commit is named above so the check can be repeated exactly.
- Filter rules are not the same as blocking rate. A domain being on EasyPrivacy tells you the tool is blocked for users running a blocker with that list. It does not tell you what share of your audience that is, which varies enormously by audience.
- Size is not quality. PostHog and Mixpanel are large because they do far more than count pageviews — session recording, feature flags, product analytics. Comparing them to a pageview counter on bytes alone is not a fair comparison of value, only of cost.
- We measured our own product. We have an obvious interest here, which is why the method, the versions and the raw numbers are all published rather than summarised.
Reproduce it
The measurement is a short script: fetch each URL with a browser user-agent, compress the body with zlib.gzipSync at level 9 and zlib.brotliCompressSync at quality 11, and report the byte lengths. The blocklist check is grep against the EasyPrivacy file linked above.
If you re-run it and get different numbers, they are probably newer than ours. Publish them.
sonex is revenue-first web analytics: revenue read from Stripe or Polar beside the traffic that earned it, no cookies, no consent banner, and a tracker we just told you is only the fourth smallest. Start free.
Frequently asked questions
- How big is the Google Analytics script?
- Measured on 2026-08-17, gtag.js for a GA4 property is 418,891 bytes uncompressed, 147,058 bytes gzipped and 122,345 bytes brotli-compressed. Brotli is what a modern browser actually downloads. That is roughly 41 times the size of the sonex tracker and about 109 times the size of the smallest tracker measured.
- Do ad blockers block privacy-friendly analytics?
- Yes. EasyPrivacy, the filter list nearly every blocker uses, carries rules for Plausible, Fathom, Simple Analytics, Pirsch, Matomo Cloud, Datafast, PostHog and Cloudflare Web Analytics. Being cookieless does not exempt a tool from the list.
- Does analytics script size actually matter for page speed?
- The download is the smaller half. JavaScript must also be parsed and executed on the main thread, and on a mid-range phone that cost exceeds the transfer cost. A 122 kB script competes with your own page during the window in which it is trying to become interactive.
- How can I check my own analytics script size?
- Open your browser's network panel, find the analytics script, and read the transfer size column rather than the resource size column. Transfer size is the compressed bytes that actually crossed the network.
sonex is privacy-first web analytics. No cookies, no consent banner, no personal data. Drop one script and read realtime visitors, funnels and a world map in seconds.
Try sonex free