Feasible.lol

August 21, 2026 · 6 min read

What it costs to count a million pageviews

We measured what a million pageviews a month asks of a machine, then priced the machine. Then we put the invoices next to it.


A pageview, stored the way we store it, is 210 bytes. A million of them a month, kept for a full year, is about 3.5 GB.

That’s most of the post. But nobody’s analytics invoice looks like a 3.5 GB file, so it’s worth walking the rest of the way slowly.

What one million pageviews need

A million pageviews isn’t a million rows. Scroll and engagement pings ride along so you can have time-on-page and scroll depth, so the event count for a million-pageview month is about 1.39 million. Our benchmark stored 1,394,408 of them and the account database came to 293.8 MB, plus 4.2 MB for the system database that holds accounts, sites and sessions. Twelve of those months is about 3.5 GB.

The write rate is the part people get wrong. A million pageviews a month sounds like load. Spread over a month it’s about 0.4 writes a second.

One Feasible process accepts around 6,000 events a second through the whole path - parse, geolocate, hash, drop the IP, commit. Median time to accept one is 13 microseconds, and it stays there regardless of what else is writing. So the machine is doing roughly one fifteen-thousandth of what it could.

Reads are the same story, for a boring reason: the reports are built when the events arrive, not when you open the page. Twenty-eight days of top pages comes back in 81 to 111 milliseconds. Twelve months takes 0.4 to 0.7 seconds.

The floor we publish is one CPU core, 512 MB of RAM and a gigabyte of disk. What we’d put a busy site on is two cores and 2 GB, because headroom is cheap and pager duty isn’t.

Those figures are from internal/bench/RESULTS.md in our repo, measured on a laptop. The repo’s public and so is the benchmark. Run it and tell us if we’re wrong.

Server cost

This part is just shopping. Prices below are list, checked September 3, 2026.

HostPlanRAMTransferPer monthPer year
DigitalOceanBasic, 1 vCPU512 MiB500 GiB$4.00$48
DigitalOceanBasic, 1 vCPU1 GiB1,000 GiB$6.00$72
Vultrvc2-1c-1gb1 GB1 TB$5.00$60
HetznerCX23, 2 vCPU4 GB20 TB€5.49 net~€66 net

One note on that last row, because stale numbers circulate: Hetzner raised prices on June 15, 2026 - the CX23 went from €3.99 to €5.49, and their ARM boxes are now more expensive than the Intel ones. Any Hetzner figure from an older blog post is wrong, including the ones we used to quote at each other.

Then bandwidth. Our tracking script is 3,377 bytes gzipped, 7,099 raw. Assume a pessimistic 30% of pageviews fetch it fresh rather than from cache: 300,000 × 3,377 bytes is about 1 GB a month, against the 500 GiB that $4 droplet includes. It’s a rounding error, and it would still be a rounding error if we were ten times worse at caching.

Storage fits on the $6 box. CPU is asleep. Bandwidth doesn’t register. The box is $48 to $72 a year.

We don’t run one box, to be clear. Ingest is a separate tier from the app, and there’s more than one of each, because a single machine that reboots is an outage and we’d rather it weren’t. That’s a redundancy bill. It isn’t a large one, and it doesn’t scale with your pageviews the way an invoice does.

Other architectures cost more

This is the caveat, and it cuts against us in one place.

Plausible’s Community Edition runs three containers - their application, PostgreSQL and ClickHouse - and their README asks for “at least 2 GB of RAM” (github.com/plausible/community-edition, checked September 3, 2026). ClickHouse’s own documentation recommends 32 GB and warns that below 16 GB “you may experience various memory exceptions because default settings do not match this amount of memory” (clickhouse.com/docs/operations/tips, checked September 3, 2026).

That’s not a knock on either. ClickHouse is a column store, and column stores are extraordinary at the queries analytics asks. On ClickBench - ClickHouse’s own benchmark, built on 100 million real pageview rows - ClickHouse stores a row in 145 bytes where SQLite takes 758. If we told you SQLite was more efficient on disk, we’d be lying to you by a factor of 5.2.

What SQLite buys us isn’t bytes. It’s that there’s one file, one process, nothing to tune, no cluster to keep quorate, and a backup that’s a file copy. On a machine this small, that’s worth more than compression.

And credit where it’s due before we talk about money: the privacy-friendly analytics companies got the important thing right, and got it right first. No cookies, no cross-site identity, no selling behavior to advertisers. They made that normal while everyone else was still arguing about it. The disagreement below is about a price, not about principles.

Vendor prices

Annual list price, annual billing, at 1,000,000 pageviews a month. Checked September 3, 2026.

Vendor and planPer yearSitesSeatsRetention
Matomo Cloud$2,0403030Configurable
Plausible Business$1,39010105 years
Plausible Growth$1,040333 years
Plausible Starter$6901Owner only3 years
Fathom$60075Not publishedForever
Simple Analytics$6001013 years
Pirsch Standard$54050UnlimitedUnlimited
Umami Pro$24020102 years
Feasible$99UnlimitedUnlimited5 years

Two things about that table that matter more than the ordering.

The plans aren’t the same plan. Plausible’s $690 Starter is one site and no teammates, and custom properties, funnels and the Stats API all start on Business at $1,390. Comparing our price to Starter’s would be the same trick we’re complaining about, so we’ve listed all three.

The units aren’t the same unit. Matomo bills in hits - their own definition counts “a tracked page view, an event tracking, a download, an outlink, an onsite search or a content tracking request.” Turn on download and outbound-link tracking and a million pageviews can be two or three million hits, which is a different row on that price list. Simple Analytics and Umami count each stored event property as a unit of its own. We wrote a separate post about billing units, because it’s the part of the bill nobody puts on the comparison page.

Where the gap comes from

Some of it is real. Not the privacy part - privacy-friendly analytics is a design decision, not a line on an invoice. But a stack with a column store, a relational database and a queue in front of it costs more to run than one binary and a file - genuinely, not as a rhetorical device. Support costs money. Salaries cost money. A company that raised outside money has a number it has to hit, and that number is set by the people who wrote the check, not by the server.

Our costs are different because our company is different. One plan. No sales team. No investors. Twenty-odd years of Cloudmanic Labs paying for itself. That isn’t a virtue, it’s a starting position - but it’s why $99 works here and might not work somewhere else.

So: $48 to $72 a year for the machine. $99 to $2,040 a year for the service. We charge $99, both numbers are above, and we’re not going to draw the line between them for you.

We registered a .lol domain before we ran any of this. Running it didn’t change our minds.

The arithmetic is all reproducible - the pricing page has our side of it, the comparisons have theirs, and the benchmark is in the repo. If a number here is wrong, mail help@feasible.lol and we’ll fix the page.

Prices and features on this page were checked on September 3, 2026. Companies change their pricing; if something here is out of date, tell us and we'll fix it.


Also worth reading

Analytics you can afford. And read.

No credit card. $9.99 a month or $99 a year when the trial ends. Cancel any time.