We measured how much JavaScript five analytics tools make your visitors download
Every analytics tool works the same way at heart: a script tag on your page sends a request when someone visits. The difference is how much code that script makes every single visitor download first.
We measured it. Here are the compressed transfer sizes — the bytes a visitor's browser actually pulls over the network — first measured on June 10, 2026. The Plausible and Fathom rows were re-measured directly on September 8, 2026 and both changed; the Matomo and Google Analytics rows are still the June figures, labelled as such below.
| Tool | Compressed size | Relative to Simplytics |
|---|---|---|
Simplytics (track.js) |
1.8 KB | 1× |
Plausible (base script.js) |
1.3 KB | 0.7× |
| Plausible (with outbound links, downloads and events) | 2.1 KB | ~1.2× |
| Fathom | 2.1 KB | ~1.2× |
Matomo (matomo.js) |
~20 KB (their forum's figure, not ours) | ~11× |
Google Analytics 4 (gtag.js) |
~140 KB (June 2026) | ~78× |
How we measured
For our own script and Google's, we downloaded the files and compressed them the way a web server would:
curl -sL https://simplytics.dev/track.js | gzip | wc -c
# 1799 bytes
curl -sL "https://www.googletagmanager.com/gtag/js?id=G-XXXXXXX" | gzip | wc -c
# 139994 bytes
Raw, uncompressed, gtag.js is about 395 KB of JavaScript. And that is before a tag manager container or a cookie-consent banner script, which GA4 setups in the EU usually need — consent platforms commonly add another 35–120 KB.
For Plausible and Fathom we stopped using their published claims and downloaded their scripts the same way, on September 8, 2026 — plausible.io/js/script.js came to 1,296 bytes gzipped and cdn.usefathom.com/script.js to 2,097. Plausible ships its optional features as separate bundles, so the like-for-like comparison against Simplytics (which includes outbound links, downloads and events as standard) is script.outbound-links.file-downloads.tagged-events.js, at 2,084 bytes. Matomo is the one number we cannot stand behind on our own measurement: it is the forum-documented size of a default install, and the only instance we can fetch without an account is the plugin-laden public demo at ~46 KB.
Plausible's base script is smaller than ours. We said 2.5 KB here for three months and it was wrong; this is the corrected number.
Does ~140 KB actually matter?
For one visit on fast Wi-Fi: not much. Across every visitor, on mobile networks, it adds up to real cost:
- Page weight budgets. 140 KB is more JavaScript than many entire pages ship. If you care about Core Web Vitals, your analytics tool should not be your heaviest script.
- Parse time on cheap phones. Downloading is half the story — a low-end Android phone also has to parse and execute that JavaScript on every page load.
- Data caps. A site with 50,000 monthly pageviews makes its visitors collectively download ~7 GB of analytics JavaScript per month with gtag.js. With a ~1.8 KB script, it is ~95 MB.
The honest caveat
Google Analytics does vastly more than we do — ads attribution, audiences, BigQuery export, predictive metrics. If you use those features, the 140 KB buys you something real. Our argument is narrower: most site owners open analytics to see visitors, pages, referrers, and where traffic comes from. Shipping ~78× the JavaScript for numbers you could get from a 1.8 KB script is a bad trade.
That is the entire idea behind Simplytics: the essential numbers — visitors, views, referrers, countries, devices, traffic channels including AI assistants, sessions, custom events, outbound clicks, funnels — from a ~1.8 KB cookie-less script, for $1/month billed yearly. You can compare the rest of the trade-offs honestly on our comparison pages, including the full Google Analytics comparison.
Measurements taken June 10, 2026, with Plausible's and Fathom's re-measured directly on September 8, 2026 (they had been quoted from the vendors' own claims, and both had drifted — Plausible's downward, Fathom's upward past the "<2 KB" it no longer meets); our own number re-measured June 11, 2026 after custom-event and outbound-click tracking shipped in track.js (1,051 → 1,574 bytes — the new features cost half a kilobyte), again June 12, 2026 after single-page-app auto-tracking shipped (1,574 → 1,985 bytes), and again September 4, 2026, when it went down (1,985 → 1,799 bytes) — a prerender guard and a delayed first heartbeat were added, and the explanatory comments were moved out of the served file, where every visitor had been downloading them. Sizes change as vendors update their scripts — if you spot a stale number, email us and we will re-measure.