invisit
All posts

By Miraç Berk20 min read

8 best Umami alternatives in 2026, self-hosted and cloud

Umami alternatives for self-hosters and Umami Cloud users: Rybbit, Plausible, Matomo, Pirsch and 4 more, with prices, retention and which import Umami data.

A soft 3D server box and a small cloud side by side, with eight analytics cards fanning out between them, lit by violet dithered light and shadow.

The best Umami alternative depends on which Umami you are leaving. If you self-host Umami and want the same depth with your history, Rybbit is the closest match: open source, self-hostable on ClickHouse, with funnels, retention, session replay and an importer for Umami data. If you pay for Umami Cloud and keep hitting its retention limit or the $200 Business plan for heatmaps, Pirsch keeps data with no time limit from $12 a month at 100K page views, and invisit, the tool we build, includes heatmaps and keeps data forever from $14 at 100K events.

Here is the short answer by situation, as of November 2026.

If you self-host Umami:

If you pay for Umami Cloud:

Stay on Umami if the reason you chose it still holds. Umami Pro covers 1M events and 20 sites for $20 a month, less than any paid plan in this list at that volume, and self-hosted Umami has heatmaps, session replays, retention and cohorts at no license cost. If running the server is your only complaint, Umami Cloud imports a self-hosted PostgreSQL database on Pro, which leaves nothing to retag. The last two sections cover when to stay and how to switch.

Why do people look for Umami alternatives?

People leave Umami for different reasons depending on how they run it. Self-hosters leave because of the server and the database; Umami Cloud users leave because of retention, plan limits and the way properties are billed. Every limit below comes from Umami’s own docs, pricing or source code.

If you self-host Umami

Self-hosted Umami is a Node.js app (20.19 or newer) on PostgreSQL (12.14 or newer), and updates, backups and scaling are yours (installation). Umami v3 removed MySQL, so a v2 MySQL install has to reach v2.19.0 and move its data to PostgreSQL before it can upgrade (migration guide).

In Umami 3.4.1, the current release, every page view and custom event is a row in one PostgreSQL table, website_event, which carries 14 indexes, and every stored property is a row in event_data (schema). The PostgreSQL schema has no rollup tables, so reports count raw rows when you open them. Umami’s source also has a ClickHouse path with hourly rollups (ClickHouse schema), switched on by CLICKHOUSE_URL, but Umami’s installation and environment-variable docs list PostgreSQL as the only supported database.

Some features stay on Umami Cloud. Scheduled email reports are Cloud only (Cloud and self-hosted), and the payment-provider and Search Console integrations are documented for Cloud.

If you pay for Umami Cloud

Umami Cloud’s limits are retention, plan gating and property billing. As of November 2026, per Umami’s pricing and docs:

In numbers: 300K page views plus 100K custom events with three properties each come to 700K Umami events (300K + 100K + 300K), where every other tool here that bills events counts 400K. On Pro that still costs $20, so property billing bites at the Hobby cap of 100K and above 1M, where every further million costs $30.

What to look for in an Umami alternative

Judge an Umami alternative on six points. Two rarely appear on feature grids and matter most when you leave Umami: whether your history comes with you, and how properties are billed.

We checked every price and claim against the vendors’ own pages, docs and source code on November 3, 2026, and measured each script the same way:

Measuring a tracker
curl -s https://api.pirsch.io/pa.js | gzip -9 | wc -c

Umami alternatives compared: self-hosting, price, retention and imports

Tool Self-hosting 100K a month 1M a month Data kept, hosted Event with 3 properties Visitor recognised for Imports Umami history
Umami (reference) Yes, MIT: Node.js and PostgreSQL Free $20 6 months to 5 years 4 events Up to a month Into Umami Cloud, from Pro
Rybbit Yes, AGPL-3.0: Docker with ClickHouse $19 to $39 $69 to $139 3 or 5 years 1 event Across days, unless salted Yes, CSV, paid plans
Plausible Yes, AGPLv3: ClickHouse and PostgreSQL $19 to $39 $69 to $139 While subscribed 1 event 24 hours Only in Plausible’s CSV format
Matomo Yes, GPL v3: PHP and MySQL $42 $204 Raw data 24 months 1 hit 13-month cookie by default No
PostHog Hobby deploy, unsupported Free Free 1 to 7 years 1 event 365-day cookie by default Into its data warehouse
Cloudflare Web Analytics No Free Free 6 months No custom events No identifier No
Pirsch Enterprise license only $12 to $27 $54 to $159 No limit 1 event 24 hours No
Simple Analytics No $20 $60 3 years 1 event No identifier No
invisit No $14 $49 Forever 1 event One day No

Prices are monthly in each vendor’s own unit, so they are not one for one: Umami counts events plus stored properties, Matomo counts hits, Pirsch counts page views plus events, and PostHog counts every event and sends at least two per page view, so 1M page views there is about 2M events and $50. Ranges run from the cheapest plan to the most complete self-serve plan. Rybbit, Plausible and Matomo prices are for their hosted services; their self-hosted editions are free.

1. Rybbit: best for self-hosters who want Umami’s depth and their history

Rybbit is the closest match for a self-hosted Umami user: cookieless and open source under AGPL-3.0, with funnels, goals, journeys, retention, user profiles, error tracking and session replay, plus a built-in importer for Umami data. Rybbit runs self-hosted with Docker on ClickHouse, on a VPS with at least 2 GB of RAM (self-hosting), or as Rybbit Cloud on Hetzner in Germany and Finland.

Rybbit Cloud bills events per organization: page views, custom events, web vitals, outbound clicks and autocaptured clicks (billing). As of November 2026, Rybbit’s pricing is $19 at 100K and $69 at 1M on Standard (5 sites, 3 members, 3 years of data), and $39 and $139 on Pro (unlimited sites, session replay, 5 years). New sites get a 7-day trial, not a free plan, and an organization over its limit stops collecting until the month resets or it upgrades.

Rybbit’s limits next to Umami: its docs describe no click or scroll heatmaps, which self-hosted Umami has. The visitor ID is a hash of IP address and user agent kept across days unless you turn on User ID Salting, and Rybbit’s site settings docs say the unsalted ID may count as personal data under the GDPR. Self-hosted Rybbit leaves out web vitals, email reports, Search Console, the Bots page and SQL dashboards (self-hosted vs Cloud), and its script measured 11,770 bytes gzipped against Umami’s 3,929.

Moving from Umami to Rybbit is the easiest in this list. Rybbit’s importer takes Umami’s CSV on paid Cloud plans, reaching back 24 months on Standard and 60 on Pro, and without limits self-hosted. It brings page views and custom event names with their session details, but not event properties: Rybbit’s Umami mapper sets them to empty. The mapper expects each event row to carry its session’s browser, device and location, so a self-hosted Umami needs a join of website_event and session to produce the file. In code, umami.track(name, data) becomes rybbit.event(name, properties) (track events).

Choose Rybbit to keep self-hosting with replays and retention, or to leave your server without losing your page view history.

2. Plausible: best for a simpler dashboard, self-hosted on ClickHouse or hosted in the EU

Plausible is the pick when you used Umami for traffic numbers rather than product depth. Plausible Community Edition is AGPLv3 and runs in Docker Compose on ClickHouse and PostgreSQL, with 2 GB of RAM recommended and a CPU that supports SSE 4.2 or NEON (Community Edition setup). Plausible’s hosted service is run from Estonia with only EU-owned providers, CDN included.

Plausible bills page views plus custom events across a team’s sites. As of November 2026, Plausible’s pricing is $19 at 100K and $69 at 1M on Starter (1 site, 1 login), and $39 and $139 on Business, the plan with funnels, custom properties, revenue goals and the Stats API. There is no hosted free plan; the trial lasts 30 days.

Plausible beats Umami Cloud on privacy and retention: it deletes the salt behind its visitor hash every 24 hours (data policy), and hosted data has no time limit while you subscribe. Plausible also imports GA4 history, shows Search Console queries, sends email and Slack reports and traffic spike alerts, and its script is about 2.5 KB.

Plausible’s limits next to Umami: no heatmaps, replays, per-visit view, retention or cohorts, by design (when not to use Plausible), and no web vitals. On the hosted service, custom properties need Business, so an Umami setup built on event properties lands on the $39 plan. Community Edition ships about twice a year and leaves out funnels, user journeys and revenue goals.

Plausible has no Umami importer, but its CSV import accepts files from any tool in its own format: ten imported_* tables of daily totals, such as pages, sources and devices. A self-hosted Umami database can produce them with SQL, as shown in the switching section, though imported data filters less finely than native data. umami.track('signup', { plan: 'pro' }) becomes plausible('signup', { props: { plan: 'pro' } }).

Choose Plausible for a content site that wants clean numbers, a daily hash and EU ownership end to end. See Plausible vs invisit.

3. Matomo: best for Google Analytics depth on your own PHP and MySQL servers

Matomo On-Premise is the self-hosted pick when Umami is too thin, or when you run Umami v2 on MySQL and would rather not move to PostgreSQL: Matomo runs on PHP with MySQL or MariaDB, free under GPL v3 with unlimited hits (requirements). The free edition has segments, goals, ecommerce, a tag manager, scheduled email reports and custom alerts.

Matomo counts hits, meaning every tracking request, about 110 to 120 per 100 page views by Matomo’s estimate. As of November 2026, Matomo Cloud costs $42 a month for 100K hits and $204 for 1M, with 30 sites and 30 users, and adds session recordings, heatmaps, A/B tests, funnels and cohorts. On-Premise, those are premium plugins priced per year for 1 to 4 users, such as Funnels at $239 and Heatmap and Session Recording at $269 (marketplace).

Matomo’s limits next to Umami: the standard tracker sets first-party cookies, _pk_id for 13 months (cookie list). One line turns them off, and the CNIL mode for consent-free tracking in France switches off the Visits Log, User ID, heatmaps and recordings. matomo.js measured about 22 KB gzipped, more than five times Umami’s script, and past 1 million actions a month Matomo recommends two servers. At 1M, Matomo Cloud is the most expensive hosted option here.

Matomo’s documented importer covers Google Analytics, not Umami. Matomo events have a category, an action, a name and a number instead of free-form properties, so umami.track('signup', { plan: 'pro' }) becomes something like _paq.push(['trackEvent', 'Account', 'signup', 'pro']), and click events without code go through Matomo Tag Manager.

Choose Matomo when policy requires self-hosting and you need Google Analytics depth. See Matomo vs invisit.

4. PostHog: best for product teams that want replay, flags and experiments

PostHog fits Umami users whose website is the front door to a product: session replay, feature flags, experiments, surveys, error tracking and SQL over raw events run on one event stream. PostHog also reads Umami data directly, through a data warehouse connector for Umami Cloud and self-hosted Umami (Umami source).

PostHog bills every event: page views, page leaves, autocaptured clicks and web vitals. As of November 2026, PostHog’s pricing is free for the first 1M events a month, then $0.00005 each up to 2M. With two events per page view, 1M page views cost about $50 a month. The free tier includes 5,000 session recordings a month and keeps a year of data.

PostHog’s limits next to Umami: posthog-js sets a first-party cookie for 365 days and uses localStorage by default (persistence), and cookieless mode needs settings in code and in the project. The main script measured about 119 KB gzipped, 30 times Umami’s. The MIT hobby deploy needs about 4 vCPU and 16 GB of RAM, is unsupported and, in PostHog’s words, “unlikely to scale past a couple 100ks events” (disclaimer), so it does not solve a self-hoster’s scaling problem.

The Umami connector syncs websites, sessions and events as full-refresh tables into PostHog’s data warehouse, where you query them with SQL. They do not become PostHog events, so web analytics starts from the day you install posthog-js; turning history into events means writing a migration against PostHog’s capture API (historical migrations). umami.track('signup', { plan: 'pro' }) becomes posthog.capture('signup', { plan: 'pro' }).

Choose PostHog when replay, flags and experiments matter more than a light traffic dashboard. See PostHog vs invisit.

5. Cloudflare Web Analytics: best free option when you are done running a server

Cloudflare Web Analytics is the exit for a self-hoster whose Umami only counted page views on a blog, docs or side project: it is free, needs one script tag and no server, and your DNS can stay where it is. It shows page views, visits, referrers, countries, devices and Core Web Vitals, uses no cookies or localStorage (product page), and as of November 2026 caps sites rather than traffic: 10 per account for sites not proxied through Cloudflare (limits).

Cloudflare’s FAQ lists what you give up from Umami: no custom events, no UTM parameters, six months of data, and only the last 7 days unsampled before data is aggregated to around 10%. Visits are counted from the referrer, so there are no unique visitors. Ad blockers block the beacon, which measured 10,253 bytes gzipped, and Web Analytics is not covered by Cloudflare’s EU Customer Metadata Boundary.

Nothing imports into Cloudflare Web Analytics, and every umami.track() call goes away, so keep your Umami dump or export as the archive. Choose it when page views, referrers and page speed are all you read, and the server is what you want gone.

6. Pirsch: best for unlimited data retention and many sites at a low price

Pirsch is the hosted pick for Umami Cloud users who keep hitting the retention limit or the 20-site cap on Pro: every Pirsch plan keeps data with no time limit, and Standard includes 50 sites and unlimited members (pricing). Pirsch is cookieless, built by a German company and hosted at Hetzner in Germany (docs).

Pirsch counts page views, custom events and 10% of session extensions. As of November 2026, Standard costs $12 a month at 100K and $54 at 1M; Plus, which adds funnels, unlimited sites, teams, A/B testing and segmentation, costs $27 and $159. A year costs ten months’ price, and the trial is 30 days without a card. At the limit, your dashboard stops at the day you reached it while Pirsch keeps collecting for five more days, giving you time to upgrade.

Pirsch improves on Umami Cloud in three ways. Its hash takes the IP address, user agent, date and a per-site salt, so a visitor is recognisable for 24 hours at most (privacy). An event counts once with up to 20 metadata pairs. Email reports, Search Console, spike notifications, a URL shortener, webhooks and a server-side integration are all on Standard, and pa.js measured 3,504 bytes gzipped, slightly under Umami’s.

Pirsch’s limits next to Umami: funnels need Plus, and the pricing page lists no heatmaps, session replays or retention reports. Self-hosting takes an Enterprise license (FAQ), even though Pirsch’s core Go library is AGPL-3.0, and metadata values are strings only.

Pirsch imports Google Analytics, Plausible and Fathom history, not Umami’s. umami.track('signup', { plan: 'pro' }) becomes pirsch('signup', { meta: { plan: 'pro' } }) (events).

Choose Pirsch for many small sites, a team that reads the numbers, and history you never want to lose, on a hosted plan.

7. Simple Analytics: best when a monthly visitor hash is too much

Simple Analytics suits Umami users whose data protection officer objects to a hash that links visits for a month: it sets no cookies, uses no local storage and does not hash the IP address at all. Simple Analytics is a Dutch company storing data in the Netherlands and Germany.

As of November 2026, the Simple plan costs $20 a month at 100K and $60 at 1M for one user, plus $20 a month per extra user, and keeps 3 years of data. The free plan covers 5 sites with 30 days of history, a required badge and no events. Simple Analytics also sends email reports, exports raw data points as CSV, JSON or Parquet, and its script measured about 4.8 KB gzipped.

The cost of no identifier is precision. Simple Analytics counts a visitor for every page view arriving with no referrer or an outside one, so a person who arrives twice in a day counts twice (unique visits). Its multi-step goals are not tied to one session, and it has no per-visit path, heatmaps, web vitals or revenue reports, all of which Umami has in some form.

Simple Analytics imports only GA4 history. umami.track('signup', { plan: 'pro' }) becomes sa_event('signup', { plan: 'pro' }), and event names keep only letters, digits and underscores, so Signup button is stored as Signup_button (events).

Choose Simple Analytics for the most conservative reading of the GDPR. See Simple Analytics vs invisit.

8. invisit: best for heatmaps, data kept forever and event-heavy tracking

invisit, the tool we build, is for Umami Cloud users who want what Umami Business gates (heatmaps, unlimited sites and members) and longer history than Pro, without paying $200 a month. invisit is hosted, cookieless web analytics with an MIT tracker and a proprietary backend.

invisit bills page views, custom events (automatic outbound-link and download events included, unless you turn them off), conversions and short-link clicks. As of November 2026, the free plan covers 20,000 events a month on 4 sites, and paid plans cost $14 for 100K, $49 for 1M and $199 for 10M (pricing). Data is kept forever on every plan.

Against Umami Cloud, an event counts once with up to 32 properties, click and scroll heatmaps are on every plan, paid plans have unlimited sites, and every plan has unlimited team members. The visitor hash uses a random salt per UTC day, deleted about 25 hours after the day ends, so nobody, invisit included, can recompute a past day’s hashes. invisit recognises 19 AI assistants by referrer and utm_source, where Umami’s LLM channel matches six by referrer (Umami’s source), and it records crawler reads with @invisitdev/server and sends alerts for traffic spikes, drops and silence, neither of which Umami does.

invisit’s limits next to Umami: at 1M it costs $49 against $20 on Umami Pro, and its free plan is a fifth of Hobby’s. There is no self-hosting, no import, and no session recordings, retention cohorts, email reports or Search Console, which Umami offers. The script is about 8.5 KB gzipped against Umami’s 4 KB, and Cloudflare, a US company, runs invisit’s DNS and CDN.

There is no Umami importer, so export first. umami.track('signup', { plan: 'pro' }) becomes track('signup', { plan: 'pro' }), umami.identify(user.id) becomes identify(user.id), which stores only a hash, and event names use letters, digits and _ . : -, so Signup button becomes signup_button (events).

Choose invisit when heatmaps, history you keep and event properties matter more than the lowest price. See Umami vs invisit.

When should you stay on Umami?

Stay on Umami when its price or its self-hosted feature set is what you need. Several reasons people leave have a fix inside Umami itself.

How do you switch from Umami without losing your history?

Export first, import where the new tool can, and run both trackers side by side for two to four weeks before you remove Umami’s script.

  1. Export. In Umami Cloud, Settings, Data, Export emails a link to gzipped CSV of a website’s page views, events, sessions and event data, on every plan (export guide). Self-hosted, the history is already in PostgreSQL: take a pg_dump and keep it off the server. The tables that matter are website_event, event_data, session and session_data.
  2. Import where you can: Rybbit’s importer (page views and event names, no properties), PostHog’s warehouse sync, Umami Cloud from a self-hosted database, or Plausible’s CSV format built with SQL as below. Every other tool here starts empty.
  3. Install the new tracker next to Umami’s script. All of these can run on the same pages.
  4. Replace each umami.track() call and data-umami-event attribute (table below), and rename events: Umami accepts names up to 50 characters with spaces, and several tools here do not.
  5. Compare both for two to four weeks. A month’s unique visitors will read higher on a daily-hash tool than on Umami, because a person who visits on three days counts three times.
  6. Remove Umami’s script, and keep the export or dump as your archive.

For Plausible, this script turns a self-hosted Umami database into Plausible’s imported_pages file. The same pattern grouped by referrer_domain, or joined to session for browser and country, fills the other imported_* files.

export-umami-pages.sh
#!/usr/bin/env bash
# Daily page views per page from self-hosted Umami, in Plausible's imported_pages format.
SITE='<umami website id>' FROM=2024-01-01 TO=2026-10-31

psql "$DATABASE_URL" -c "COPY (
  SELECT (created_at AT TIME ZONE 'UTC')::date AS date,
         url_path AS page,
         count(DISTINCT visit_id) AS visits,
         count(DISTINCT session_id) AS visitors,
         count(*) AS pageviews
  FROM website_event
  WHERE website_id = '$SITE' AND event_type = 1
    AND (created_at AT TIME ZONE 'UTC')::date BETWEEN '$FROM' AND '$TO'
  GROUP BY 1, 2
  ORDER BY 1, 5 DESC
) TO STDOUT WITH (FORMAT csv, HEADER)" > "imported_pages_${FROM//-/}_${TO//-/}.csv"

event_type = 1 keeps page views; custom events are type 2. Plausible imports each day up to your first native Plausible visitor and drops the overlap.

For step 4, each tool’s equivalent of an Umami event:

Tool umami.track('signup', { plan: 'pro' }) data-umami-event="signup"
Rybbit rybbit.event('signup', { plan: 'pro' }) data-rybbit-event="signup"
Plausible plausible('signup', { props: { plan: 'pro' } }) class="plausible-event-name=signup"
Matomo _paq.push(['trackEvent', 'Account', 'signup', 'pro']) A Matomo Tag Manager trigger
PostHog posthog.capture('signup', { plan: 'pro' }) Autocaptured, then named as an action
Pirsch pirsch('signup', { meta: { plan: 'pro' } }) data-pirsch-event="signup"
Simple Analytics sa_event('signup', { plan: 'pro' }) data-simple-event="signup"
invisit track('signup', { plan: 'pro' }) data-invisit-event="signup"

Properties on attributes follow the same pattern: data-umami-event-plan="pro" becomes data-rybbit-prop-plan, data-pirsch-meta-plan, data-simple-event-plan, data-invisit-prop-plan or PostHog’s data-ph-capture-attribute-plan (autocapture), and a plausible-event-plan=pro class on Plausible. Cloudflare Web Analytics has no custom events.

Before you remove the Umami script