Search iThub

Search tools, categories and collections. Type at least two characters.

Explore all tools
↑ ↓ to explore resultsEnter to open · Esc to close

Umami

Cookieless web and product analytics, self-hosted on PostgreSQL or run as Umami Cloud

Visit website Save

Umami is an MIT-licensed web and product analytics platform: a small cookieless tracker feeds traffic, events, funnels, retention, revenue, session replay and heatmap reports. Self-host it with Node.js and PostgreSQL or use Umami Cloud.

Pricing
Freemium
Deployment
Self-hosted
Platforms
Web
39,959stars8,493forks
3views
Updated

What is Umami?

Umami is an open-source web and product analytics platform published by Umami Software, Inc. A JavaScript tracker on each website sends pageviews, referrers, campaign parameters, custom events and optional session properties to an Umami server, which presents them in a web dashboard. The tracker sets no cookies and Umami does not collect personal information automatically; data a site chooses to send, such as a distinct ID or event properties, remains the operator's responsibility. The repository dates from July 2020 and the source is licensed under MIT. The current documentation covers Umami v3, while the v2 documentation stays available separately.

There are two ways to run it. Umami Cloud is the hosted service operated by the project's creators, with servers in the US and EU according to the pricing page. Self-hosting uses a source build with pnpm, the prebuilt image docker.umami.is/umami-software/umami:latest, or the repository's Docker Compose file, which starts ghcr.io/umami-software/umami:latest next to a postgres:15-alpine database. The installation guide lists Node.js 20.19 or newer (22 LTS recommended) and PostgreSQL 12.14 or newer. The first build creates the tables and a default admin account whose password must be changed after the first login.

The latest release is v3.4.1, published on October 23, 2026. It is a security hotfix: Next.js moves to 16.4.2 to close a critical remote code execution issue in next/og and an SSRF in image optimization, React moves to 19.3.1, the Docker base image is pinned to Node 22.23.4 on Alpine, and the MCP packages move to 2.3.1 to fix an OAuth credential leak. Version 3.4.0 (September 2026) added chart annotations, a read-only MCP server, account API keys and a typed API client. Version 3.3.0 added TOTP two-factor authentication and session identity stitching, 3.2.0 added heatmaps, and 3.1.0 introduced Boards, session replay and Core Web Vitals tracking.

The application is written in TypeScript on Next.js 16 and React 19, with Prisma 7 handling PostgreSQL access and migrations that run during the build. Redis is optional for caching and coordination, and session replay is built on the rrweb recorder. The repository also carries ClickHouse migrations and a Kafka client, but the public self-hosting documentation describes PostgreSQL as the only supported database. MySQL support ended with v3.0, and the project published a guide for moving MySQL data to PostgreSQL.

Some boundaries are worth knowing before adoption. Umami is an event analytics product, not a general BI tool for querying arbitrary databases. Email reports and the streaming API are listed as Cloud features that the self-hosted edition lacks. The tracker documentation already describes error-tracking attributes marked for v3.5.0, a version not yet released when v3.4.1 was current. The gallery uses official screenshots from umami.is and the GitHub release notes, which show the vendor's own sample data.

Inside the application

Umami screenshots

Explore the interface. Open a screenshot to view it at full size.

Umami website dashboard for umami.is with views, visits, visitors, bounce rate, visit duration, an hourly bar chart and pages and referrers tables
Umami screenshot 1

Official screenshot of the Umami website dashboard over the last 24 hours, from umami.is, showing the vendor's own traffic.

Umami Board editor with a website bar chart, two metrics bars and two metrics tables, plus Boards, Websites, Links and Pixels in the sidebar
Custom boards

Board editor introduced in v3.1.0, composing chart, metrics bar and metrics table components. Official image from the v3.1.0 release notes.

Umami click heatmap over the umami.is home page at 1440 px screen width, with a list of tracked pages and click counts on the left
Click heatmap

Click heatmap report added in v3.2.0, showing 950 positions and 1.04k clicks on the home page. Official image from the v3.2.0 release notes.

Umami session replay player showing a recorded visit to umami.is with playback speed controls and the visitor's country, browser, OS and device
Session replay

Session replay modal introduced in v3.1.0, with 1x to 8x playback and a skip-inactive toggle. Official image from the v3.1.0 release notes.

Umami funnel report with a Pricing funnel and a Docs funnel, showing visitors and conversion rates for each page view and event step
Funnel report

Funnel report with page and event steps, conversion rates and drop-off counts. Official screenshot from umami.is.

Umami retention table for August 2025 with daily cohorts and return percentages from Day 1 to Day 28
Retention report

Retention report showing daily visitor cohorts and the share returning on later days. Official screenshot from umami.is.

Source: official Umami project page.

Key capabilities

  • Self-hosting with Docker The repository ships a docker-compose.yml that runs Umami on port 3000 with a PostgreSQL 15 container, a health check on /api/heartbeat and a named data volume. Replace the placeholder APP_SECRET and set TWO_FACTOR_ENCRYPTION_KEY before exposing it. A standalone image is also published at docker.umami.is/umami-software/umami:latest, in which case you supply the database and DATABASE_URL yourself. Updates are pulled and the container is recreated.
  • Installation from source Clone the repository, run pnpm install, set DATABASE_URL in .env, then pnpm build and pnpm start. The build applies Prisma migrations and creates the default account. The docs recommend PM2 for process management and a reverse proxy in front of the default port. BASE_PATH serves Umami from a subdirectory, which is a build-time setting.
  • Umami Cloud plans The hosted service has a free Hobby plan (100K events per month, one website, six months of retention), Pro at $20 per month (1 million events, up to 20 websites, two years of retention) and Business at $200 per month (10 million events, five years of retention, 5,000 session replays and heatmaps). Enterprise adds SAML SSO, audit logs and an uptime SLA on custom terms. Each pageview and each stored event property counts as one event, and overages are billed per event rather than dropped.
  • Cookieless tracking script Sites load script.js with a data-website-id attribute in the page head, or through next/script in Next.js. Single-page application navigations are tracked automatically. Visitor sessions rely on an anonymous salt that rotates monthly by default through SALT_ROTATION. Bots are excluded from statistics unless DISABLE_BOT_CHECK is set.
  • Tracker configuration Attributes restrict collection to listed hostnames (data-domains), honour the browser Do Not Track signal, drop URL search parameters or hashes, send data to another host, or pass every payload through a data-before-send function that can modify or cancel it. data-auto-pageview="false" keeps the tracker active without automatic pageviews. The docs note that Do Not Track is deprecated and is not a consent solution on its own.
  • Custom events and properties Events are sent from umami.track() or from data-umami-event attributes on HTML elements, with optional properties attached. Since v3.3.0 the event and session property filters apply across data views, and v3.4.0 can store session property filters in saved segments. data-tag groups events for A/B comparisons. Remember that stored properties count toward Cloud event quotas.
  • Links and pixels Links are short URLs that redirect to a destination and record clicks, with custom slugs since v3.1.0. Pixels are invisible images for newsletters, external pages or other places that cannot run JavaScript. Both have their own statistics pages and share options, and both appear in the tables with sparklines added in v3.3.0.
  • Traffic and acquisition reports The website dashboard shows views, visits, visitors, bounce rate and visit duration, with breakdowns by page, referrer, browser, operating system, device, language, country, region and city. A realtime view, period comparison, UTM report and channel attribution complement it. Location comes from CDN headers or a MaxMind-compatible database set through GEO_DATABASE_URL.
  • Funnels, goals and journeys Funnels measure conversion and drop-off across page and event steps, with per-step property filters since v3.1.0. Goals track pageview or event targets and accept wildcards. The journey report shows the paths visitors take between pages and events, and can be filtered by event type.
  • Retention, cohorts and segments Retention tables show how many visitors from a daily cohort return on later days. Cohorts group users by a shared action in a period, segments save reusable filter sets, and both can be applied as filters. v3.1.0 added OR logic, regular-expression operators and a toggle that excludes bounces.
  • Revenue and attribution Revenue is recorded by sending revenue and currency properties with an event, for example on checkout. Unrecognised ISO 4217 codes fall back to USD. The revenue report aggregates by period and has a cumulative chart mode since v3.2.0, and attribution connects campaign engagement to conversions. On Umami Cloud, Stripe, Paddle, Polar, Dodo Payments, WooCommerce and Lemon Squeezy can be connected so payments and refunds sync every hour; the pricing page lists integrations from the Pro plan.
  • Session replay A separate recorder.js script, enabled per website, records sessions with rrweb. Defaults are a 15 percent sample rate, a five-minute maximum duration and a moderate mask level that hides all input fields; the strict level also masks page text, and a CSS block selector excludes elements entirely. Replays are stored for 30 days and only sessions after activation are recorded. On Umami Cloud, replay is part of the Business plan.
  • Click and scroll heatmaps Heatmaps, added in v3.2.0, also depend on the recorder script and have their own sample rate. Data is grouped by screen width, and the page preview is embedded live, so the tracked site must permit framing through frame-ancestors. Without that, clicks and scroll depth appear on a blank canvas.
  • Core Web Vitals With data-performance="true", the tracker collects LCP, INP, CLS, FCP and TTFB from real visitors. The performance page shows the standard thresholds with rating badges, and v3.4.0 split performance stats, charts and metrics into separate API datasets.
  • Boards, annotations and sharing Boards compose charts, tables, metric bars and text blocks on a row and column canvas, each component bound to a website, and can be cloned and shared. Annotations from v3.4.0 add dated notes for launches or campaigns to website charts. Public share pages are named individually and expose only the sections you select.
  • Teams, admin and account security Teams give members role-based access to specific websites, and an admin page manages all users, websites and teams. TOTP two-factor authentication with backup codes and team-level enforcement is available once TWO_FACTOR_ENCRYPTION_KEY is set. v3.4.0 also binds sessions to password fingerprints and rejects partial 2FA tokens for API access.
  • REST API and typed client Everything in the interface is available through a JSON API: at /api on a self-hosted instance, or at https://api.umami.is/v1 with an API key on Cloud, where API access starts with the Pro plan. Account API keys are created and revoked under Settings. The @umami/api-client TypeScript package is generated from the OpenAPI contracts, and a report API migration guide maps older endpoints.
  • Read-only MCP server Since v3.4.0, MCP clients such as Claude, ChatGPT or Cursor can query 23 read-only tools for traffic, events, sessions, funnels, journeys, retention, attribution, revenue and performance. Cloud exposes https://cloud.umami.is/mcp on Pro and higher plans; self-hosted instances must set MCP_ENABLED=1. A local stdio mode runs through npx -y @umami/mcp. Replays, heatmaps and boards are not available through MCP.
  • Ad blocker and proxy settings TRACKER_SCRIPT_NAME and COLLECT_API_ENDPOINT rename the script and the /api/send route. TRUSTED_PROXIES and CLIENT_IP_HEADER recover the real visitor IP behind proxies, IGNORE_IP excludes addresses or CIDR ranges, and PRIVATE_MODE stops all external calls, including website icon lookups. DISABLE_TELEMETRY opts out of anonymous usage telemetry.
Advertisements

Where Umami fits

Replacing a cookie-based analytics script on a marketing site

Create a website in Umami, copy the tracking code from its settings into the page head and restrict it with data-domains so staging traffic is not counted. Check referrers, UTM campaigns and page rankings against the previous tool for a few weeks before removing it. The FAQ states that the tracker sets no cookies but that whether a notice is required depends on your other services and jurisdiction, so involve whoever owns the consent policy. If the site uses Google Tag Manager, follow the dedicated Tag Manager guide.

Measuring a signup funnel in a SaaS product

Add custom events for the key steps, such as viewing pricing, starting signup and completing onboarding, either through umami.track() or HTML data attributes. Build a funnel from those steps and a retention report for the resulting cohort. If you identify logged-in users with a distinct ID, sessions are stitched across devices since v3.3.0, but that identifier is personal data you chose to send. Confirm that the funnel counts match your application database for a sample period.

Attributing campaigns and revenue

Tag inbound links with UTM parameters, use Umami short links for channels where you control the URL, and place a pixel in newsletters to record opens. Send revenue and currency with the checkout event, using ISO 4217 codes to avoid the USD fallback. The attribution and revenue reports then connect campaigns to income. On a self-hosted instance, reconcile totals with the payment provider, because refunds only appear if your own events report them; Umami Cloud can sync payments and refunds from providers such as Stripe or Paddle hourly. The revenue documentation covers both sending methods.

Running a self-hosted instance in production

Start from the Compose file or the published image, put a TLS reverse proxy in front of port 3000 and set APP_SECRET, TRUSTED_PROXIES and TWO_FACTOR_ENCRYPTION_KEY. Change the default admin password immediately. Self-hosted data is kept until you delete it, so plan PostgreSQL backups and disk growth, and configure the database for UTC as the installation guide recommends. Rebuild or re-pull images for releases such as v3.4.1, whose fixes include the Node base image, and review the environment variable reference before each upgrade.

Investigating interface problems with replays and heatmaps

Enable replays or heatmaps per website, add recorder.js with the same website ID and start with the default 15 percent sample rate. Select the strict mask level for pages that display personal or financial data, and add a block selector for sensitive components. For heatmap previews, allow the dashboard origin in the site's frame-ancestors policy. Check the 30-day replay retention against your privacy notice, and on Cloud confirm that the account is on the Business plan.

Giving an AI assistant read-only analytics access

On a self-hosted instance set MCP_ENABLED=1, restart, then create a dedicated API key under Settings for the assistant. The tools follow the key owner's website and team permissions, so a restricted user account limits what the assistant can read. Verify that answers match the dashboard for a known date range. The MCP guide lists the 23 tools and the stdio alternative for clients that only support local servers.

Install

git clone https://github.com/umami-software/umami.git && cd umami && docker compose up -d

Reviews of Umami

No reviews yet

Be the first to share your experience with Umami.

Loading review form…

Alternatives to Umami

Compare Umami with these tools →