⚡
SelfHostStackOpen-Source Directory

Why Migrate Away from Google Analytics (GA4)?

GA4 forces EU/global privacy headaches (intrusive cookie banners, GDPR/ePrivacy liability, CNIL fines), slows down your frontend with bloated tracking scripts (45KB+), and loses up to 30-50% of visitor data to ad-blockers and privacy browsers. Self-hosting lightweight analytics like Umami or Plausible CE gives you 100% data ownership, bypasses ad-blockers cleanly when served from your primary domain, requires zero cookie consent banners, and loads in less than 2KB of JavaScript.

Technical Architecture & Migration Analysis

Google Analytics routes client telemetry through global edge ingestion nodes and BigQuery batch processing pipelines, frequently applying data sampling to dashboards. Modern self-hosted analytics use two distinct architectural patterns. Umami utilizes a lightweight Next.js/Node runtime saving raw pageview events to PostgreSQL with optimized indexing. Plausible Community Edition utilizes an Elixir runtime paired with ClickHouse — a high-performance columnar database capable of aggregating billions of events per second on standard commodity hardware with high compression ratios. Both systems provide real-time dashboard updates without data sampling.

⚠️

When NOT to Migrate (When Staying on Google Analytics (GA4) Makes Sense)

Self-hosting is not universally the right move. Keep paying for SaaS if your team hits any of these constraints:

  • ▸Your core marketing strategy relies on automated Google Ads conversion linking, smart bidding algorithms, and Google Display Network remarketing audiences.
  • ▸You require turnkey multi-channel touch attribution models integrated natively with Google BigQuery export and Looker Studio enterprise templates.
  • ▸Your team lacks a server or container environment to maintain PostgreSQL/ClickHouse database storage and automated disk cleanup policies.

Real-World Cost Comparison: Google Analytics (GA4) vs Self-Hosted

Comparing vendor cloud billings against standard Hetzner / DigitalOcean infrastructure costs at scale.

Tier / ScaleGoogle Analytics (GA4) CostSelf-Hosted VPS CostEstimated Annual SavingsTechnical Breakdown
Personal / Niche Site
50,000 pageviews/month, 3 websites
$0/month (Free GA4 with ad data sharing) or $9/mo Plausible Cloud€3.79/month (Hetzner CX22 2 vCPU, 4GB RAM)$100 - $110/year vs commercial cloudUmami runs effortlessly on a 512MB RAM footprint alongside other small sites on the same VPS.
High-Traffic SaaS / Content Site
1,000,000 pageviews/month, custom event tracking, UTM campaigns
$69 - $129/month (Plausible/Fathom Cloud tiers)€3.79/month (Hetzner CX22 2 vCPU, 4GB RAM + ClickHouse)$780 - $1,500/yearClickHouse stores 1M pageviews in ~200MB of compressed disk space with sub-10ms dashboard queries.
High-Volume Enterprise Publisher
25,000,000 pageviews/month, multi-domain tracking, custom funnels
$500 - $1,500/month (Managed Cloud) or $50,000+/yr GA360€14.28/month (Hetzner CPX31 4 vCPU, 8GB RAM with NVMe storage)$5,800 - $17,000+/yearClickHouse columnar compression handles 25M monthly records effortlessly with zero data sampling.

Top 2 Recommended Open-Source Replacements

Tested, self-contained, and production-ready. Click any tool to inspect verified docker-compose configurations, hardware sizing, and deployment guides.

Umami

MIT⭐ 25.2k+

Ultra-lightweight, privacy-focused open-source analytics with a clean UI, custom events, and zero cookie banners.

Min RAM512 MB
Min CPU1 vCPU
GitHub Repo ↗

✅ Advantages

  • Extremely lightweight: runs on any $3.50/mo VPS with minimal RAM
  • Clean, modern UI that presents all critical metrics in one single-page view
  • Simple single-command Docker deployment with PostgreSQL

⚠️ Trade-offs / Limitations

  • No built-in session video replay
  • Fewer complex multi-touch attribution reports than enterprise GA360

Core Features

▸Tracking script is under 2KB — 20x lighter than Google Tag Manager
▸No cookies required — 100% GDPR, CCPA, and PECR compliant
▸Custom event tracking, funnel analysis, and UTM campaign tracking
▸Multi-website support with shareable public or password-protected dashboards
▸Bypasses ad-blockers when served directly from your domain

Architecture Notes

Next.js / Node.js web application using Prisma ORM connected to PostgreSQL. Scripts compile to < 2KB and stream events directly into indexed relational tables.

Known Limitations

For huge traffic volumes (> 20M pageviews/mo), PostgreSQL table partitions must be configured to maintain fast query speeds.

Official Documentation ↗
📄 docker-compose.yml
Production Ready
version: '3.8'
services:
  umami:
    image: ghcr.io/umami-software/umami:postgresql-latest
    container_name: umami
    restart: always
    ports:
      - "3000:3000"
    environment:
      DATABASE_URL: postgresql://umami:secure_umami_pass_2026@db:5432/umami
      DATABASE_TYPE: postgresql
      APP_SECRET: 9f8a3c2b1e4d5f6a7b8c9d0e1f2a3b4c
    depends_on:
      - db
  db:
    image: postgres:16-alpine
    container_name: umami-db
    restart: always
    environment:
      POSTGRES_DB: umami
      POSTGRES_USER: umami
      POSTGRES_PASSWORD: secure_umami_pass_2026
    volumes:
      - umami-db-data:/var/lib/postgresql/data
volumes:
  umami-db-data:

🚀 5-Minute Deployment Guide

  1. 1Provision a $3.79/mo VPS on Hetzner or DigitalOcean with Ubuntu 24.04.
  2. 2Install Docker & Docker Compose: `curl -fsSL https://get.docker.com | sh`.
  3. 3Create a directory `mkdir -p /opt/umami && cd /opt/umami`.
  4. 4Save the docker-compose.yml file and generate a random 32-char string for `APP_SECRET`.
  5. 5Run `docker compose up -d`.
  6. 6Point an A-record (e.g. `analytics.yourdomain.com`) to your VPS IP address.
  7. 7Set up reverse proxy with Caddy or Nginx Proxy Manager for auto-renewing SSL.

Recommended Cloud VPS for Umami

Compare all VPS hosts →
Hetzner Cloud€3.79/mo

CX22 (2 vCPU, 4GB RAM, 40GB NVMe)

Best price/performance ratio in EU & US.

Deploy on Hetzner →
DigitalOcean$6.00/mo

Basic Droplet (1 vCPU, 1GB RAM)

Includes $200 free trial credits for 60 days.

Claim $200 DO Credit →

Plausible Community Edition

AGPL-3.0⭐ 20.8k+

Simple, lightweight, open-source web analytics built with Elixir and ClickHouse for massive scale.

Min RAM2 GB
Min CPU1 vCPU
GitHub Repo ↗

✅ Advantages

  • Unrivaled query performance at scale with ClickHouse columnar compression
  • Minimalist, distraction-free dashboard
  • Native conversion and revenue tracking

⚠️ Trade-offs / Limitations

  • Requires at least 2GB RAM to run ClickHouse comfortably
  • Setup is slightly heavier than Umami due to multi-database architecture

Core Features

▸Powered by ClickHouse for handling tens of millions of monthly pageviews
▸Single-page intuitive dashboard with real-time stats
▸Automated weekly email and Slack traffic reports
▸Custom goal conversions, funnel steps, and revenue tracking

Architecture Notes

Elixir/Phoenix application server connecting to ClickHouse columnar database for time-series events and PostgreSQL for administrative metadata.

Known Limitations

Requires at least 2GB RAM due to ClickHouse memory requirements.

Official Documentation ↗
📄 docker-compose.yml
Production Ready
version: '3.8'
services:
  plausible:
    image: plausible/analytics:latest
    restart: always
    command: sh -c "sleep 10 && /entrypoint.sh db createdb && /entrypoint.sh db migrate && /entrypoint.sh run"
    depends_on:
      - plausible_db
      - plausible_events_db
    ports:
      - "8000:8000"
    environment:
      - BASE_URL=https://stats.yourdomain.com
      - SECRET_KEY_BASE=YOUR_64_CHAR_SECRET_KEY_BASE_HERE_GENERATE_WITH_OPENSSL
  plausible_db:
    image: postgres:16-alpine
    restart: always
    environment:
      - POSTGRES_PASSWORD=postgres_secure_pass_2026
      - POSTGRES_DB=plausible
    volumes:
      - plausible-db-data:/var/lib/postgresql/data
  plausible_events_db:
    image: clickhouse/clickhouse-server:24.3-alpine
    restart: always
    volumes:
      - plausible-event-data:/var/lib/clickhouse
volumes:
  plausible-db-data:
  plausible-event-data:

🚀 5-Minute Deployment Guide

  1. 1Choose a VPS with at least 2GB RAM (e.g. Hetzner CX22).
  2. 2Install Docker & Git.
  3. 3Save the docker-compose.yml template.
  4. 4Generate `SECRET_KEY_BASE` using `openssl rand -base64 48`.
  5. 5Run `docker compose up -d` and configure Nginx / Caddy reverse proxy for SSL.

Recommended Cloud VPS for Plausible Community Edition

Compare all VPS hosts →
Hetzner Cloud€3.79/mo

CX22 (2 vCPU, 4GB RAM)

Effortlessly handles up to 5M monthly pageviews.

Deploy on Hetzner →

Quick Specification Matrix

ToolLicenseMin RAMMin CPUGitHub RepoPrimary Advantage
Google Analytics (GA4) (Proprietary)Proprietary ClosedManaged CloudManaged CloudN/ATurnkey onboarding with vendor lock-in & paywalls
UmamiMIT512 MB1 vCPUumami-software/umamiExtremely lightweight: runs on any $3.50/mo VPS with minimal RAM
Plausible Community EditionAGPL-3.02 GB1 vCPUplausible/analyticsUnrivaled query performance at scale with ClickHouse columnar compression

Performance Benchmarks & Hard Operational Limits

Real-world operational trade-offs, resource consumption limits, and measured throughput.

Benchmark MetricGoogle Analytics (GA4) BaselineSelf-Hosted Alternative MetricOperational Bottleneck / LimitSource
Tracking Script Payload Size45KB - 110KB (GA4 gTag + Google Tag Manager)1.8KB (Umami) / 1.4KB (Plausible)Client browser script parsing and execution time.Plausible Benchmark Docs
Data Ad-Blocker Bypass Rate25% - 45% of traffic blocked by uBlock Origin / Brave0% blocked when proxied through primary domain (e.g. `yourdomain.com/stats.js`)Domain DNS configuration and reverse proxy routing.Production Test
Dashboard Query Latency (10M Events)1,500ms - 4,000ms (often sampled in GA4)15ms - 45ms (ClickHouse columnar scan on NVMe)Columnar index caching in RAM.Production Test

Frequently Asked Questions

Practical deployment, migration, and maintenance answers.

Do I need to show a cookie banner when using Umami or Plausible?▾

No. Neither Umami nor Plausible sets client cookies or stores persistent personal identifiable information (PII). They generate a daily rotated hash from the IP address and User-Agent to count unique daily visitors without tracking users across websites. This is fully compliant with GDPR, PECR, and CCPA out of the box.

How do I proxy the analytics script to prevent ad-blockers from blocking stats?▾

In your Caddy or Nginx reverse proxy configuration, create a route on your main domain (e.g., `https://example.com/api/send` and `https://example.com/script.js`) that forwards requests internally to your self-hosted analytics container. Because the request originates from first-party DNS, ad-blockers do not intercept it.

Can I track custom events, buttons, and revenue goals?▾

Yes. Both Umami and Plausible support custom event properties (e.g. `umami.track('signup_button_clicked', { plan: 'pro' })`), funnel conversions, and revenue tracking metrics in the dashboard.

Which database is better for analytics: PostgreSQL (Umami) or ClickHouse (Plausible)?▾

PostgreSQL is ideal for sites up to 1-2 million monthly pageviews due to simple backups and low RAM requirements (< 1GB). For high-volume sites (10M+ pageviews/month), ClickHouse is superior because its columnar architecture compresses data by 10-20x and executes aggregate queries hundreds of times faster.

Can I share analytics dashboards publicly with clients or investors?▾

Yes. Both Umami and Plausible allow you to generate shareable public dashboard URLs (with optional password protection) or embed live analytics charts directly into other web pages.

Starter Stack Pack — $29

Skip the setup: get the production-ready stack

Don't stitch together configs from five different READMEs. Get all 5 production-hardened Docker Compose stacks — Postgres, Redis, SSL auto-renewal, and backup scripts — ready to deploy in minutes.

⚡n8nVisual workflow automation
📊UmamiPrivacy-first web analytics
🛡️Uptime KumaUptime monitoring & alerts
🔐VaultwardenBitwarden-compatible vault
☁️NextcloudDropbox/Drive replacement
Get the Stack Pack — $29 →

One-time purchase · Instant download · Production-ready

esc
↑↓ navigate↵ open