PostHog Problems & Issues
Real user-reported problems, complaints, and limitations for PostHog. Based on analysis of 13 signals.
Overall score: 71/100
Issues by Category
PostHog events not showing up because ad blockers block it
PostHog's own docs say the tracker can be blocked by ad blockers even on localhost, and that a reverse proxy typically increases captured events by 10-30%. Teams that skip the proxy see lower numbers than expected and gaps in funnels, flags and surveys.
PostHog session replay not recording some sessions
Replays go missing because of sampling, minimum-duration settings, URL triggers, CSP rules blocking recorder.js, ad blockers or users closing the tab before the first snapshot is sent. Reviewers also mention replays buffering or glitching during playback.
Data dropped forever after hitting a billing limit
Billing limits protect your wallet, but once a product's limit is reached PostHog stops ingesting that product's data and the overflow cannot be recovered. Session replay filtering by person or event properties also stops working once the analytics limit is hit.
PostHog data doesn't match Google Analytics
Visitor and pageview counts differ from GA, Plausible or Cloudflare because of ad blocking, cross-device identification, bot filtering and session timeouts. Teams lose time reconciling numbers and some reviewers say they doubt the accuracy of what they see.
PostHog feature flags flicker or return undefined
Flags take roughly 100-500 ms to load, so they read as disabled on first render unless you bootstrap them. Ad blockers, missing identify() calls and local evaluation without required properties also return undefined or None.
PostHog is overwhelming and has a steep learning curve
The most repeated complaint on G2 and Trustpilot: with analytics, replay, flags, experiments, surveys, warehouse and more in one app, new users find the navigation cluttered and building events, funnels and dashboards takes time. Several reviewers say it gets more confusing as the team adopts more modules.
PostHog is built for engineers, not marketers
Setup, event design, SQL and identify() calls assume a developer. Reviewers note non-technical staff struggle to pull basic reports or get blocked by workspace permissions, and the A/B testing is code-first with no mature visual editor.
PostHog identify() merges or splits users incorrectly
Generic distinct IDs (like 'null'), forgetting reset() on logout on shared devices, or calling identify() too late lead to merged or fragmented person profiles. PostHog refuses to merge two already-identified users and logs an ingestion warning, so mistakes need manual cleanup.
PostHog queries and insights are slow on large datasets
G2 and AWS Marketplace reviewers report that insights, live events and replay loading feel slow or inconsistent as data grows. PostHog's own troubleshooting docs advise filtering on a single event instead of 'All events', shortening date ranges and avoiding pdi.person.properties to speed queries up.
Does PostHog slow down my website?
Third-party measurements put the core posthog-js library at roughly 52-57 KB gzipped, with replay code lazy-loaded. PostHog's docs acknowledge PageSpeed drops and suggest updating the snippet, placing it lower in the head, or using server-side tracking.
Why is my PostHog bill so high? Many separate usage meters
Each product (events, recordings, flag requests, survey responses, exceptions, warehouse rows, destinations, logs) has its own free tier and per-unit price, plus add-ons such as identified events, group analytics and data pipelines. Pricing analyses note that replay, flags at scale and warehouse syncs are what push bills up, and feature-flag requests are easy to burn in single-page apps.
Duplicate or missing pageviews in Next.js and SPAs
In single-page apps and the Next.js App Router, automatic pageview capture can double count or miss client-side route changes. The common fix is turning off capture_pageview and capturing $pageview on route change, or using the official @posthog/next package.
Self-hosting PostHog is heavy and limited to a hobby setup
PostHog stopped supporting Kubernetes deployments in 2023; the open-source hobby deployment runs on Docker Compose and needs at least 4 GB RAM (8 GB+ recommended), with community templates suggesting it suits roughly 1M events/day. Older setups that stored recordings in ClickHouse had to migrate.
Regret Patterns
Common reasons users regret choosing PostHog.
Skipped the reverse proxy and trusted incomplete numbers
Teams launch with the default PostHog host, then discover ad blockers removed a meaningful share of events and that funnels and flags were based on partial data.
Left autocapture and replay at defaults and the bill grew
Autocapture events, 100% replay sampling and flag requests on every route change pushed usage past the free tiers once traffic grew, across several meters at once.
Bought into the all-in-one suite, but nobody outside engineering uses it
Marketing and sales find the interface overwhelming and keep asking engineers for reports, recreating the bottleneck the tool was meant to remove.
Messy identify() setup polluted person data
Calling identify() with generic IDs or forgetting reset() on logout merged different users, and already-identified profiles cannot be auto-merged, leaving cleanup work.
Set a tight billing limit and lost data
A low limit protected the budget but data after the cap was dropped permanently, leaving gaps in a launch week or campaign.
Tried to self-host to save money
The hobby deployment needs real RAM and maintenance, and scaling it is not supported, so teams moved to Cloud after spending time on ops.
When PostHog Breaks Down
Specific scenarios where PostHog fails or underperforms.
Large share of visitors use ad blockers
Without a reverse proxy, events, replays, flags and surveys silently fail for blocked visitors, so dashboards undercount and experiments are skewed.
Next.js App Router or other SPA
Default pageview capture misses client-side route changes or double counts them unless you capture $pageview manually or use @posthog/next.
Traffic spike or viral launch
Events, recordings and flag requests all scale together; either the bill jumps or billing limits stop ingestion and data is lost.
Strict Content Security Policy
recorder.js, surveys.js and the toolbar are fetched from PostHog; a strict CSP blocks them and replays, surveys and heatmaps stop working without obvious errors in the dashboard.
Queries over many months of 'All events'
Insights get slow on large datasets; you need specific events, shorter ranges and person.properties instead of pdi lookups.
Shared devices without reset() on logout
Events from the next user attach to the previous person, merging profiles and corrupting per-user analytics.
E2E tests with Playwright or Puppeteer
PostHog treats headless and webdriver browsers as bots, so test runs send no events even though flags and identify still work.