Migrating away from Google Analytics 4

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

This page is the index, not the deep guide. If you already know which destination you want — Plausible, Matomo, or Fathom — go directly to the pair page; that is where the auto-event mapping, parallel-run reconciliation, and the war stories live. If you do not yet know, work the decision tree below first; the wrong destination is the most expensive mistake in any GA4 exit, and switching after cutover means a second parallel-run cycle. The five destination questions take ten minutes. Allocate them before you allocate the migration weekend.

Decision tree — five questions, one answer

The questions are not equal. Question 1 is a filter; everything else is a tie-break.

Q1 Do you have a hard self-host requirement?
A government client, a German DPO who reads contracts, an internal data-residency policy that says "no third-party cloud" — those rule out Fathom (cloud-only) and downgrade Plausible to its Community Edition. If yes, your two options are Plausible CE or Matomo on-prem. Skip to Q4.
Q2 Do you need feature parity with GA4?
Heatmaps, session recordings, multi-touch attribution, funnels with branching logic, audience segments, custom dimensions with user-level joins. If you nodded at three or more, only one destination matches: Matomo. Plausible and Fathom remove those features by design.
Q3 Are you a one-person operation on a content site?
A blog, a docs site, a one-product landing page, a writer who wants pageviews and referrers and no further decisions. If yes, Fathom is the destination — six auto-events, one dashboard, $84/year on annual prepay, the dashboard fits on a phone screen.
Q4 Is your legal team explicitly EU-only?
A DPO who has flagged non-EU corporate ownership as a disqualifier. That rules out Fathom (Canadian) and points at Plausible (Estonian) or self-hosted Matomo on EU infrastructure. Canada has an adequacy decision from the European Commission, so most teams treat Fathom as fine — but if your DPO has said no, that no is final.
Q5 Are you under 500 K pageviews/month with a mid-budget?
The middle band — between hobby site and enterprise — is where Plausible wins on cost-to-features. Below 100 K, Fathom annual prepay beats it. Above 5 M, self-hosted Matomo beats both. In the middle, Plausible is the answer roughly two times out of three.

If two destinations tie after the five questions, run a one-week parallel test on the cheaper one before committing. Reconciling once costs a working day. Re-migrating after cutover costs a weekend.

Comparison matrix

DimensionPlausibleMatomoFathom
Cost at 100 K pageviews$9/mo€23/mo Cloud, free self-host$7/mo annual prepay
Self-host optionyes (CE, AGPL)yes (free, GPL)no — cloud-only
EU residency built-inyes (Estonia)yes (Cloud Frankfurt)yes ($24/mo isolation tier)
Multi-touch attributionnoyes (last-click + position-based)no
Heatmaps / recordingsnoyes (paid plugins / Cloud add-on)no
Dashboard simplicityone screen, ten tilesfull GA4-equivalent surfaceone screen, six tiles
Domain-rating (Ahrefs)DR 79DR 81DR 67
Migration time (test stand)8–14 hrs14–24 hrs (self-host: +1 day)6–10 hrs

DR figures from Ahrefs as of 2026-05. The migration-time column counts engineering hours only; the calendar runs longer because a parallel run is two weeks regardless of destination. Self-hosted Matomo adds a VPS-provisioning day.

The columns that matter most are rows 2 (self-host), 4 (MTA), and 5 (heatmaps). Those three are the load-bearing differences. Cost is a tie-breaker, not a decision driver — the spread between cheapest and most expensive at typical traffic is around $40 a month, less than the cost of one engineering hour.

What you keep, what you lose

What every GA4 exit preserves: pageviews, sessions, referrers, top-pages, top-referrers, country breakdown, device breakdown, unique-visitors (under a different definition — none of the three destinations use the GA4 client-id cookie), and revenue events fired through a JS API. That covers about 80 % of what most teams actually look at in GA4 weekly.

What you lose, regardless of destination: the BigQuery export and any SQL pipeline downstream of it; user-level joins (any analysis that says "users who did X then did Y N days later"); custom-dimension nesting more than one layer deep; engaged-sessions as GA4 defines it (10-second-active heuristic); and Google Signals demographic enrichment. Plausible and Fathom give you nothing of the BigQuery story; Matomo gives you a self-hosted SQL database, which is closer but not identical.

What only Matomo preserves: heatmaps, session recordings, multi-touch attribution, full funnel reports, A/B testing module, custom segments. If your weekly workflow depends on any of those, the decision tree collapses to one cell.

Five-step GA4-exit playbook

The destination differs; the steps do not. Each pair page goes deeper on its specific quirks.

  1. Export your historical GA4 data. BigQuery export is the only reliable path; the GA4 UI export caps at 10 K rows and rounds session counts. Schedule the export once, into a dated table, before you touch anything else. If you skip this, the cutover is irreversible — GA4 deletes data on a 14-month rolling window for free properties, 26 months for GA360.
  2. Pick a destination via the decision tree above. Do not pick on price alone; the wrong destination is the most expensive mistake. If two tie, run a one-week throwaway test on the cheaper one.
  3. Install the destination tracker in parallel with gtag.js. Two <script> tags, both fire client-side, no cookie banner change yet. Each pair page documents the script-tag specifics: Plausible, Matomo, Fathom.
  4. Run a two-week parallel period and reconcile daily. Tolerance bands: pageviews ±10 % is yellow, ±5 % is green, ±20 % is red and means a tracker bug. The expected gap is +5 to +12 % cookieless inflation on the destination side, because cookieless trackers count visitors who declined the GA4 banner. Document, do not panic.
  5. Cutover: remove gtag.js, archive the GA4 property in read-only mode, keep the BigQuery export queryable for 12 months. The archive is the rollback path. Do not delete the GA4 property for at least a year; you will want to re-query it.

The cutover deploy itself is one commit. Everything before it is reconciliation; everything after is monitoring.

Need help with the event-mapping step? Paste a GA4 events export into the Event Mapping Wizard and it returns the matching Plausible Goals, Matomo events, or Fathom auto-events in two minutes.

FAQ

Can I keep GA4 running alongside the new tool?
Yes, indefinitely. Both scripts fire client-side; neither blocks the other. The cost is page weight (gtag.js is around 50 KB; Plausible / Fathom / Matomo trackers are 1–4 KB) and a slightly noisier console. Most teams keep the dual-tag setup for 2–4 weeks, then remove gtag once the parallel run is green.
What about the old Universal Analytics data?
UA stopped collecting on 2023-07-01 and was fully sunset on 2024-07-01. If you have UA data sitting in a BigQuery export, keep it queryable; the schema is different from GA4 and you cannot rejoin them. If you only have UA data inside the UA UI, it is gone. There is no migration path for UA → Plausible / Matomo / Fathom; only the GA4 export is supported by destination importers.
Realistic cost comparison at 1 M pageviews/month?
Plausible $59/mo, Fathom annual prepay $27 + EU isolation $24 = $51/mo, Matomo Cloud €107/mo, Matomo self-hosted on a €40 VPS. The spread is roughly 3× between cheapest (self-host) and most expensive (Matomo Cloud). At that traffic level, do not over-optimize cost — pick on feature fit.
How long does the full migration take?
Engineering hours: 6–24 depending on destination and event-mapping complexity. Calendar time: two weeks of parallel run is non-negotiable for any site with seasonality. Plan for a four-week project end-to-end including the post-cutover monitoring tail.
Do I need a GDPR cookie banner with the new tool?
No, on Plausible and Fathom (both cookieless, Article 6(1)(f) legitimate interest, no banner). Conditional on Matomo — the default install uses a 1-year visitor cookie and needs a banner; the cookieless mode is one config flag away and removes the banner requirement. Removing the banner is one of the largest behavioral wins of the migration; expect a measurable lift in counted pageviews.
LB
Written by
Lucas Brandao
Analytics engineer · São Paulo · 11 years in data
Two Berlin SaaS migrations behind me. I write migrateanalytics.com as a public utility — no product, no affiliate, no consulting. All measurements are reproducible; raw data lives on GitHub.
v1 · 2026-05-04 · first publication. · edit on GitHub →