Health checks (Beta)

Health checks continuously inspect your PostHog setup for problems that quietly degrade your data – a missing SDK, traffic that bypasses your reverse proxy, a broken materialized view, and more. When a check finds an issue, PostHog surfaces it in the relevant Health section of the app, can notify you through alerts, and – if you use PostHog Code – can investigate and fix it for you automatically.

Health checks are in beta
The set of checks below is expanding over time. If there's a problem you'd like PostHog to catch, let us know.
Health checks section in the PostHog app

How health checks work

A health check is a scheduled job that looks at your recent events, project settings, and pipeline state, and flags anything that looks wrong. Every check follows the same lifecycle:

  1. It runs on a schedule. Most checks run once a day and look back over a recent window – anywhere from the last day to the last 30 days, depending on what they measure.
  2. It writes an issue when something's wrong. The issue shows up on the matching Health page in the app, tagged with a severity and a plain-English explanation of what's happening.
  3. It resolves itself. When a later run sees the problem is gone – events start arriving again, the proxy is in place, the sync succeeds – the issue clears automatically. You don't need to dismiss it by hand.

Severity levels

Every issue carries a severity. It controls how prominently the issue is surfaced and how it's prioritized when you let PostHog fix it for you:

SeverityMeaningSignal priority
🔴 CriticalData is missing or broken right nowP1
🟠 WarningData is degraded or at riskP2
🔵 InfoWorth knowing, low urgencyP3

Three ways to resolve an issue

1. Fix it manually in the app

Every issue links straight to the place you fix it – a project setting, the data modeling editor, the ingestion warnings page, and so on. Each check's page below has step-by-step instructions.

2. Get notified when something breaks

When an issue fires or resolves, PostHog emits $health_check_issue_firing and $health_check_issue_resolved events. Route these to Slack, email, or a webhook with destinations so the right team hears about problems without watching the Health pages.

3. Let PostHog Fix it automatically with the Inbox and PostHog Code

This is the most powerful option. Most health checks emit a Signal into the Inbox. If you've connected your repository to PostHog, an agent can take the issue from detection all the way to a pull request:

  1. Enable health checks as a signal source. In PostHog Code, open Inbox → Configure sources and turn on health checks. See signal sources.
  2. The agent researches the issue. It reads the issue, queries your data with the PostHog MCP, and locates the cause in your codebase. See research tasks.
  3. It applies the fix. Where the fix lives in your code – an SDK config flag, a dependency bump, a proxy route – the implementation agent opens a PR for you to review. Where the fix is a PostHog setting or data model, it uses the MCP tools to apply it directly.

This integration was added in PostHog/posthog#61955. Each check's page explains exactly what the agent does for that specific problem.

Not everything can be auto-fixed
Some issues need a human. External data sync failures, for example, usually come down to rotated credentials that only you can re-enter – so they're surfaced as alerts but won't open a PR.

The checks

SDK and ingestion

CheckWhat it catchesSeverity
SDK healthA PostHog SDK that's significantly behind the latest releaseWarning / Critical
Ingestion warningsEvents being dropped, mis-merged, or degraded on the way inWarning / Critical

Web Analytics

CheckWhat it catchesSeverity
No live eventsNo $pageview or $screen events arriving at allCritical
No reverse proxyTraffic isn't served through a reverse proxyWarning
Partial reverse-proxy coverageSome hostnames are proxied, others aren'tWarning
No authorized URLsNo app URLs configured for the projectWarning
Missing pageleave events$pageview events present but no $pageleaveWarning
Missing web vitals$pageview events present but no $web_vitalsWarning
Scroll-depth tracking disabled$pageleave events carry no scroll-depth metadataWarning

Data Pipelines

CheckWhat it catchesSeverity
Materialized view failuresA materialized view failed to refreshWarning
External data sync failuresAn external data source failed to syncWarning

Giving feedback

Health checks are actively being developed. We'd love your feedback:

Community questions

Was this page useful?

Questions about this page? or post a community question.