Migrating from Google Analytics to Privacy-Focused Alternatives
So you've finally decided to ditch Google Analytics. Maybe it's the GDPR headaches, maybe it's the bloated JavaScript bundle, or maybe you just don't want to hand your users' data to the world's largest ad company. Whatever the reason, welcome to the club. I migrated three projects off GA4 over the past year, and each time I picked a different privacy-focused alternative. Here's what I learned comparing Umami, Plausible, and Fathom — and how to actually make the switch without losing the analytics data you care about. GA4 works. Nobody's disputing that. But there are real costs that don't show up in the pricing page (which is "free"): Bundle size: The GA4 snippet plus gtag.js adds ~45KB to your page. Privacy-focused alternatives typically ship under 5KB. Cookie banners: GA4 sets cookies, which means you need consent banners in the EU. Most privacy-focused tools are cookieless, so no banner required. Data ownership: Your analytics data lives on Google's servers, processed however Google sees fit. Self-hosted options give you full control. Complexity: GA4's interface is... a lot. If you just need pageviews, referrers, and device breakdowns, it's like using a bulldozer to plant a flower. Let's look at the three alternatives I've actually used in production. Umami is open-source and designed to be self-hosted, though they also offer a cloud-hosted option. This is the one I reach for when I want maximum control. What it does well: Completely free when self-hosted Cookieless tracking — no consent banners needed Dead simple UI that loads fast Supports multiple sites from one dashboard The tracking script is tiny (~2KB) What it doesn't: Self-hosting means you're on the hook for uptime and maintenance Fewer integrations out of the box compared to Plausible The API is functional but not as polished Here's how simple the setup is once you have Umami running: — that's it, seriously --> And if you want to track custom events: // Track a button click document.getElementById('signup-btn').addEventListener('click', () => { // umami.track(eventName, eventData) umami.track('signup-click', { plan: 'pro' }); }); Plausible is also open-source with a self-hosted option, but their cloud-hosted product is where most people land. It's polished, opinionated, and genuinely pleasant to use. What it does well: The dashboard is gorgeous — single page, no navigation needed Script is around 1KB, the smallest of the three Goal conversions and custom events are well thought out Email reports built in Strong community and active development What it doesn't: Cloud pricing starts at $9/month (for 10K monthly pageviews as of my last check — verify current pricing on their site) Self-hosting requires more setup than Umami in my experience Limited data retention customization on cloud plans The tracking snippet is nearly identical in structure: Fathom takes a different approach — it's a proprietary, hosted-only product. No self-hosting option. They've bet everything on being the simplest, most privacy-respecting paid analytics tool. What it does well: Arguably the cleanest UI of the three Excellent uptime and performance (they handle the infrastructure) Built-in EU isolation — your data can be processed entirely within EU borders Solid API for building custom dashboards What it doesn't: No self-hosting option, period No free tier (plans start at $15/month as of my last check) Not open-source, so you're trusting their privacy claims Fewer community plugins and integrations Feature Umami Plausible Fathom Open Source Yes Yes No Self-Hosted Option Yes Yes No Cookieless Yes Yes Yes GDPR Compliant Yes Yes Yes Free Tier Yes (self-hosted) No (cloud) No Custom Events Yes Yes Yes Script Size ~2KB ~1KB ~2KB API Access Yes Yes Yes Regardless of which tool you pick, the migration pattern is roughly the same. For Umami self-hosted, you'll need a server and a database (PostgreSQL or MySQL). Here's the quick Docker setup: # docker-compose.yml for Umami version: '3' services: umami: image: ghcr.io/umami-software/umami:postgresql-latest ports: - "3000:3000" environment: DATABASE_URL: postgresql://umami:your-password@db:5432/umami DATABASE_TYPE: postgresql depends_on: db: condition: service_healthy db: image: postgres:15 environment: POSTGRES_DB: umami POSTGRES_USER: umami POSTGRES_PASSWORD: your-password # change this obviously volumes: - umami-db:/var/lib/postgresql/data healthcheck: test: ["CMD-SHELL", "pg_isready -U umami"] interval: 5s timeout: 5s retries: 5 volumes: umami-db: For Plausible or Fathom cloud, you just sign up and add your domain. Takes about two minutes. This is the part people skip, and then they regret it. Run your new analytics alongside GA4 for at least two weeks. This lets you verify the numbers roughly match and catch any tracking gaps. Expect the numbers to differ by 10-30%. Privacy-focused tools typically report lower numbers because they don't track users who block analytics, and ad blockers are less aggressive about blocking these smaller tools. The GA4 numbers are inflated by bot traffic that these tools filter better. Once you're confident, rip the band-aid off. Remove the GA4 snippet, the gtag configuration, and any GTM containers you were using. Your page load time will thank you. Before deleting your GA4 property, export any historical data you care about. GA4 lets you export to BigQuery, or you can use the Reporting API to pull CSVs. None of the privacy-focused tools will import this data, but you might want it for year-over-year comparisons. After living with all three, here's how I'd break it down: Choose Umami if you want full control, you're comfortable running Docker, and you don't want to pay a monthly fee. It's the best bang-for-zero-bucks option, and the self-hosted model means your data never leaves your infrastructure. Choose Plausible if you want a polished hosted experience with the option to self-host later. The dashboard is best-in-class and the team ships features consistently. Choose Fathom if you want a pure SaaS experience with zero maintenance, and the price doesn't bother you. It's the most "set it and forget it" option. For most of my projects, I've landed on Umami. The self-hosted model means I'm not adding another monthly subscription, the data stays on my server, and the setup genuinely takes about 15 minutes with Docker. But I won't pretend there's a wrong answer here — all three are massive improvements over feeding your users' browsing data to Google's ad machine. The best analytics tool is the one you'll actually check. Pick whichever dashboard makes you want to open it on Monday morning.
