PostHog
- Free allowance
- Free every month, reset monthly, with or without a card on file: 1M analytics events, 5K session recordings, 1M feature flag requests, 100K exceptions, 1500 survey responses; 1 project, 1-year data retention, unlimited team members; no credit card required
- Verdict
- caveatusable, with a named limit or an unprobed read path
- Cost
- free tier
- Identity
- emailno card, phone unknown
- Binding limit
- volume-quota1M analytics events per month; further events are permanently dropped on the free plan; 5K session recordings, 1M feature flag requests, 100K exceptions and 1500 survey responses per month; 1 project
- Evidence
- documented24 sources; a first-party page was read and the sentence quoted
- Freshness
- stale on 2026-12-03checked 2026-11-02 (live); stale on 2026-12-03
| Free tier | Free every month, reset monthly, with or without a card on file: 1M analytics events, 5K session recordings, 1M feature flag requests, 100K exceptions, 1500 survey responses; 1 project, 1-year data retention, unlimited team members; no credit card required unit mixed; metered on request-count; Each product has its own monthly count (events, recordings, flag requests, exceptions, survey responses), so no single unit of the vocabulary fits; analytics is counted in events, and one batch request can carry many events, so request-count is only the nearest metered_on term. Usage across projects shares one free allowance. On the free plan, events past the allowance are permanently dropped and feature flags return a quota-limited response, so usage stops rather than bills. |
|---|---|
| Price | none stated |
| Limits |
|
| Binding | volume-quota Events past 1M in a month are permanently dropped on the free plan, so the monthly event count is the first ceiling for an app with traffic; the API rate applies only to reads with a personal key. |
| Identity | email An account is tied to an e-mail address: the wizard creates one from an e-mail address and a region. The pricing and sign-up pages state no credit card is required, and the allowance is the same with or without a card on file. Whether a later step asks for a phone number is unverified: behind a sign-up. |
| Egress | unverified: no egress term on the pages read; data is read back through the private API, rate limited per personal API key (240/minute and 1200/hour on analytics endpoints) |
| Per-object cap | Events over 1 megabyte after processing are discarded; a distinct_id is limited to 200 characters |
| Retention | Events and metadata: 1 year on a free plan (7 years on paid). Session recordings: 1 month on the free plan. Logs: 14 days by default. |
| Interface | rest Public POST-only endpoints (event capture at /i/v0/e, flag evaluation at /flags) take a project token and are not rate limited; private GET, POST, PATCH and DELETE endpoints take a personal API key or OAuth. The US app host us.posthog.com answered 401 to /api/projects/ without a key. The data region (US or EU) is fixed when the account is made. endpoint: https://us.posthog.com/api/ |
| Tooling | PostHog SDKs, the @posthog/wizard command (run with npx), which can create the account and install the SDK, and any HTTP client with a personal API key for the private API |
| Composes with | Event capture and feature flags for the front end of a free-hosted app, up to 1M events a month, with error tracking in the same project; over the allowance events are dropped, not billed. |
| Reliability | Events above the free allowance are permanently dropped and feature flags return a quota-limited response. |
| Notes | The free plan stops at its limits instead of billing, so an app sending more than 1M events a month loses the excess. Moving to pay-as-you-go needs a card and raises the project count to 6 and event retention to 7 years. |
| Evidence note | documented Every limit is quoted from a first-party page, and the private API host answered 401 without a key. No account was opened; an authenticated query from a free project would move it to measured. |
| Parsed numbers |
|
Evidence 24
| date | source | what it proved |
|---|---|---|
| 2026-10-30 | posthog.com/pricing | the free allowance resets monthly and does not depend on a card |
| 2026-10-30 | posthog.com/pricing | the free allowance includes 1M analytics events, 5K session replays and 1M feature flag requests |
| 2026-10-30 | posthog.com/pricing | the free allowance includes 100K exceptions |
| 2026-10-30 | posthog.com/pricing | the free allowance includes 1500 survey responses |
| 2026-10-30 | posthog.com/pricing | the free plan has 1 project and 1-year data retention |
| 2026-10-30 | posthog.com/pricing | the free plan has unlimited team members |
| 2026-10-30 | posthog.com/pricing | events are kept 1 year on a free plan and 7 years on paid |
| 2026-10-30 | posthog.com/pricing | session recordings are kept 1 month on the free plan |
| 2026-10-30 | posthog.com/pricing | logs are kept 14 days by default |
| 2026-10-30 | posthog.com/pricing | on the free plan, events past the allowance are dropped and flags return a quota-limited response |
| 2026-10-30 | posthog.com/pricing | projects share one free allowance |
| 2026-10-30 | posthog.com/pricing | the paid plan raises the project count from 1 to 6 |
| 2026-10-30 | posthog.com/pricing | higher limits need a card |
| 2026-10-30 | posthog.com/pricing | data past its retention period may be deleted, and after 1 year may move to cold storage |
| 2026-10-30 | us.posthog.com/signup | the sign-up page states no credit card is required |
| 2026-10-30 | posthog.com/docs/ai-engineering/wizard-signup | an account is created from an e-mail address and a region |
| 2026-10-30 | posthog.com/docs/api | private endpoints are rate limited and public POST-only endpoints are not |
| 2026-10-30 | posthog.com/docs/api | analytics endpoints allow 240 per minute and 1200 per hour |
| 2026-10-31 | probe: https://us.posthog.com/api/projects/ | the private API host answers 401 without a key |
| 2026-11-01 | posthog.com/docs/data/ingestion-warnings | PostHog discards events larger than 1 megabyte after processing |
| 2026-11-01 | posthog.com/docs/data/ingestion-warnings | a distinct_id longer than 200 characters is shortened to its first 200 characters |
| 2026-11-01 | posthog.com/docs/api/capture | a /batch request body must be under 20MB with no limit on the number of events in it |
| 2026-11-01 | posthog.com/docs/api/capture | one /batch request carries multiple events, so an event count is not a request count |
| 2026-11-01 | posthog.com/docs/api/capture | a distinct_id is limited to 200 characters |