PostHog Self Hosted Review: Real-World Notes
If you’re searching for a posthog self hosted review, you probably want two things at once: product analytics you can trust and control over where your event data lives. I’ve run PostHog self-hosted in production-like setups, and the big takeaway is this: it’s powerful, flexible, and surprisingly “engineer-friendly” — but you’re signing up to operate a real analytics stack, not a magical black box.
What you actually get with PostHog self-hosted
PostHog’s self-hosted offering isn’t just “events and dashboards.” It’s a full analytics toolbox that can cover multiple tools you might otherwise buy separately.
In practice, self-hosting gives you:
- Product analytics (events, funnels, cohorts)
- Session replay (depending on your setup and storage choices)
- Feature flags & experiments (useful if you want to ship safely)
- Data control (your infra, your retention, your compliance posture)
Compared to typical SaaS analytics tools, PostHog feels closer to an open product data platform than a single-purpose tracker. That’s both its strength and its complexity cost.
Architecture & ops reality: the hidden part of the bill
Self-hosting analytics is mostly boring until it isn’t. PostHog can be deployed via Docker Compose or Kubernetes, and it’s absolutely doable — but you should understand what you’re operating:
- PostgreSQL: metadata and some core state
- ClickHouse: the workhorse for event ingestion + query performance
- Redis: queues/caching
- Object storage (often) for replay assets and longer retention patterns
If you’re evaluating PostHog versus mixpanel or amplitude, the biggest differentiator is operational responsibility. With Mixpanel/Amplitude, you’re buying a hosted system and paying with dollars + vendor lock-in. With PostHog self-hosted, you’re paying with engineer time and on-call risk.
Opinionated take: if you don’t already have a basic observability posture (metrics, logs, alerting) and someone who can reason about ClickHouse performance, self-hosting will feel heavier than you expect.
Data governance, privacy, and why self-hosting can matter
A lot of teams get pushed into self-hosted analytics because of data residency rules or internal security reviews. That’s legit — but self-hosting doesn’t automatically make you “compliant.” It just gives you control.
Where PostHog shines:
- You can enforce data minimization (capture only what you need)
- You can tune retention and storage location
- You can keep sensitive events out of third-party SaaS pipelines
Where you still need discipline:
- PII handling: Decide what’s allowed in event properties and enforce it
- Access control: analytics often becomes a shadow data warehouse if you’re not careful
- Replay policies: session replay can create new privacy risks if not redacted
This is also where PostHog competes conceptually with tools like hotjar or fullstory (experience analytics / replay). If you’re replacing Hotjar/FullStory with PostHog replay, you’ll want to validate redaction, sampling, and storage costs early.
Quick start: capturing events without making a mess
The fastest way to ruin an analytics project is to ship tracking with no naming conventions, no versioning, and no ownership. Here’s a minimal, actionable example using posthog-js that’s strict enough to stay sane.
import posthog from 'posthog-js'
posthog.init(process.env.POSTHOG_KEY, {
api_host: 'https://posthog.your-domain.com',
capture_pageview: false, // be explicit
capture_pageleave: true,
})
// Identify after login
export function identifyUser(user) {
posthog.identify(user.id, {
email_domain: user.email.split('@')[1],
plan: user.plan,
})
}
// Use a simple event naming convention: noun_verb or object_action
export function trackSignupStarted(method) {
posthog.capture('signup_started', {
method, // 'email' | 'google' | 'github'
ui_version: '2026-04',
})
}
export function trackCheckoutCompleted(totalCents) {
posthog.capture('checkout_completed', {
total_cents: totalCents,
currency: 'USD',
})
}
Practical rules that help long-term:
- Turn off auto-capture until you’ve decided you want it
- Add a
ui_version(orschema_version) property to events that evolve - Track fewer events, but make them decision-grade
Who should choose PostHog self-hosted (and who shouldn’t)
Self-hosted PostHog is a good fit when:
- You have clear data residency/security requirements
- You want one platform for analytics + flags + experiments
- You have the engineering maturity to operate ClickHouse-backed workloads
It’s a poor fit when:
- You need “set it and forget it” analytics next week
- Your team can’t spare ops time (or doesn’t have it)
- You primarily want qualitative UX insights and don’t plan to invest in event design (in that case, hotjar-style workflows might be more natural)
If you’re currently happy with amplitude dashboards and just want better governance, self-hosting PostHog might feel like swapping a clean apartment for a fixer-upper house: more freedom, more maintenance.
In the end, I like PostHog self-hosted for teams that take product data seriously and are willing to own the system. If you’re not ready to run analytics infrastructure, PostHog’s hosted option can be a lower-friction way to get the same product capabilities and only move on-prem/self-hosted once you’ve proven value.
