DEV Community

Alex Chen
Alex Chen

Posted on

I Replaced Plausible ($9/Month) with Umami on Neon's Free Tier — 6 Months, $0 Total

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
Enter fullscreen mode Exit fullscreen mode

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)