[invisit](https://invisit.dev) · [Docs](https://invisit.dev/docs) · [llms.txt](https://invisit.dev/llms.txt) · [llms-full.txt](https://invisit.dev/llms-full.txt)

# 7 best Simple Analytics alternatives in 2026, by what they track

> GoatCounter, Plausible, Pirsch, Swetrix and 3 more Simple Analytics alternatives, ordered by what each processes to count a visitor, with prices and imports.

- Author: Miraç Berk
- Published: 2026-11-03
- Page: https://invisit.dev/blog/simple-analytics-alternatives
- Tags: simple-analytics, alternatives, privacy, cookieless

![A soft 3D staircase of frosted glass steps, each holding a small visitor figure, rising toward a light analytics panel in violet dithered light.](https://invisit.dev/_astro/cover.DEVco4nS.png)

The best Simple Analytics alternative depends on how much you are willing to let a tool remember about a visitor. As of November 2026, GoatCounter stays closest to Simple Analytics' privacy model and is free, Plausible and Pirsch add real unique visitors and sessions with a hash whose salt changes every day, and Swetrix is the hosted tool that imports your Simple Analytics history.

Simple Analytics sits at one end of a ladder: it builds no visitor identifier at all. Every alternative below climbs at least one step, from an identifier held in memory for a few hours to a cookie that lasts 13 months, and each step buys numbers Simple Analytics cannot give.

The short answer by reason for leaving:

- The same privacy stance, without a bill: GoatCounter, open source and free for reasonable use.
- Unique visitors, bounce rate and funnels from an EU-owned company: Plausible.
- A team that reads the numbers, without $20 a month per extra login: Pirsch.
- Each visit step by step, heatmaps, and revenue from your payment provider: invisit, the tool we build.
- Your Simple Analytics history in the new dashboard: Swetrix, which imports the raw CSV export.
- Funnels and returning visitors on a free plan or your own server: Umami.
- People recognised across weeks, behind a consent banner: Matomo.

Stay on Simple Analytics if its limits are why you chose it. If your data protection officer treats any identifier built from an IP address and user agent as tracking that needs consent, which is Simple Analytics' own reading, no tool in this list passes; the only other product built the same way is Cloudflare Web Analytics, from a US company. The same holds if you need only EU companies in the collection path, or a count that does not move with your banner's acceptance rate ([details below](#when-should-you-stay-on-simple-analytics)).

> [!NOTE]
> invisit is the product we build. It sits at number 4, placed by the step of the ladder it occupies, and its entry lists its limits like the others. We checked every price and claim on the vendors' own pages and docs on November 3, 2026, and measured each script we quote with `gzip -9`, as in [our script size test](/blog/analytics-script-size).

## How does Simple Analytics count visitors without cookies or IP hashes?

Simple Analytics decides from the referrer alone whether a page view starts a visit. Its [unique visits documentation](https://docs.simpleanalytics.com/explained/unique-visits) counts a page view as a visitor when it has no referrer or a referrer from another hostname; internal clicks, reloads and back or forward navigation do not count, and in a single-page app every navigation after the first page load is non-unique.

Simple Analytics' [data collection page](https://docs.simpleanalytics.com/what-we-collect) lists what it keeps and drops:

- The IP address is dropped from every request: "We don't save or collect them. We don't hash them with cryptography."
- The country comes from the browser's time zone, not an IP lookup, so there is no region or city.
- Three random IDs link the requests of one page load, for time on page and events. A reload resets them, and none is stored on the device.

Its [sessions without consent](https://www.simpleanalytics.com/sessions-without-consent) page explains why. Simple Analytics reads the European Data Protection Board's guidelines on Article 5(3) of the ePrivacy Directive as reaching identifiers built from an IP address and user agent, even hashed, and concludes: "We avoid making the visitor identifier." The legal picture by country is in [our cookie banner guide](/blog/cookie-banner-analytics), and the counting methods side by side in [how cookieless analytics counts unique visitors](/blog/cookieless-analytics).

## What can Simple Analytics measure, and what can't it?

Simple Analytics measures page views, visits that begin at an outside referrer, events, time on page and scroll depth. It cannot count people, show the pages of one visit as a path, or connect one visit to a later one.

| Question                                         | Simple Analytics' answer                                                                                         | Source                                                                               |
| ------------------------------------------------ | ---------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------ |
| How many visitors?                               | Unique page views: one per arrival from outside or with no referrer; a person who comes twice a day counts twice | [Unique visits](https://docs.simpleanalytics.com/explained/unique-visits)            |
| How many sessions?                               | The same number. No timeout: a tab left open for hours and then clicked is still one session                     | [Unique visits](https://docs.simpleanalytics.com/explained/unique-visits)            |
| Bounce rate?                                     | Not reported; the Stats API has no bounce field                                                                  | [Stats API](https://docs.simpleanalytics.com/api/stats)                              |
| Time on page?                                    | The median of visible seconds; views under 5 seconds are left out                                                | [Time on page](https://docs.simpleanalytics.com/explained/time-on-page)              |
| What did one visit do, page by page?             | Not available; the page-load ID resets on every full page load                                                   | [Metrics](https://docs.simpleanalytics.com/metrics)                                  |
| Funnels?                                         | Goals with several steps, counted in aggregate, not as the same people moving from step to step                  | [Sessions without consent](https://www.simpleanalytics.com/sessions-without-consent) |
| Did Monday's ad click lead to Friday's purchase? | No, by design                                                                                                    | [Sessions without consent](https://www.simpleanalytics.com/sessions-without-consent) |

Simple Analytics calls these "aggregate funnels". Its [changelog](https://www.simpleanalytics.com/changelog) records that it renamed funnels to goals in July 2024 because the steps did not always come from the same session.

## How does each alternative count the same reader?

The quickest way to see what each step of the ladder changes is to follow one reader through every dashboard. One phone, one network, times in UTC:

1. Monday 09:00: opens a newsletter link in a mail app (no referrer), lands on `/blog/launch`, then clicks to `/pricing` and `/signup`.
2. Monday 15:00: comes back from a Google search to `/docs` and leaves.
3. Tuesday 10:00: types your address, reads `/` and leaves.

That is five page views in every tool. The rest follows from each vendor's own definitions:

| Tool and method                                      | Monday visitors | Monday visits               | Visitors over both days     | Sees Tuesday as a return | Shows Monday morning as one path |
| ---------------------------------------------------- | --------------- | --------------------------- | --------------------------- | ------------------------ | -------------------------------- |
| Simple Analytics: the referrer only                  | 2               | 2, the same figure          | 3                           | No                       | No                               |
| GoatCounter: IP and user agent in memory for 8 hours | Not reported    | 4, one per page per session | Not reported                | No                       | No                               |
| Plausible: a hash with a daily salt                  | 1               | 2                           | 2                           | No                       | No single-visit view             |
| Swetrix: a daily hash plus a monthly profile         | 1               | 2                           | 2 daily visitors, 1 profile | Yes, as the same profile | Yes                              |
| Umami: a hash with a monthly salt                    | 1               | 2                           | 1                           | Yes                      | Yes                              |
| Matomo: a 13-month cookie                            | 1               | 2                           | 1                           | Yes                      | Yes                              |

Sources: [Simple Analytics](https://docs.simpleanalytics.com/explained/unique-visits), [GoatCounter](https://www.goatcounter.com/help/sessions), [Plausible](https://plausible.io/docs/metrics-definitions) (visits end after 30 minutes without activity), [Swetrix](https://swetrix.com/docs/visitor-identification), [Umami](https://docs.umami.is/docs/metric-definitions) (a visit is the session hashed with an hourly salt) and [Matomo](https://matomo.org/faq/general/faq_146/). Pirsch and invisit also hash per day, so they count this reader as one visitor on Monday and another on Tuesday; invisit also shows the Monday morning visit page by page.

The lesson for a switch: Simple Analytics' visitors sit closer to other tools' visits than to their visitors. Compare them with the new tool's visits or sessions, never with its unique visitors.

## Why do people look for Simple Analytics alternatives?

People leave Simple Analytics for the trade it makes on purpose, for the price of each extra person, and for missing reports. All of it is on Simple Analytics' own pages:

- Visitors are arrivals, not people, and there is no path through a visit. A returning reader counts again on every arrival from outside, and goal steps are counted separately ([metrics](https://docs.simpleanalytics.com/metrics)).
- Every extra login costs $20 a month. The Simple plan includes one user ([plain-text pricing](https://www.simpleanalytics.com/pricing.md)), so three people pay $60 a month instead of $20 at 100K page views and events, and $100 instead of $60 at 1M.
- Plan limits. Free covers 5 websites with the last 30 days of data, a required badge and no events, goals or APIs. Simple covers 10 websites and keeps 3 years (1,096 days). Beyond that is Enterprise.
- The raw export is manual on Simple. The dashboard exports page views and events as CSV, TSV, JSON, NDJSON, Avro or Parquet, but the Export API needs a plan that includes it ([export](https://docs.simpleanalytics.com/export-data)), and the Simple plan's feature list names only the Stats API.
- Missing reports: no heatmaps beyond scroll depth, no web vitals, no revenue reports, and alerts for a missing script rather than traffic spikes ([our sourced comparison](/compare/simple-analytics)).

The people who stay usually stay for the first item. A count with no identifier is the product, not a gap in it.

## What to look for in a Simple Analytics alternative

Judge each alternative on what it gives up of Simple Analytics' privacy model, and on what that buys:

- What the tool processes to tell visitors apart, and how long it can link two requests: a few hours in memory, a day, a month, or a cookie for over a year. Your data protection officer will ask this first.
- What happens to the key. A salt deleted daily protects old data; a salt derived from a long-lived secret does not ([why it matters](/blog/cookieless-analytics#why-does-it-matter-that-the-salt-is-deleted)).
- Where location comes from. Simple Analytics reads the time zone; every alternative below that documents its method looks up the IP address.
- Vendor and data location, CDN included, and whether you can self-host.
- Import. Simple Analytics' raw export has no visitor identifier, so only page views and events can move. Swetrix and Rybbit import it; most tools start empty.
- Price for your whole team, and history at least as long as Simple Analytics' 3 years.

## Simple Analytics alternatives compared, step by step

![A five-step chart of how long each tool can tie two page views to one person: Simple Analytics not at all, GoatCounter 8 hours, Plausible, Pirsch, invisit and Swetrix visits 1 day, Umami and Swetrix profiles 1 month, Matomo 13 months with its cookie.](https://invisit.dev/_astro/linking.CTdmhXgl.png)

*The ladder: each step to the right links more of one person's page views, from each vendor's own documentation.*

| Tool             | What it processes to tell visitors apart                | Links two requests for        | Funnels                    | Vendor; data stored                       | Open source           | 100K a month, 3 logins | 1M a month, 3 logins | Imports Simple Analytics history |
| ---------------- | ------------------------------------------------------- | ----------------------------- | -------------------------- | ----------------------------------------- | --------------------- | ---------------------- | -------------------- | -------------------------------- |
| Simple Analytics | The referrer; the IP address is dropped                 | Not at all                    | Aggregate goals            | Netherlands; Netherlands and Germany      | Tracking scripts, MIT | $60                    | $100                 | Reference                        |
| GoatCounter      | Site, IP and user agent, in memory only                 | 8 hours                       | No                         | Ireland; Finland and Germany              | Yes, EUPL 1.2         | Free                   | Free                 | No                               |
| Plausible        | Daily salt, domain, IP, user agent                      | 1 day                         | Business plan              | Estonia; Germany, EU-owned providers only | Yes, AGPL             | $29 (Growth)           | $104 (Growth)        | Its own daily CSV format         |
| Pirsch           | IP, user agent, date, per-site salt                     | 24 hours                      | Plus plan                  | Germany; Germany                          | Core library only     | $12                    | $54                  | No                               |
| invisit          | Site, date, device, browser and OS type, IP, daily salt | 1 day                         | Every plan, inside a visit | Data in Germany, Cloudflare (US) in front | Tracker and SDKs, MIT | $14                    | $49                  | No                               |
| Swetrix          | Project, IP, user agent, daily and monthly salts        | 1 day, profiles up to a month | Every plan                 | United Kingdom; Germany                   | Yes, AGPL-3.0         | $19                    | $79                  | Yes, the CSV                     |
| Umami Cloud      | Website, IP, user agent, monthly salt                   | Up to a month                 | Every plan                 | United States; EU or US region            | Yes, MIT              | $20 (Pro)              | $20 (Pro)            | By request, CSV                  |
| Matomo Cloud     | A first-party cookie, or a daily config hash            | 13 months with the cookie     | Cloud, or a paid plugin    | New Zealand; Germany                      | Yes, GPL v3           | $42                    | $204                 | No                               |

Prices are monthly on monthly billing, for the cheapest plan with three logins, in each vendor's own unit: page views and events (Simple Analytics, Plausible), page views, events and 10% of session extensions (Pirsch), events (invisit, Swetrix), events plus each stored property (Umami) or hits (Matomo). Plausible's funnels need Business, $39 at 100K and $139 at 1M; Pirsch's need Plus, $27 and $159.

We left out three tools. Cloudflare Web Analytics counts the way Simple Analytics does and costs nothing, but Cloudflare is a US company, Web Analytics has no custom events, and its [FAQ](https://developers.cloudflare.com/web-analytics/faq/) describes sampled data kept for six months. Fathom uses a daily hash like Plausible but stores analytics in the US ([data isolation](https://usefathom.com/features/data-isolation)); see [Fathom vs invisit](/compare/fathom). Rybbit, which also imports Simple Analytics' CSV, is covered under Swetrix.

## 1. GoatCounter: best free alternative that keeps no identifier

GoatCounter is the smallest step away from Simple Analytics: no stored visitor identifier, no cookie, and by default only hourly and daily counts. It is open source under a lightly modified EUPL 1.2, free on goatcounter.com for reasonable use, and self-hostable as one Go binary on SQLite or PostgreSQL ([GitHub](https://github.com/arp242/goatcounter)).

GoatCounter's [sessions page](https://www.goatcounter.com/help/sessions) describes the step it takes: the site ID, user agent and IP address stay in memory for up to 8 hours, mapped to a random ID, so a reload or a second view of the same page in that window counts once. None of it reaches the database, and its [privacy policy](https://www.goatcounter.com/help/privacy) says browser, system, location, language and screen counts sit in separate per-day tables that cannot be joined. GoatCounter.com is operated by Martin Tournoij in Ireland, on Hetzner servers in Finland and Germany.

What GoatCounter does better: it costs nothing at small-business scale; its [home page](https://www.goatcounter.com/) says a "small-to-medium business on it is fine, but sending millions of pageviews/day isn't". There is no badge, and you can count without JavaScript through a pixel, server middleware or nginx, Apache, Caddy or CloudFront logs. `count.js` measured 3,319 bytes gzipped, against 4,793 for Simple Analytics' `latest.js`.

What GoatCounter does worse: it still processes the IP address and user agent, if only in memory, so it does not pass Simple Analytics' own test. Events are paths without properties ([events](https://www.goatcounter.com/help/events)), there are no goals or funnels, and it reports visits per page, not people. It ignores Do Not Track, which Simple Analytics honours by default, and its [FAQ](https://www.goatcounter.com/help/faq) estimates ad blockers miss about a third of page views on goatcounter.com. One person runs the hosted service, funded by donations.

Moving from Simple Analytics: there is no importer. `sa_event('signup')` becomes `goatcounter.count({ path: 'signup', event: true })`, and metadata has nowhere to go.

Choose GoatCounter for a personal or small business site that only reads page counts and wants out of the Free plan's badge and 30-day window.

## 2. Plausible: best for unique visitors and bounce rate from an EU-owned company

Plausible counts with `hash(daily_salt + website_domain + ip_address + user_agent)`, and the salt "is rotated and deleted every 24 hours" ([data policy](https://plausible.io/data-policy)). Its legal entity is incorporated in Estonia, visitor data stays in the EU on infrastructure owned by European companies, and the code is AGPL with a self-hostable Community Edition.

What Plausible does better, per its [metric definitions](https://plausible.io/docs/metrics-definitions): unique visitors within a day, visits that end after 30 minutes without activity, a bounce rate (one page and no custom event), visit duration, and entry and exit pages. Business adds funnels, user journeys, custom properties and the Stats API. Plausible also shows Search Console queries, sends email and Slack reports, and loads about 2.5 KB of script.

What Plausible does worse: the daily hash uses exactly the inputs Simple Analytics refuses, and location comes from the IP address, down to the city. Plans cap sites and logins at one each on Starter, three on Growth and ten on Business ([plan guide](https://plausible.io/docs/subscription-plans)), where Simple Analytics' Simple plan covers ten sites. Single-visit views and heatmaps are ruled out by design ([when not to use Plausible](https://plausible.io/when-not-to-use-plausible)), and there is no free hosted plan, only a 30-day trial.

Plausible bills page views and custom events. As of November 2026, [Plausible's pricing](https://plausible.io/#pricing) is $19 at 100K and $69 at 1M on Starter, $29 and $104 on Growth, and $39 and $139 on Business.

Moving from Simple Analytics: Plausible imports CSV files only in its own daily format ([CSV import](https://plausible.io/docs/csv-import)), so Simple Analytics history must be totalled per day first. `sa_event('signup', { plan: 'pro' })` becomes `plausible('signup', { props: { plan: 'pro' } })`, with properties on Business. See [Plausible vs invisit](/compare/plausible).

Choose Plausible for the smallest step that gives you real unique visitors and a bounce rate, from a vendor that keeps every provider European.

## 3. Pirsch: best for a team that reads the numbers

Pirsch hashes the IP address, user agent, date and a per-site salt, so visitors "can only be recognized for up to 24 hours", and the IP address is never stored ([privacy](https://docs.pirsch.io/privacy)). Pirsch is made by Emvi Software GmbH in Rheda-Wiedenbrück, Germany ([legal notice](https://pirsch.io/legal)), and its cloud runs in Germany.

What Pirsch does better: every plan has unlimited members and unlimited data retention, and Standard covers 50 websites ([pricing](https://pirsch.io/pricing)), against $20 per extra user, 3 years and 10 websites on Simple Analytics. Standard includes session analysis, events with metadata, email reports, Search Console and traffic spike notifications, and `pa.js` measured about 3.5 KB gzipped.

What Pirsch does worse: funnels, A/B testing and revenue tracking need Plus. Pirsch keeps the user agent header, separately from page views, for up to three months. At your plan's limit, dashboard access stops at that day while collection continues for five more. Self-hosting is Enterprise only, and the statistics export covers the last 12 months.

Pirsch bills 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 $27 and $159, and a year costs ten months. Three people at 100K pay $12 on Pirsch Standard and $60 on Simple Analytics.

Moving from Simple Analytics: Pirsch imports Google Analytics, Plausible and Fathom history, not Simple Analytics'. `sa_event('signup', { plan: 'pro' })` becomes `pirsch('signup', { meta: { plan: 'pro' } })`.

Choose Pirsch when several people read the numbers across many sites and you never want old data deleted.

## 4. invisit: best for each visit step by step, heatmaps and payment revenue

invisit, the tool we build, answers what Simple Analytics rules out by design: what one visit did, page by page, and where people click. invisit tells visitors apart with a keyed hash of the site, the date, the device, browser and OS type and the IP address, mixed with a random salt for each UTC day that is deleted about 25 hours after the day ends. Raw IP addresses are never stored, and browsers sending Global Privacy Control or Do Not Track can be left out if you choose ([privacy guide](https://invisit.dev/docs/guides/privacy.md)). Data is stored in Falkenstein, Germany, at Hetzner.

What invisit does better: every visit's pages and events in order, live in Realtime and at any age through the [REST API](https://invisit.dev/docs/api/rest.md) and [MCP server](https://invisit.dev/docs/api/mcp.md); [funnels](https://invisit.dev/docs/guides/events.md#funnels) of 2 to 8 steps inside one visit on every plan; heatmaps with clicks, rage clicks, dead clicks and scroll depth in 5% bands; web vitals; and payments, refunds and net revenue read from Stripe, Paddle, Polar, Lemon Squeezy, Creem or Dodo Payments. Members are unlimited and data is kept forever.

What invisit does worse: it cannot import your Simple Analytics history. Its daily hash uses the IP address, and because it hashes the device, browser and OS type rather than the full user agent, people on one office network with the same setup merge a little more often. Cloudflare, a US company, runs invisit's DNS and CDN, so a rule of EU companies only passes Simple Analytics and fails invisit. The core script is about 8.5 KB gzipped, there are no email reports, self-hosting or session recordings, and revenue is not attributed to sources or campaigns.

invisit bills page views, custom events (automatic outbound-link and download events included), conversions and short-link clicks. As of November 2026, the free plan covers 20,000 events a month on 4 sites, commercial use allowed, and paid plans cost $14 at 100K, $49 at 1M and $199 at 10M ([pricing](/pricing)).

Moving from Simple Analytics: `sa_event('signup', { plan: 'pro' })` becomes `track('signup', { plan: 'pro' })`; the full mapping is in [Simple Analytics vs invisit](/compare/simple-analytics).

Choose invisit when the question has become what visitors did, not only how many came.

## 5. Swetrix: best for bringing your Simple Analytics history with you

Swetrix imports the raw CSV that Simple Analytics exports, so your old page views and events appear in the new dashboard, marked as imported ([data import](https://swetrix.com/docs/data-import)). Swetrix Ltd is registered in Edinburgh, United Kingdom ([imprint](https://swetrix.com/imprint)), stores analytics data on Hetzner servers in Germany ([data policy](https://swetrix.com/data-policy)), and publishes its code under AGPL-3.0.

Swetrix's [visitor identification](https://swetrix.com/docs/visitor-identification) hashes the IP address, user agent and project ID with two salts: a session salt rotated every 24 hours at UTC midnight, and a profile salt rotated monthly to recognise returning visitors. Sessions end after 30 minutes without activity, only a random number is stored, and location is looked up from the IP address down to the city.

What Swetrix does better: Standard includes funnels, user flow, sessions and user profiles, error tracking, performance monitoring, revenue from Stripe or Paddle attributed to visitors and campaigns, email reports, alerts, 10 websites and 10 members ([pricing](https://swetrix.com/pricing)). Plus adds session replays, feature flags and A/B tests, and Swetrix's [comparison page](https://swetrix.com/comparison/cloudflare-analytics) lists retention as unlimited.

What Swetrix does worse: the monthly profile salt links a visitor for up to a month, two steps from Simple Analytics. Its [DPA](https://swetrix.com/dpa) lists Sentry, a US company, as a subprocessor for error tracking and monitoring. There is no free plan, the 14-day trial needs a payment method, and `swetrix.js` measured 6,730 bytes gzipped.

Swetrix bills page views, custom events, CAPTCHA completions and error events. As of November 2026, Standard costs $19 at 100K, $79 at 1M and $249 at 10M, and Plus $39 and $179 at 100K and 1M; the 1M and 10M prices come from the open-source [pricing catalog](https://github.com/Swetrix/swetrix/blob/main/web/app/lib/pricing/catalog.ts) behind Swetrix's price slider. A year costs ten months.

Moving from Simple Analytics: on the Export data page choose All, CSV and every field, then upload the file under Settings, Import data; each upload can be up to 100 MB. `sa_event('signup', { plan: 'pro' })` becomes `swetrix.track({ ev: 'signup', meta: { plan: 'pro' } })` ([script reference](https://swetrix.com/docs/swetrix-js-reference)).

Rybbit imports the same CSV on its paid Cloud plans ([data import](https://rybbit.com/docs/data-import)) and adds session replay on Pro, but its visitor ID, a hash of IP address and user agent, lasts across days unless you turn on User ID Salting ([site settings](https://rybbit.com/docs/site-settings)).

Choose Swetrix to keep your history and gain sessions, funnels and error tracking in one open-source tool.

## 6. Umami: best free or self-hosted alternative with funnels and returning visitors

Umami hashes the website ID, IP address, user agent and a salt that rotates monthly by default, so a visitor counts once for up to a month ([metric definitions](https://docs.umami.is/docs/metric-definitions)). As our [cookieless analytics breakdown](/blog/cookieless-analytics#umami-a-hash-with-a-monthly-salt) shows, that salt is derived from the date and a long-lived `APP_SECRET`, not deleted. Umami Software, Inc. is a Delaware company in San Francisco ([terms](https://umami.is/terms)), Umami Cloud stores data in an EU or US region chosen at signup ([Cloud FAQ](https://docs.umami.is/docs/cloud/faq)), and the code is MIT.

What Umami does better: a free hosted plan with funnels, retention, journeys, goals and revenue reports, and returning visitors within the month. The [pricing page](https://umami.is/pricing) lists Hobby free up to 100K events (1 site, 6 months of data), Pro at $20 for 1M events (20 sites, 10 members, 2 years) and Business at $200 for 10M with heatmaps and session replays. Self-hosting on Node.js and PostgreSQL is free.

What Umami does worse: a month-long link sits further from Simple Analytics than any daily hash, and whoever holds `APP_SECRET` can recompute it. Umami is a US company, Hobby has no team members, Pro keeps 2 years against Simple Analytics' 3, and each stored event property bills as one more event.

Moving from Simple Analytics: Umami Cloud imports CSV exports by request from Pro, handled by its team ([import data](https://docs.umami.is/docs/cloud/import-data)); the docs do not name Simple Analytics. `sa_event('signup', { plan: 'pro' })` becomes `umami.track('signup', { plan: 'pro' })`. See [Umami vs invisit](/compare/umami).

Choose Umami for funnels and returning visitors at no cost, or for a dashboard on your own server.

## 7. Matomo: best when you need people across weeks and will ask for consent

Matomo is the far end of the ladder. By default its tracker sets a first-party `_pk_id` cookie with a visitor ID for 13 months, `_pk_ses` for 30 minutes and `_pk_ref` for 6 months ([cookie list](https://matomo.org/faq/general/faq_146/)). With cookies off, Matomo groups requests by a `config_id` hashed from the OS, browser, plugins, IP address (anonymised by default) and language, with a random seed discarded every day ([config_id FAQ](https://matomo.org/faq/general/how-is-the-visitor-config_id-processed/)). Matomo is GPL v3 and free to self-host; Matomo Cloud is run by InnoCraft Limited, a New Zealand company ([Cloud privacy policy](https://matomo.org/matomo-cloud-privacy-policy/)), on AWS in Frankfurt ([subprocessors](https://matomo.org/matomo-cloud-dpa/subprocessors/)).

What Matomo does better: everything that needs a person across visits, including returning visitors, visitor profiles, a visits log, attribution across sessions and ecommerce reports, plus a Google Analytics importer. Matomo Cloud adds funnels, heatmaps, session recordings and A/B tests.

What Matomo does worse: in most of the EU the cookie needs consent, so visitors who decline are not counted, the opposite of the consent-independent count Simple Analytics sells. Matomo's consent-free mode for France turns off the visits log, visitor profiles, heatmaps and recordings ([CNIL guide](https://matomo.org/faq/how-to/how-do-i-configure-matomo-without-tracking-consent-for-french-visitors-cnil-exemption/)). `matomo.js` measured about 22 KB gzipped, and Matomo Cloud costs $42 a month at 100K hits and $204 at 1M ([pricing](https://matomo.org/pricing/)).

Moving from Simple Analytics: there is no importer. `sa_event('signup', { plan: 'pro' })` becomes `_paq.push(['trackEvent', 'Account', 'signup', 'pro'])`, since Matomo events take a category, action, name and value. See [Matomo vs invisit](/compare/matomo).

Choose Matomo when multi-week attribution matters more than skipping the banner, or when policy requires self-hosting a full suite.

## When should you stay on Simple Analytics?

Stay on Simple Analytics when one of its design choices is a requirement rather than a preference. None of the seven alternatives matches these:

- Your data protection officer rules out any identifier made from an IP address and user agent. Every alternative here processes both, if only in memory.
- You need only EU companies in the collection path. Simple Analytics lists Worldstream in the Netherlands, Hetzner in Germany and Bunny, a Slovenian CDN ([subprocessors](https://www.simpleanalytics.com/subprocessors)); its US providers receive data only for opt-in features.
- You run GA4 behind a banner and want a second count that does not move with the acceptance rate. That is Simple Analytics' main enterprise use, with a free 30-day proof of concept next to GA4 ([pricing](https://www.simpleanalytics.com/pricing.md)).
- You want a country without any IP lookup. Simple Analytics derives it from the time zone.
- You work alone at high volume. At 10M a month the Simple plan costs $160, about Pirsch Standard's $159 and less than Plausible Starter ($169), invisit ($199) or Swetrix Standard ($249).

If your only complaint is that visitors look high, read them as visits. That costs nothing and keeps the model you chose.

## How do you switch from Simple Analytics without losing history?

Export every site's raw data first, import it where a tool accepts it, then run both trackers side by side for two to four weeks before removing Simple Analytics' script.

1. Export the raw data. On the Export data page, pick All (page views and events) and every field, as CSV for an importer or Parquet for your own archive ([export](https://docs.simpleanalytics.com/export-data)). On the Free plan, only the last 30 days exist.
2. Import where you can. Swetrix and Rybbit take the CSV as it is; Plausible needs daily totals in its own format; the others start empty.
3. Install the new tracker next to `latest.js`. Both can run on the same pages.
4. Compare page views first, because they do not depend on identity. Then compare Simple Analytics' visitors with the new tool's visits or sessions.
5. Replace every `sa_event` call and `data-simple-event` attribute, using the table below.
6. Rebuild goals as funnels. Expect lower conversion rates where a funnel requires one visit: an aggregate goal counts steps taken by different people at different times.
7. Remove `latest.js`, `auto-events.js` and any proxy rules, then cancel. Cancelling ends the subscription at the end of the period and does not delete your data; deleting the account is a separate step ([cancel](https://docs.simpleanalytics.com/cancel-account)).

Your export stays useful after you leave. This query rebuilds Simple Analytics' daily page views, visitors and events from the raw file, using the `added_date`, `is_unique` and `datapoint` fields documented for [the export](https://docs.simpleanalytics.com/api/export-data-points):

```sql title="simple-analytics-history.sql"
-- Daily totals from a Simple Analytics raw export (All, every field).
-- Run with the DuckDB CLI: duckdb < simple-analytics-history.sql
SELECT
  added_date,
  count(*) FILTER (WHERE datapoint = 'pageview') AS pageviews,
  count(*) FILTER (WHERE datapoint = 'pageview' AND is_unique::BOOLEAN) AS visitors,
  count(*) FILTER (WHERE datapoint <> 'pageview') AS events
FROM read_csv('export.csv') -- or read_parquet('export.parquet')
GROUP BY added_date
ORDER BY added_date;
```

| Tool             | Custom event with a property                             | What changes                                 |
| ---------------- | -------------------------------------------------------- | -------------------------------------------- |
| Simple Analytics | `sa_event('signup', { plan: 'pro' })`                    | Metadata must not contain identifiers        |
| GoatCounter      | `goatcounter.count({ path: 'signup', event: true })`     | No properties; the path is the event name    |
| Plausible        | `plausible('signup', { props: { plan: 'pro' } })`        | Properties need the Business plan            |
| Pirsch           | `pirsch('signup', { meta: { plan: 'pro' } })`            | Metadata becomes `meta`                      |
| invisit          | `track('signup', { plan: 'pro' })`                       | Up to 32 properties                          |
| Swetrix          | `swetrix.track({ ev: 'signup', meta: { plan: 'pro' } })` | Up to 20 metadata keys                       |
| Umami            | `umami.track('signup', { plan: 'pro' })`                 | Each stored property bills as one more event |
| Matomo           | `_paq.push(['trackEvent', 'Account', 'signup', 'pro'])`  | Category, action, name and value             |

### Before you cancel Simple Analytics

- [ ] The raw export, All and every field, is downloaded for every site.
- [ ] Your data protection officer has signed off on the new tool's identifier and how long it lasts.
- [ ] The new vendor's DPA, subprocessors and data location are checked, CDN included.
- [ ] Every `sa_event` call, `data-simple-event` attribute and `sa_metadata` object is replaced.
- [ ] Goals are rebuilt as funnels or conversions and are firing.
- [ ] Both tools ran side by side, compared on page views and on visits.
- [ ] Your privacy policy describes the new identifier instead of "no identifier".

The trap to avoid is setting Simple Analytics' visitors beside the new tool's unique visitors and reading the drop as lost traffic. It is the same traffic, counted as people instead of arrivals.
