Self-Hosted Analytics: The Hidden Costs No One Talks About
The hosting bill is rarely the bill. Here's what self-hosting actually costs once you add the time.
Every privacy-conscious founder has had this thought: "I'll just self-host Plausible / Umami / Matomo. It's open-source. A $5 droplet. Done." You spin it up over a weekend, point your DNS, and feel rightfully smug about saving the SaaS fee.
Eighteen months later you have a Postgres instance you're afraid to upgrade, a Docker image two majors behind, and you realise you have not actually opened the dashboard in three months because the alerts you set up never worked. The self-hosting decision had a real cost — it just wasn't the one on the invoice.
This article is a sober look at what self-hosting actually costs for a small team. We make hosted analytics, so we're biased, but the spreadsheet below is honest.
Cost 1: the actual hosting bill
The smallest cost. A single VM running Plausible CE or Umami handles meaningful traffic — single-digit dollars per month on Hetzner, low double-digits on AWS / GCP / Vercel-tier providers. Database storage scales linearly with retention. For a typical indie SaaS the underlying infra runs $5–25 per month.
This is the cost everyone benchmarks against. It's also the smallest line in the spreadsheet, by an order of magnitude.
Cost 2: the initial setup time
The classic "weekend project" that's technically true and practically misleading. You'll get the dashboard loading in an evening. Getting it production-ready takes longer:
- Initial Docker / docker-compose setup: 1–2 hours if you've done it before, 4–6 if you haven't.
- TLS certificate + reverse proxy: Caddy makes it 10 minutes. Nginx with manual cert renewal makes it a recurring chore.
- Database backup automation: Setting up nightly Postgres dumps to S3 with rotation: another 2 hours, more if you actually verify the restore.
- Monitoring and alerting: Knowing when your analytics is down so you don't lose data silently. UptimeRobot or similar plus a webhook somewhere readable. 1 hour.
- DNS, geolocation database, mail config (Matomo): Each one is small. Together they're the long tail of small tasks.
Realistic total for a careful, production-grade install: 8–16 hours. At the conservative end of a contract developer rate ($75/hr), that's $600–$1,200 in time before you've recorded a single pageview.
Cost 3: ongoing patching and upgrades
Open-source projects ship patch versions monthly and major versions a few times a year. Skipping them is fine until it isn't — Postgres major upgrades are blocking, schema migrations sometimes need manual intervention, and Docker base images periodically have CVEs that affect you.
A reasonable maintenance budget is 1–2 hours per month just to apply updates and verify nothing broke. Annualised, that is 12–24 hours per year — another $900–$1,800 of engineering time that doesn't ship product.
More importantly, the time isn't evenly distributed. It shows up the day a major version drops, the day a security advisory hits, or the day Postgres 16 EOLs and you need to migrate. Hosted analytics absorbs all of this; self-hosting deferrers it to you.
Cost 4: the "wait, my analytics is down" tax
The day your droplet runs out of disk because the database tablespace grew faster than you expected, the day Postgres autovacuum stalls, the day your TLS cert renewal silently fails. You'll lose a couple of days of data and an afternoon of investigation.
Two or three of these per year is normal for any production service. Hosted vendors deal with the entire failure surface; self-hosters pay it directly.
Cost 5: the opportunity cost
The most expensive line and the one nobody puts in spreadsheets. Time spent maintaining analytics infrastructure is time not spent shipping product, talking to customers, or writing marketing.
For an early-stage indie founder this is the most expensive hour you have. For a small team it's the engineer's focus, which is at a premium. The hosting fee at most analytics SaaS is much smaller than the productive value of even a single shipped feature, and self-hosting steadily eats the input that produces those features.
The honest spreadsheet
| cost line | self-hosted | hosted SaaS |
|---|---|---|
| Hosting | $60–$300 / yr | Included |
| Initial setup time | $600–$1,200 once | $0 |
| Patching & upgrades | $900–$1,800 / yr | $0 |
| Incident response | $200–$800 / yr | $0 |
| SaaS fee | $0 | $60–$600 / yr typical |
| Total year-1 cost (time at $75/hr) | $1,760–$4,100 | $60–$600 |
The hourly rate is conservative — substitute your own. The shape of the table doesn't change. Self-hosting's break-even point against hosted SaaS only arrives at very high event volumes or for teams running many client sites in parallel.
When self-hosting actually wins
Three legitimate cases where the math flips:
// agency with many client sites
If you're hosting analytics for 10+ clients, a single Umami instance can absorb them all at fixed cost while hosted SaaS scales per site or per pageview. Margin can be the entire SaaS fee, multiplied across clients.
// hard data-residency requirements
Some industries (health, public sector, certain EU contracts) require data to never leave a specific jurisdiction. Hosted vendors increasingly offer regional options, but if your contract demands you can't trust them, self-host is the only answer.
// engineer-led team that enjoys the work
If running infrastructure is part of the team's identity and the time is genuinely budgeted, the financial maths matters less. Be honest about whether this is you. Most teams aren't.
How to decide in 30 seconds
One question: if your analytics service breaks at 11pm tonight, are you the one fixing it?
If yes, and that prospect doesn't bother you, self-hosting can work. If no, or if "the answer is yes but I don't like it," you're paying for hosted whether you call it that or not — just in time and stress instead of dollars.
If you do self-host, pick well
For self-hosters, the most-deployed options remain Plausible CE and Umami. Both are MIT/AGPL, both run on commodity hardware, both have active communities. Matomo is the heaviest but offers the most surface area if you actually need GA-style features. Detailed comparison in our Umami vs Matomo vs Datibase piece.
The bottom line
Self-hosted analytics is "free" the same way running your own email server is "free" — technically true, practically misleading. For most indie SaaS founders and small teams, the time spent is the dominant cost, and that time has a higher value when it's spent on product.
The right move for most teams is hosted, by a comfortable margin. The right move for some teams is self-hosted, for legitimate reasons. The wrong move is self-hosting because the monthly hosting bill is small, without doing the rest of the spreadsheet.
Skip the upgrade weekends
Datibase is hosted analytics with revenue attribution built in — no Docker, no Postgres tuning, no 2am migrations.
Try Datibase free