PostHog Not Working? Common Errors & Fixes
The 13 PostHog problems users hit most often, why they happen, and the fixes that actually work — collected from user reports, forums, and official support docs.
PostHog Events Not Showing Up
Workaround availableWeb, iOS, Android, server SDKsMissing PostHog events are usually caused by a misconfigured SDK (wrong project key or region host), ad blockers, an app filtering events, or ingestion delay. Check the Network tab for requests to /e, then the Ingestion warnings page.
PostHog Blocked by Ad Blockers
Workaround availableWebAd and tracking blockers block requests to PostHog's domains, which drops events, replays, flags and surveys. Route PostHog through your own subdomain with a reverse proxy; PostHog says this typically recovers 10-30% of events.
PostHog Session Replay Not Recording
Workaround availableWebReplays usually go missing because the session was sampled out, was shorter than the minimum duration, didn't match a URL trigger, or recorder.js was blocked by CSP or an ad blocker. The $recording_status property on the session's events tells you which.
PostHog Replay Broken: Missing CSS, Fonts or Blank Screen
Workaround availableWebWhen a replay shows unstyled pages, missing fonts or a blank start, PostHog couldn't fetch your stylesheets or the first full snapshot arrived late. Allow PostHog in CORS, add crossorigin to stylesheet links, and check for blocked uploads.
PostHog Bill Too High
Workaround availableAllA high PostHog bill almost always comes from one or two meters: autocapture events, 100% replay sampling, feature flag requests in SPAs, or add-ons like identified events. Use the billable usage dashboard to find the source, then sample, trim and set billing limits.
PostHog Feature Flags Not Working or Undefined
Workaround availableWeb, server SDKs, mobileFlags read as undefined or false on first render because they load asynchronously (about 100-500 ms). Bootstrap flags or wait for onFeatureFlags, call identify() before evaluating, and proxy flag requests past ad blockers.
PostHog Pageviews Missing or Duplicated in Next.js
Workaround availableWeb (Next.js, React, SPAs)In the Next.js App Router and other SPAs, client-side navigation doesn't reload the page, so pageviews are missed or double counted. Set capture_pageview to false and capture $pageview on route change, or use the official @posthog/next package.
PostHog Numbers Different From Google Analytics
Workaround availableWebPostHog and GA4 count visitors differently: ad blockers block GA more often, PostHog can merge one person across devices, bot filtering differs, and sessions end after 30 minutes of inactivity. Small gaps are normal; large ones mean one tool is blocked.
PostHog Identify Merging Wrong Users
Workaround availableWeb, mobile, server SDKsDifferent people end up as one person when identify() receives a generic ID (like 'null') or reset() isn't called on logout on shared devices. PostHog won't merge two already-identified users and logs a warning instead.
PostHog Surveys Not Showing
Workaround availableWebPostHog surveys don't appear when surveys are disabled in project settings or the SDK config, posthog-js is too old, or CSP, a proxy or an ad blocker blocks surveys.js. Run getActiveMatchingSurveys in the console to see what matches.
PostHog Toolbar or Heatmaps Not Loading
Workaround availableWebThe PostHog toolbar (needed for heatmaps) fails when the page URL isn't authorized, CSP or an ad blocker blocks it, or ui_host isn't set behind a reverse proxy. Authorize the URL, allow PostHog in CSP and set ui_host.
Why Is PostHog So Slow?
Workaround availableWeb appPostHog insights get slow when they scan 'All events' over long date ranges or use pdi.person.properties lookups. Filter on specific events, shorten the range and use person.properties; dashboards can also serve pre-computed results.
PostHog Not Capturing Events in Playwright or Puppeteer Tests
Workaround availableWebPostHog's JS SDK treats automated browsers as bots, so Playwright, Puppeteer and Selenium runs send no events even though flags and identify still work. Confirm with ?__posthog_debug=true and override the bot signals if you need test events.
Problem not listed? See all PostHog complaints or compare PostHog alternatives.