Migrating to Fathom Analytics
Fathom is the destination for content sites, indie founders, and one-person teams who want a working tracker before lunch and a dashboard that fits on a phone screen. Cloud-only by design, six auto-events out of the box, annual prepay that beats every comparable monthly plan, and an EU Isolation tier for teams that need German-DPO-friendly data residency. This page is the cross-source map: where you are coming from determines which migration guide to follow, which auto-event mapper to use, and which reconciliation gotchas to expect. Read the source map first, then click into the matching pair page for the install.
From which source — pick your starting line
Five common origin points and their dedicated pair pages.
Coming from GA4
The main path. Auto-event mapping covers around 6 of GA4's 120 typical events — Fathom's six built-in events (pageview, outbound link, file download, scroll, form, button) are a deliberate subset, not a coverage gap. The events you "lose" are events that did not produce decisions on the GA4 dashboard either.
GA4 → Fathom →Coming from Universal Analytics
UA was sunset 2024-07-01. Historical-data export route, not a live cutover. Pull your UA export from BigQuery, shape it into Fathom's CSV import schema, and load. The live tracker step is a fresh install.
UA → Fathom (stub) →Coming from Mixpanel
The hardest case for Fathom. Mixpanel is event-first with rich property schemas; Fathom is page-first with six fixed events. Most teams keep Mixpanel for product analytics and add Fathom for marketing-page analytics in parallel.
Mixpanel → Fathom (stub) →Coming from Plausible
A common cross-cookieless move. Goals translate one-to-one. Behavioral differences are small; teams move for either pricing (Fathom annual prepay is cheaper at sub-100 K pageviews) or for the EU Isolation tier (which Plausible does not offer as a per-tier add-on).
Plausible → Fathom (stub) →Coming from Simple Analytics
Niche but real. Simple Analytics and Fathom are positionally similar — cookieless, content-site-focused, simple dashboard — and the migration is mostly a tag swap. The reasons to move are price (Fathom is cheaper on annual prepay) or the EU Isolation tier.
Simple Analytics → Fathom (stub) →If your source is none of those — Adobe, Heap, Amplitude, Snowplow — file an issue on GitHub. The pair page roster is built by request.
Fathom's structural choices
Three architectural commitments that define what Fathom is and is not. None are roadmap items; they are commitments the company has restated publicly multiple times.
Cloud-only, by design. Fathom does not ship a self-host edition. There has never been one, there is no plan to add one, and the founders have written about the decision in public — the trade-off is operational simplicity for the customer and revenue predictability for the company. If your DPO requires self-host, this is the wrong destination; go to Plausible Community Edition or self-hosted Matomo.
No self-host, ever. This is worth stating twice. There is no community edition, no enterprise on-prem, no air-gapped variant. The cloud-only commitment is the product. A team evaluating Fathom against open-source alternatives should treat "we might self-host later" as out-of-scope; the answer to "can we self-host Fathom in 2027" is no.
EU Isolation as a paid tier. Fathom is a Canadian company. Default Fathom traffic routes through Canadian and US infrastructure, which is fine for most teams (Canada has an adequacy decision from the European Commission and is a recognized GDPR-compliant data destination). Teams with stricter requirements — German DPOs who flag non-EU corporate ownership, EU government clients with explicit "data must not leave the EU" contract clauses — can pay an extra €24/mo for the EU Isolation tier, which routes all traffic through EU-only data centers and stores all data in the EU. The fact that this is a paid tier rather than the default is a deliberate pricing-strategy decision; it is also why Fathom can quote $14/mo at 100 K pageviews on the standard plan.
If those three constraints (no self-host, cloud-only, EU as a paid upgrade) are deal-breakers, the rest of this page does not apply. Go to Plausible or Matomo instead.
Cloud tiers and the annual-prepay arbitrage
Fathom's pricing is the most aggressive of the four mainstream cloud-hosted destinations, and the annual-prepay arbitrage is the headline.
| Plan | Monthly | Annual prepay | Implied savings |
|---|---|---|---|
| Starter (100 K pageviews) | $14/mo | $84/year ($7/mo) | 50% |
| Growth (1 M pageviews) | $44/mo | $264/year ($22/mo) | 50% |
| Business (10 M pageviews) | $144/mo | $864/year ($72/mo) | 50% |
| EU Isolation add-on | $24/mo | $144/year ($12/mo) | 50% |
The 50% annual prepay is unusual — Plausible offers 33%, Matomo Cloud offers 17%, Umami Cloud offers 0%. The pricing is also flat-rate within each tier; there is no per-event overage above your tier limit until you cross into the next tier, at which point you are bumped automatically.
The math vs Plausible. At 100 K pageviews with EU residency and annual prepay: Fathom $84 + EU Isolation $144 = $228/year. Plausible Cloud annual prepay = $72/year (EU residency built-in, no add-on). Plausible wins by a factor of 3.
The math vs Plausible without EU Isolation. Fathom annual $84/year vs Plausible annual $72/year. Roughly tied; Fathom is slightly more expensive but offers a larger free trial and a marginally simpler dashboard. The decision at this volume is on workflow fit, not price.
The math vs Matomo Cloud. At 100 K visits, Matomo Starter is €23/mo annualized = €276/year. Fathom annual without EU Isolation is $84/year — a factor of 4 cheaper, but Matomo includes plugins Fathom does not have (heatmaps, A/B testing, funnels). The price difference is the feature difference; the choice is on which features you actually use.
The annual-prepay arbitrage is the cleanest part of Fathom's pricing. If you are confident enough to commit to a tracker for a year, you save 50%; if you are not, the monthly tier is still the cheapest of the destinations covered on this site.
Standard migration playbook to Fathom
The five steps generalize across source trackers. Pair pages cover source-specific traps.
- Pick a tier and decide on EU Isolation. Tier choice is by pageview count (Starter ≤100 K, Growth ≤1 M, Business ≤10 M). EU Isolation is a separate decision driven by your DPO; if no one has flagged data residency as an issue, skip it. Set the timezone on first dashboard load — changing later does not migrate historical buckets.
- Install the JS tag. One line:
<script src="https://cdn.usefathom.com/script.js" data-site="ABCDEFGH" defer></script>. The site code is generated when you create the property. Thedeferis non-negotiable. Subdomain tracking is opt-in via adata-spaattribute for SPAs and a separate domain entry in the dashboard for sibling domains. - Map the six auto-events to your existing event taxonomy. The Fathom JS API exposes
fathom.trackEvent('Event Name')for custom Goals beyond the six auto-events. The Event Mapping Wizard outputs the Goal-name list directly from a GA4 events export. Most teams reduce 30+ GA4 events to 6-10 Fathom Goals during this step, and the reduction is healthy — the unmapped events were not driving decisions. - CSV import for historical data. Fathom has a CSV importer that takes daily-aggregated pageview, referrer, and country data and writes it into the destination dashboard's history. Pull a daily aggregation from your source (GA4 BigQuery, UA archive, Plausible API export) and load it. The granularity is day-level, not session-level — you will not get user-journey reports out of imported history, only volume trends.
- Run a two-week parallel period and cut over. Tolerance bands: pageviews ±2% green, cookieless inflation at 5-12% on bannered GA4 sources is yellow and expected. The methodology page documents the protocol. Cutover is one commit (remove source tracker), Wednesday morning. Annual-prepay billing kicks in on the first day after the parallel period if you committed at signup.
Engineering hours: 6-10 from a GA4 source, 4-8 from a Plausible source, 12-18 from a Mixpanel source. Calendar time: two weeks of parallel run regardless of starting point.