For Umami
Umami on Edge, one VM for every site you track
Free to sign up. No egress fees on any product.
Why Umami on Edge
The lightest analytics stack that still does the job
Small script, small stack
A tracker of about 2 KB and a Node.js app with Postgres behind it. It sits comfortably on a small VM.No cookies, no personal data
Umami sets no cookies and collects no personal data, so most sites run it without a consent banner.Tracker from the CDN
script.js caches in 988 locations on your own domain. Rename it with TRACKER_SCRIPT_NAME if ad blockers get in the way.Unlimited websites
Add every site you run to one instance and share dashboards per site or per team. Made for agencies.Events, goals and funnels
Real-time dashboards, custom events with properties, goals and funnels. Enough analytics for most teams.Flat price, unlimited events
Umami Cloud prices by events. Self-hosted on Edge, a busy month costs the same as a quiet one.
Reference architecture
How Umami maps to Edge
Client sites
acme.com, shop.acme.com, …
Server-side events
POST /api/send from your API
stats.acme.com
script.js cached, /api/send passed
umami :3000
Node.js · Docker · s-2vcpu-4gb
postgres:16
websites, sessions, events
umami-backups
nightly pg_dump
Deploy
Umami in four steps
- 01
Create a Docker VM
The docker library script installs Docker CE and Compose on first boot.
shell$ edge compute create --name umami --size s-2vcpu-4gb \ --image ubuntu-24 --region london --script docker - 02
Write the compose file
Keep DB_PASSWORD and APP_SECRET in a .env file next to it. Umami creates its tables on first start.
docker-compose.ymlservices: umami: image: ghcr.io/umami-software/umami:postgresql-latest ports: ["127.0.0.1:3000:3000"] environment: DATABASE_URL: postgresql://umami:${DB_PASSWORD}@db:5432/umami APP_SECRET: ${APP_SECRET} depends_on: [db] restart: always db: image: postgres:16-alpine environment: POSTGRES_DB: umami POSTGRES_USER: umami POSTGRES_PASSWORD: ${DB_PASSWORD} volumes: ["umami-db:/var/lib/postgresql/data"] restart: always volumes: umami-db: - 03
Start it and put the CDN in front
Proxy :443 on the VM to port 3000. Then sign in as admin / umami and change the password straight away.
shell$ docker compose up -d $ edge cdn create --name umami $ edge cdn domains add cdn-a1b2c3 \ --domain stats.acme.com \ --origin https://<vm-ip> - 04
Track your sites
Add each website in the dashboard to get its ID, then add the tag. Custom events are one call.
index.html<script defer src="https://stats.acme.com/script.js" data-website-id="94db1cb1-74f4-4a40-ad6c-962362670409"></script> <script> // custom event with properties umami.track('signup', { plan: 'pro' }) </script>
Prefer to hand it off? Give the job to your AI agent or have our engineers do it.
What it costs
Twenty client sites, one line on the invoice
- Unlimited sites and events on one VM
- Under ~500k events a month, the $9.62 Starter size is enough
- No consent banner to build
- Zero egress on dashboards and exports
Estimated monthly bill on Edge
Agency · 20 client sites · ~1M events a month
- Compute$19.24Standard VM · 2 vCPU · 4 GiB · 80 GB NVMe
- CDN$0.25~1.5M requests (events + tracker), first 500k free, then $0.25/M
- Storage$0.00Nightly dumps, inside the 5 GB free tier
- DNS$0.00Zone and records for stats.acme.com
- Egress$0.00
FAQ
Umami on Edge, answered
How does this compare to Umami Cloud?
Umami or Plausible?
Can I run it for clients?
How small can the VM be?
Will ad blockers stop it?
Drop-in services
Add these without touching the stack
- Edge ShieldBot protection
POST /siteverify → score: 94Check sign-ups and form posts with one server-side call, then record only the humans as Umami events.
Free for most sites. No puzzles, no widget to style.Explore - Edge AssistAI answers
<script src="…/assist.js">Drop one script tag next to the Umami tracker and give visitors answers grounded in your own pages.
Free tier: 250 answered questions a monthExplore
Stand up Umami
Start free. Track every site you run from one small VM.
Free tiers hard-cap. Nothing bills until you add a card.