PostHog is the single platform to analyze, test, observe, and deploy new features. One repo. One stack. One bill. (Hosted or self-hosted — your call.)
PostHog ships every product analytics tool your team needs — fully integrated, built on the same event pipeline, billed off a single usage-based plan.
Funnels, retention, paths, lifecycle. Run any query, any time — no SQL required, but it's there when you want it.
Explore →Watch real users navigate your app. Filter by frustration signals, console errors, network failures, identifiers.
Explore →Ship behind a flag, gradually roll out, kill switch in one click. Multivariate, JSON payloads, local eval.
Most loved Explore →Run statistically-rigorous experiments without a data scientist. Goal metrics, secondary metrics, exposure tracking.
Explore →Sync from Stripe, HubSpot, Postgres. Query it next to your event data — no separate Snowflake bill.
Explore →NPS, CSAT, popovers, multiple-choice. Target by cohort, trigger on event, export to CSV.
Explore →Cookie-free, GDPR-aware, no banners. Page paths, devices, geos, sources — without bloating your bundle.
Explore →Trace every prompt, latency, token cost. Diff prompt versions side-by-side, replay failed generations.
Beta Explore →PostHog's dashboard layout is the part we obsess over — a cream chrome wrapping a white card filled with hedgehog-doodled charts, not yet-another generic chart library.
⌘K anywhere to open the command palette. Most actions are 2 keystrokes away.first_touch_url will be auto-migrated to $initial_referrer on May 30.Drop the snippet in, ship to prod, watch the events stream into your dashboard within seconds. No card on file, no expiring trial — the PostHog free tier is permanent and generous on purpose.
// 1 — snippet in <head>, <6kb gz import { posthog } from "posthog-js" posthog.init("phc_yourkey", { api_host: "https://eu.posthog.com", capture_pageview: true, autocapture: true, session_recording: { maskAllInputs: true } }) // 2 — identify the user (once per session) posthog.identify(user.id, { email: user.email, plan: "growth", signup_date: "2026-05-01" }) // 3 — track anything that matters posthog.capture("checkout_completed", { amount: 42.0, currency: "USD", plan: "growth" })
Each product has its own usage-based price. Mix and match — no bundle taxes, no per-seat minimums, no salesperson required to read the page.
For hobby projects, side hustles, and pre-revenue startups. No card, no expiry.
For teams shipping fast. Cap each product independently — never get a surprise bill.
For teams over 100M events / mo, regulated industries, or teams who want a dedicated CSM.
Grouped by role. Saturated yellow-orange is the only loud chromatic moment — everything else is cream, olive ink, white card, pastel callout.
Brand & accent
Surface
Text
Callout pastels (doc-only)
IBM Plex Sans Variable across every text role with weights 400 / 500 / 600 / 700 / 800. Hierarchy is built from weight + size.
Clusters around 4–6px for nearly everything. Pill-radius is reserved for the sticky CTA and chip tokens.
Buttons, chips, pills, inputs, code surfaces. Cards sit flat on cream with thin olive borders — no shadows.
posthog.capture("checkout_completed")
$initial_referrer