Is PostHog web analytics or a product suite?
PostHog is a product suite with a web analytics dashboard inside it; invisit is website analytics only. As of November 2026, PostHog’s pricing lists product analytics, web analytics, session replay, feature flags and experiments, surveys, error tracking, a data warehouse, logs and AI observability, each with its own free allowance and meter.
PostHog’s web analytics runs on the same events as the rest of the suite: visitors, page views, sessions, bounce rate, paths, channels and a world map, with session replays one click from any number. That shared event stream is the reason to pick PostHog.
invisit covers where visitors came from, what they read, what converted and what it earned. It has no session recordings, retention cohorts, A/B tests, feature flags or mobile app SDKs.
How much does PostHog cost for website analytics?
PostHog is free up to 1M events a month and then charges per event, while invisit charges a flat price per volume step. For a website, the catch is that PostHog counts events rather than page views, and its JavaScript SDK sends more than one event per page view by default.
As of November 2026, PostHog’s pricing for anonymous events is free for the first 1M, then $0.00005 each up to 2M, $0.0000343 up to 15M and $0.0000295 up to 50M. Web analytics has no price of its own. Events from users you identify cost more: PostHog’s event comparison starts them at $0.000248 each.
| What a page sends | PostHog | invisit |
|---|---|---|
| Page view | Billed ($pageview) |
Billed |
| Page leave and engagement | Billed ($pageleave, on by default) |
Engagement pings, never billed |
| Clicks on links, buttons and form fields | Billed ($autocapture, on by default) |
Outbound link and download clicks sent and billed by default; others only with track() |
| Web vitals | Billed, about 30% of page views by PostHog’s estimate | Never billed |
| Crawler and AI bot reads | Billed when forwarded from server logs | Never billed |
PostHog’s bounce rate needs $pageleave and $autocapture (dashboard docs), so two events per page view is the floor. The price table above compares events one for one; this one counts page views at that floor:
| Page views a month | PostHog events | PostHog | invisit |
|---|---|---|---|
| 100K | 200K | Free | $14 |
| 500K | 1M | Free | $49 |
| 1M | 2M | $50 | $49 |
| 3M | 6M | $187.20 | $99 |
| 10M | 20M | $643.40 | $199 |
A SaaS with 300K page views a month sends PostHog at least 600K events and pays nothing; invisit’s 1M step costs $49. That is a clear PostHog win. At 3M page views the floor is 6M events and $187.20 a month against $99 on invisit, before any identified events, which PostHog bills at the base rate plus a person profiles rate, $0.000248 an event in total from 1M to 2M.
On PostHog’s free plan, ingestion stops at the free allowance until the month resets. On pay-as-you-go you can set a billing limit per product; past it, events are dropped for good. invisit warns at 80%, records the first month over in full, and pauses new events only in a second month over in a row (billing).
PostHog has no seat charges. Its free plan includes one project, pay-as-you-go six, and the $250-a-month Boost package unlimited. invisit includes unlimited sites on every paid plan.
Does PostHog need a cookie banner?
With its defaults, PostHog sets a cookie, and PostHog’s own GDPR guide says to use a cookie banner if you use PostHog with cookies for logged-out visitors. invisit sets no cookies and stores nothing on the device, so it needs no banner for analytics.
By default, PostHog’s persistence keeps state in localStorage and in a first-party cookie named ph_<project_token>_posthog that expires after 365 days.
The alternative is PostHog’s cookieless tracking. Set cookieless_mode: 'always' in posthog.init and turn on cookieless tracking in project settings, or PostHog discards the events. Visitors are then counted with a server-side hash of a daily salt, IP address, user agent and hostname. With 'on_reject', visitors who accept your banner get cookies and the rest are hashed.
PostHog’s cookieless tutorial lists the costs: session replay and surveys stay off without consent, a returning visitor counts as new each day, and the IP address is stripped before GeoIP runs, so the world map stays empty. posthog-js also ignores Do Not Track unless you set respect_dnt: true.
invisit’s hash also rotates daily, raw IP addresses are never stored, and Global Privacy Control and Do Not Track can be honoured with respectGpc and respectDnt. Sites that want consent anyway can turn on consent mode.
Where PostHog keeps your data: EU Cloud, US Cloud or your own server
PostHog Cloud has a US region and an EU region hosted in Frankfurt; invisit stores all analytics data in Falkenstein, Germany. On PostHog you pick the region at signup, and moving later is a migration between Cloud instances.
PostHog’s free managed reverse proxy, which serves its SDK from your own subdomain, routes traffic through Cloudflare. invisit also runs DNS and CDN through Cloudflare, a US company, and serves from your domain with @invisitdev/server. Both offer a DPA (invisit’s DPA).
PostHog can also run on your own server, and invisit cannot. The hobby deploy is MIT-licensed Docker Compose on one machine of about 4 vCPU and 16 GB RAM. PostHog’s disclaimer calls it unsupported, “unlikely to scale past a couple 100ks events” without significant effort, and without paid features such as subscriptions and data pipelines. If data must stay on infrastructure you run, PostHog meets that and invisit does not.
How big is the PostHog script?
PostHog’s default snippet loads array.js, which measured about 119 KB gzipped on November 3, 2026 (posthog-js 1.444.4, 369,516 bytes uncompressed). invisit’s core invisit.js is about 8.5 KB gzipped.
PostHog loads array.js asynchronously and fetches session replay (recorder.js, about 43 KB gzipped) and surveys (about 47 KB) only when those features are on. If you bundle posthog-js from npm, the slim bundle, which PostHog marks experimental, measured about 52 KB. invisit’s heatmap, feedback and interaction modules also load only when used.
Does PostHog track web vitals, AI referrals and crawlers?
PostHog covers web vitals and AI referrals in its web analytics dashboard, and crawlers only if you forward server logs. invisit covers all three and bills none of them.
- Web vitals. PostHog captures LCP, INP, CLS and FCP once you enable web vitals autocapture, and bills each
$web_vitalsevent (web vitals). invisit collects LCP, INP, CLS, FCP and TTFB by page, device, country and browser. - AI referrals. PostHog’s AI channel type matches referring domains such as chatgpt.com, claude.ai, perplexity.ai and gemini.google.com, and matching
utm_sourcevalues. invisit recognises 19 assistants, DeepSeek, Le Chat and NotebookLM among them, in their own AI tab (AI assistant traffic). - Crawlers. posthog-js blocks known bots, and most crawlers never run JavaScript. To see GPTBot or ChatGPT-User, PostHog has you forward server or CDN logs as billed
$http_logevents, read in a Bots tab that is in alpha (managing bot traffic). invisit’s@invisitdev/serverrecords crawler reads from search engines and AI crawlers. - Revenue. PostHog’s revenue analytics is in beta: it reads Stripe through its data warehouse, or revenue events you send, and exposes revenue as person and group properties for insights and SQL, since PostHog removed its dedicated revenue dashboard. invisit reads Stripe, Paddle, Polar, Lemon Squeezy, Creem or Dodo Payments with no code in the checkout (connect a provider).
When PostHog is the better choice
PostHog is the better choice when you need more than website analytics, or when its free tier covers your traffic.
- One event stream for the whole product. Session replay, feature flags, experiments, surveys and error tracking share PostHog’s events, so a funnel drop-off opens the replays behind it.
- A site that should cost nothing. Under 1M events a month, about 500K page views, PostHog is free and keeps a year of data. invisit’s free plan covers 20,000 events.
- Signed-in users over months. Person profiles and retention cohorts follow one user across visits and devices, which a daily-rotating hash rules out by design.
- Mobile apps. PostHog has SDKs for iOS, Android, React Native and Flutter.
- Self-hosting and raw data. The MIT hobby deploy, SQL over your events, and batch exports to your own warehouse.
- Paid acquisition. Marketing analytics, in beta, pulls cost and clicks from Google, Meta, LinkedIn, TikTok, Reddit and Bing ads next to your conversions.
- History from another tool. PostHog runs managed migrations from Mixpanel and Amplitude. invisit cannot import history.
- Scheduled reports. PostHog sends dashboard subscriptions by email or Slack, five on the free plan. invisit has no scheduled email reports.
Switching from PostHog to invisit
Run invisit next to PostHog for a few weeks, move your capture calls to track(), export your history, then remove posthog-js.
- Install invisit next to the PostHog snippet, or add
@invisitdev/webto your bundle (frameworks). - Replace each
posthog.capture()withtrack(). invisit event names use letters, digits and_ . : -, souser signed upbecomesuser_signed_up. Each event takes up to 32 properties. - Replace
posthog.identify()withidentify(user.id). invisit takes only the id and hashes it, so person properties such as email have no equivalent. - Drop
cookieless_mode, which invisit does not need, and replace revenue events by connecting your payment provider. - Rebuild your funnels from the same pages and events (funnels), then compare both dashboards for two to four weeks before removing posthog-js.
// Before: PostHog
import posthog from 'posthog-js'
posthog.init('<ph_project_token>', { api_host: 'https://eu.i.posthog.com', defaults: '2026-08-30' })
posthog.capture('signup', { plan: 'pro' })
posthog.identify(user.id, { email: user.email })
// After: invisit
import { identify, init, track } from '@invisitdev/web'
init({ site: '<site id>' })
track('signup', { plan: 'pro' })
identify(user.id)invisit cannot import your PostHog history, so export it before you cancel. Batch exports send events, persons and sessions to S3, BigQuery, Snowflake, Postgres, Redshift, Databricks or Azure Blob Storage, and a backfill covers the time before the export existed. The first 1M exported rows each month are free, then $0.000015 a row up to 10M. For files, file download exports return Parquet or JSON Lines through the API, a week of data at a time.
Expect visitor counts to differ while both run. PostHog with cookies recognises a returning visitor across days; invisit’s hash rotates daily, so a visitor who returns on three days counts on each. Page views are the fairer number to compare.