Migrating to Umami Analytics

By Lucas Brandao · São Paulo · verified 2026-05-04 · edit on GitHub

Umami is the destination for developers, agencies, and license-conscious teams who want a self-host tracker on an MIT license, deployable on free-tier infrastructure in under an hour. Single-developer founded, MIT-licensed (not AGPL), runs on either MySQL or PostgreSQL, Docker-first packaging, and a Cloud option for teams that want to skip the deploy step. This page is the cross-source map: where you are coming from determines which migration guide to follow, which auto-event mapper to use, and which reconciliation gotchas to expect. Read the source map first, then click into the matching pair page for the install.

From which source — pick your starting line

Five common origin points and their dedicated pair pages.

In progress · Pair page

Coming from GA4

The flagship inbound path. Auto-event mapping covers around 50 of 120 typical GA4 events; Umami's event model is simpler than GA4's but richer than Fathom's, and the unmapped tail becomes Umami events via the JS API. Cookie-banner removal is the largest behavioral change. Cookieless mode is the default.

GA4 → Umami →
In queue

Coming from Universal Analytics

UA was sunset 2024-07-01. Historical-data export route, not a live cutover. Pull your UA export from BigQuery, transform it into Umami's event schema using the SQL importer (less polished than Plausible's or Matomo's), and load. The live tracker step is a fresh install.

UA → Umami (stub) →
In queue

Coming from Mixpanel

Hard case. Mixpanel is event-first with rich properties; Umami supports custom event properties but the dashboard is page-first. Most teams keep Mixpanel for product analytics and add Umami for marketing-page analytics in parallel.

Mixpanel → Umami (stub) →
In queue

Coming from Plausible

A license-driven move. Plausible Community Edition ships under AGPL; Umami ships under MIT. For agencies hosting analytics for paying clients, or startups embedding analytics in a self-hosted product they sell, the AGPL → MIT path lets them avoid the AGPL "must-publish-modifications" obligation.

Plausible → Umami (stub) →
In queue

Coming from Simple Analytics

Niche but real. Simple Analytics is closed-source cloud-only; teams that want the same simplicity but on self-host pick Umami. The migration is a fresh install plus a CSV import of historical data.

Simple Analytics → Umami (stub) →

If your source is none of those — Adobe, Heap, Amplitude, Snowplow — file an issue on GitHub. The pair page roster is built by request.

Umami's structural choices

Four architectural commitments that shape what Umami is and is not. None are roadmap items.

MIT license, not AGPL. The headline difference from Plausible Community Edition. MIT permits private modifications without a corresponding obligation to publish source. For agencies hosting analytics for paying clients, for startups embedding analytics in a closed-source SaaS product, for any team that wants to fork the dashboard internally without contributing the fork upstream, MIT is the meaningful permission. AGPL forks of Plausible CE are technically legal but operationally fragile; an MIT fork of Umami is straightforward.

MySQL or PostgreSQL — your choice. Umami runs on either, and the schema is Prisma-managed so the migrations work cleanly across both. That is unusual; most analytics tools pin one database (Plausible: ClickHouse + Postgres, Matomo: MariaDB only, GA4: BigQuery proprietary). The flexibility lets you co-locate Umami with whatever database your existing stack already uses. Practically, Postgres is the better choice for teams above 100 K visits/day because Umami's queries hit JSON columns hard and Postgres's JSONB indexing outperforms MySQL's at scale.

Docker-first packaging. The official deployment story is Docker + Docker Compose. Bare-metal Node.js installs are supported but not the primary path; the documentation, the upgrade scripts, and the community examples all assume Docker. For teams comfortable with Docker, this is a feature — pull the image, mount a volume, point at a database, done. For teams without Docker experience, it is a friction point that does not exist on Plausible (which has both a Docker and a non-Docker install path) or Matomo (which is PHP + LAMP-style).

Single-developer founded. Umami was started by Mike Cao (one developer) and remains heavily Mike-led with a small contributor base. That is a meaningful trust signal in both directions: the codebase is opinionated and consistent (one architect's decisions throughout), and the bus factor is low (one critical contributor). The maintenance pace is steady but not enterprise-aggressive; a tracker bug filed Tuesday is unlikely to ship a fix on Wednesday. For most teams that is fine; for teams with strict SLA requirements, Cloud-vendor-backed alternatives (Matomo Cloud, Plausible Cloud, Fathom) are safer.

If those four commitments fit your team's priorities, this is the right destination. If MIT license vs AGPL is not load-bearing for you, Plausible is the closer match in product surface; if you need feature parity with GA4, Matomo is the right destination.

Self-host on free Vercel + Neon vs hosted Umami Cloud

Umami's break-even economics are different from Plausible's or Matomo's because the free-tier self-host story is genuinely free.

PathCostOps overhead
Free Vercel + Neon free tier$0/mo at <50 K visitsVercel build minutes, Neon storage caps
Self-host on €5 VPS€5/mo at any volumeDocker + DB upkeep
Umami Cloud Starter$9/monone
Umami Cloud Pro$29/mo (high volume)none

Free Vercel + Neon is genuinely viable. Umami runs as a Next.js app, which deploys to Vercel's free tier under a hobby project. Neon provides a serverless Postgres free tier with 0.5 GB storage and 100 hours of compute. For a personal site or a small SaaS landing page, the combined free tier covers ~50 K visits/month with zero spend. Above that volume, you trip Vercel's build-minutes cap or Neon's storage cap and need to upgrade. The "$0 forever" path requires staying small; the "$0 to $20" upgrade path is smooth.

Self-host on a €5 VPS beats free-tier above 50 K visits. A Hetzner CX11 (€5/mo) running Docker Compose with PostgreSQL on the same box handles 500 K visits/month with headroom. The operational overhead is one Docker image upgrade per quarter and one Postgres minor-version bump per year. Below 50 K visits, the free-tier path is cheaper; above 100 K, the €5 VPS is the right choice for cost-conscious teams.

Umami Cloud Starter at $9/mo is the same price as Plausible Cloud Starter and slightly cheaper than Matomo Cloud Essentials. The Cloud SKU is the right answer for teams that do not want to manage infrastructure and are above the free-tier volume threshold. The Cloud feature set matches self-host one-to-one — there is no Cloud-only feature gating, unlike Matomo where heatmaps are paywalled separately.

When self-host wins. Three cases. (1) Volume sits above 50 K visits, ruling out the free tier. (2) You have an existing Postgres or MySQL instance you want to co-locate Umami with. (3) MIT license matters because you are forking the dashboard or embedding Umami in a closed-source product.

When Cloud wins. Everyone else. The €5 VPS plus Docker plus quarterly Postgres upkeep is technically cheaper than $9/mo Cloud, but only by $4/mo and only if you do not value your time at more than $5/hour.

Standard migration playbook to Umami

The five steps generalize across source trackers; pair pages cover source-specific traps.

  1. Provision the destination. Decide free-tier vs €5 VPS vs Cloud. For free-tier, deploy to Vercel from the official GitHub template and connect a Neon Postgres database; the wizard takes 15 minutes. For self-host, run docker compose up -d from the official compose file with environment variables pointing at your database. For Cloud, sign up and create a property. Set the property timezone correctly the first time.
  2. Run the SQL importer for historical data (if needed). Umami's historical importer is less polished than Plausible's or Matomo's; it is a custom SQL script that reads from your source export (GA4 BigQuery CSV, UA archive, Plausible API export) and writes into Umami's event table. Expect to spend an hour debugging the script for any non-trivial source. The community has importer scripts on GitHub for the common sources.
  3. Install the JS tag in parallel with the source tracker. One line: <script defer src="https://your-umami-host/script.js" data-website-id="YOUR-WEBSITE-ID"></script>. The website ID is generated when you create the property. The defer is non-negotiable. Custom event API: umami.track('Event Name', { property: value }).
  4. Run a two-week parallel period and reconcile daily. Cookieless inflation on Umami runs 5-12% above bannered GA4 sources, same as Plausible and Fathom. Use the methodology tolerance bands: pageviews ±2% green, sessions methodology-dependent (Umami uses a 30-minute idle window), goals only after event-mapping is verified.
  5. Cut over. Remove the source tracker, archive its property. Umami self-host has no per-event billing, so there is no surprise overage; Cloud bills monthly with no annual prepay discount (yet — single-developer pricing simplicity). Plan a single deploy, Wednesday morning.

Engineering hours: 8-14 from a GA4 source on Cloud, plus 2-4 hours for free-tier deploy or 6-8 hours for self-host provisioning. Calendar time: two weeks of parallel run regardless of starting point. The methodology page documents the tolerance bands.

If Umami's four commitments (MIT license, MySQL or PostgreSQL, Docker-first, single-developer) fit your team's priorities, this is the right destination. If MIT vs AGPL is not load-bearing for you, Plausible is the closer product match.

FAQ

Does the MIT license have practical advantages over Plausible's AGPL?
Yes, in two cases. (1) You are an agency hosting Umami for paying clients and do not want the AGPL "must-publish-modifications-if-served-over-the-network" obligation; MIT removes it. (2) You are embedding Umami in a closed-source SaaS product. For a regular self-host where you do not modify the source, the practical difference is zero — both licenses let you run the software for free. The license matters only when you fork or embed.
MySQL or PostgreSQL — which should I pick?
Postgres for new installs above 50 K visits/day. Postgres's JSONB indexing handles Umami's event-property queries faster than MySQL at scale, and Neon (the recommended serverless Postgres host) integrates cleanly with the Vercel free tier. Pick MySQL only if your existing stack runs MySQL and co-location matters more than peak query speed. Below 50 K visits/day either works fine.
Is the free Vercel + Neon tier viable for production?
For low-traffic content sites and indie SaaS landing pages, yes. The free tier covers ~50 K visits/month before you hit Vercel's build-minutes cap or Neon's 0.5 GB storage limit. For an agency or a multi-site host, no — you will trip a cap within weeks. The free tier is right for personal projects and early-stage products; upgrade to a €5 VPS once you cross 50 K visits.
Self-host vs Cloud — at what scale does each win?
Cloud wins below 100 K visits and above 5 M (where Cloud's volume tier is cheaper than running an enterprise-scale Postgres yourself). Self-host wins between 100 K and 5 M, where a €5-20 VPS handles the load with low operational overhead and the cost is genuinely below Cloud pricing. The cross-over is operational comfort: if you already run Docker and Postgres for other things, self-host is straightforward; if you do not, Cloud is worth $9/mo.
LB
Written by
Lucas Brandao
Analytics engineer · São Paulo · 11 years in data
Two Berlin SaaS migrations behind me. I write migrateanalytics.com as a public utility — no product, no affiliate, no consulting. All measurements are reproducible; raw data lives on GitHub.
v1 · 2026-05-04 · first publication. · edit on GitHub →