leatmap vs PostHog
How we stack up against PostHog. Honest, sourced, no trash talk. PostHog is a great product. We pick different fights.
Quick verdict
Pick leatmap when
- You want EU residency by default, not as an opt-in.
- Your SDK budget is a 5 kB ceiling, not a 40 kB target.
- You read coverage numbers without conflating blocked traffic and consent refusal.
- You need SAML, SCIM, IP allowlist, and SIEM streaming on the same tier.
Pick PostHog when
- Session replay depth is the load-bearing surface for your team.
- You run thousands of experiments and want lifecycle and stickiness insights.
- You self-host today and want one canonical OSS product analytics stack.
- You rely on PostHog autocapture or warehouse sync. Both are mature surfaces that took years to build.
Feature comparison
A glyph means yes. A dash means no. A tilde means partial, with a line explaining the partial. Footnoted rows link to a source at the bottom of the page.
Core analytics
The baseline both products ship. Same headline surfaces, different defaults.
| Feature | leatmap | PostHog |
|---|---|---|
| Pageviews and sessions | leatmap: Yes | PostHog: Yes |
| Custom events and properties | leatmap: Yes | PostHog: Yes |
| Click events | leatmap: Yes | PostHog: Yes |
| Funnels | leatmap: Yes | PostHog: Yes |
| Retention cohorts (week and month grain) | leatmap: Yes | PostHog: Yes |
| Sankey user journeys[1] | leatmap: Yes | PostHog: Yes |
| Cohorts builder | leatmap: Yes | PostHog: Yes |
| Group analytics (B2B account level) | leatmap: Yes | PostHog: Yes |
| Annotations on every time-series chart[2] | leatmap: Yes | PostHog: Partial |
| Geo world map (per-country sessions) | leatmap: Yes | PostHog: Partial |
Behaviour and replay
Where PostHog spends a lot of its bundle. We ship the popular pieces and skip the deepest.
| Feature | leatmap | PostHog |
|---|---|---|
| Click and scroll heatmaps on a real-page snapshot | leatmap: Yes | PostHog: Yes |
| Session replay[3] | leatmap: NoComing sprint 42. Rrweb capture lands on the SDK first. | PostHog: Yes |
| NPS and CSAT widgets | leatmap: Yes | PostHog: Partial |
| Feature flags[4] | leatmap: Yes | PostHog: Yes |
| A/B experiments with stats engine | leatmap: Yes | PostHog: Yes |
Privacy and transparency
The whole reason leatmap exists. Where PostHog quietly conflates blocked traffic with consent refusal, we split both with confidence labels.
| Feature | leatmap | PostHog |
|---|---|---|
| EU residency by default[5] | leatmap: Yes | PostHog: PartialPostHog Cloud-EU exists. US is the default. |
| Coverage transparency (Observed, Estimated blocked, Consent, Bots, Unknown) | leatmap: Yes | PostHog: No |
| GDPR Art. 17 vault with collector erasure | leatmap: Yes | PostHog: Partial |
| First-party proxy templates (Next.js, CF Worker, Caddy, Nginx) | leatmap: Yes | PostHog: Partial |
| Server-side bot filter on the ingest hot path | leatmap: Yes | PostHog: Partial |
Enterprise and ops
Where we play to win. Audit-log streaming, IP allowlist, scoped keys, regional residency, all on one set of tiers.
| Feature | leatmap | PostHog |
|---|---|---|
| SAML 2.0 SSO | leatmap: Yes | PostHog: Yes |
| OIDC SSO | leatmap: Yes | PostHog: Yes |
| SCIM 2.0 user provisioning | leatmap: Yes | PostHog: Yes |
| TOTP 2FA and backup codes | leatmap: Yes | PostHog: Yes |
| Scoped API keys (7-scope catalog) | leatmap: Yes | PostHog: Partial |
| Audit log search and filters | leatmap: Yes | PostHog: Yes |
| Audit-log streaming to Datadog, Splunk, generic webhook | leatmap: Yes | PostHog: No |
| Workspace IP allowlist | leatmap: Yes | PostHog: No |
| Multi-region residency (EU west, EU central, US east) | leatmap: Yes | PostHog: Yes |
| BYOC / on-prem option | leatmap: PartialEnterprise only. Single Rust binary, your VPC. | PostHog: Yes |
| Workspace clone with industry templates | leatmap: Yes | PostHog: No |
| Data export (CSV, JSON, Parquet) | leatmap: Yes | PostHog: Partial |
Pricing at a glance
What does each cost at 1k, 100k, 1M, and 10M events per month? The headline number, with a one-line explanation underneath.
leatmap
Flat tiers. Pro at $19 monthly, Business at $399 monthly. Hobby is free up to 100k events.
PostHog
Pay-as-you-go with a generous free tier. Past the free allowance, every product (analytics, replay, flags) meters on its own line.
| Volume | leatmap | PostHog |
|---|---|---|
| 1 thousand events / monthBoth ship a generous free tier. PostHog is the more generous one at the low end. | Free | Free |
| 100 thousand events / monthInside both free tiers if you opt in to the no-card route. | Free | Free |
| 1 million events / monthCompare PostHog's metered pricing against the leatmap flat tier. | $19 / mo (Pro) | Pay-as-you-go |
| 10 million events / monthPostHog's product-analytics meter starts at $0.00031 per event above 1M. | $399 / mo (Business) | Pay-as-you-go |
Coming from PostHog? The 15-minute path.
Install the SDK
Replace posthog-js with @syntarie/tracking. Same init shape, drop-in on most properties. Bundle drops from ~40 kB to ~5 kB.
Import historical data
A 1-click PostHog JSONL importer is on the way. For now, email hello@leatmap.com with your export and we will help backfill the data alongside live events with the original timestamps preserved.
Bring SSO and your team
Wire SAML / OIDC against your IdP, invite teammates by domain, copy your workspace roles. Templates and dashboards clone in one click.
Sources
Footnote markers in the table above link here. Last reviewed 2026-05-18. Got a fact wrong? Email hello@leatmap.com and we will fix it.