I was paying Plausible $9/month to count pageviews on my blog. That's $108 a year for what is, fundamentally, INSERT INTO events (...).
So I moved to self-hosted Umami running entirely on free tiers. Six months later my total analytics bill is exactly $0 — and the dashboard loads faster than Plausible's did.
The Setup (Free Tier Stack)
| Component | Service | Free Tier Limit | My Usage |
|---|---|---|---|
| App server | Fly.io (shared-cpu-1x, 256MB) | 3 VMs free | 1 VM |
| Database | Neon Postgres | 0.5GB storage | 61MB after 6 months |
| Uptime monitor | Better Stack free | 10 monitors | 1 |
Total monthly traffic: ~40K pageviews across two sites. Umami handles it without breaking a sweat on a 256MB VM.
Deploy in 4 Commands
# 1. Create Neon project, grab the pooled connection string
# 2. Deploy Umami to Fly
fly launch --image ghcr.io/umami-software/umami:postgresql-latest
fly secrets set DATABASE_URL="postgres://...neon.tech/umami?sslmode=require" \
APP_SECRET="$(openssl rand -hex 32)"
fly scale memory 512 # 256MB OOMs on first migration
The one gotcha: the initial migration needs 512MB. After it completes, scale back down to 256MB and it runs fine. Took me two OOM crashes to learn that.
What I Gained vs What I Lost
Gained:
- $108/year back
- Data lives in my Postgres — I can query it directly (
SELECT referrer, count(*) FROM website_event GROUP BY 1 ORDER BY 2 DESC) - No cookie banner needed either way (both are cookieless)
Lost:
- I'm the on-call SRE now. Fly restarted the VM twice in 6 months; Umami came back up on its own both times.
- Plausible's email reports. I wrote a 12-line cron that psql's the weekly numbers into my inbox instead.
The Numbers After 6 Months
- Uptime: 99.7% (two auto-restarts, ~40s downtime each)
- Storage: 61MB of the 500MB free Neon allowance — good for roughly 4 more years
- Cold start: ~1.2s on first dashboard load (Fly scales to zero). Honestly the only thing that still annoys me.
The controversial part: for personal projects, paying for analytics is a tax on not knowing SQL. The whole product category is one GROUP BY away from being a side project.
What's your take — is self-hosting analytics worth the occasional 2am restart, or do you happily pay to never think about it?
I sketched the deploy script and the weekly-report cron with MonkeyCode (free, runs locally): https://ly.cyberserval.tech/iIETXiF
Top comments (0)