invisit
All posts

By Miraç Berk22 min read

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.

A soft 3D staircase of frosted glass steps, each holding a small visitor figure, rising toward a light analytics panel in violet dithered light.

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:

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).

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 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 lists what it keeps and drops:

Its 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, and the counting methods side by side in how cookieless analytics counts unique visitors.

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
How many sessions? The same number. No timeout: a tab left open for hours and then clicked is still one session Unique visits
Bounce rate? Not reported; the Stats API has no bounce field Stats API
Time on page? The median of visible seconds; views under 5 seconds are left out Time on page
What did one visit do, page by page? Not available; the page-load ID resets on every full page load Metrics
Funnels? Goals with several steps, counted in aggregate, not as the same people moving from step to step Sessions without consent
Did Monday’s ad click lead to Friday’s purchase? No, by design Sessions without consent

Simple Analytics calls these “aggregate funnels”. Its 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, GoatCounter, Plausible (visits end after 30 minutes without activity), Swetrix, Umami (a visit is the session hashed with an hourly salt) and Matomo. 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:

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:

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.
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 describes sampled data kept for six months. Fathom uses a daily hash like Plausible but stores analytics in the US (data isolation); see Fathom vs invisit. 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).

GoatCounter’s sessions page 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 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 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), 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 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). 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: 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), where Simple Analytics’ Simple plan covers ten sites. Single-visit views and heatmaps are ruled out by design (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 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), 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.

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). Pirsch is made by Emvi Software GmbH in Rheda-Wiedenbrück, Germany (legal notice), 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), 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). 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 and MCP server; 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).

Moving from Simple Analytics: sa_event('signup', { plan: 'pro' }) becomes track('signup', { plan: 'pro' }); the full mapping is in Simple Analytics vs invisit.

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). Swetrix Ltd is registered in Edinburgh, United Kingdom (imprint), stores analytics data on Hetzner servers in Germany (data policy), and publishes its code under AGPL-3.0.

Swetrix’s 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). Plus adds session replays, feature flags and A/B tests, and Swetrix’s comparison page 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 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 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).

Rybbit imports the same CSV on its paid Cloud plans (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).

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). As our cookieless analytics breakdown 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), Umami Cloud stores data in an EU or US region chosen at signup (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 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); the docs do not name Simple Analytics. sa_event('signup', { plan: 'pro' }) becomes umami.track('signup', { plan: 'pro' }). See Umami vs invisit.

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

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). 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). Matomo is GPL v3 and free to self-host; Matomo Cloud is run by InnoCraft Limited, a New Zealand company (Cloud privacy policy), on AWS in Frankfurt (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). matomo.js measured about 22 KB gzipped, and Matomo Cloud costs $42 a month at 100K hits and $204 at 1M (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.

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:

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). 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).

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:

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 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.