PostHog vs Mixpanel for Developer-Led SaaS: Real Event Costs and Self-Host Trade-offs
You shipped your SaaS, you need to know which features users actually touch, and you have to pick an analytics tool before your free trial expires. PostHog and Mixpanel are the two names that come up immediately β but their pricing models are structured so differently that a tool that looks free at 5,000 monthly users can quietly become your second-biggest infrastructure bill at 50,000.
This article cuts through the marketing and gives you the real numbers, the self-hosting reality, and a clear recommendation depending on your stage.
What You'll Learn
- How PostHog and Mixpanel each define and count billable events
- What PostHog self-hosting actually costs in time and infra
- Where Mixpanel's MTU model creates unexpected bill spikes
- Which developer-facing features each tool does better
- A concrete recommendation based on team size and technical appetite
The Core Problem with Product Analytics Pricing
Both tools sell you on "understand your users" but bill you on very different units. PostHog charges per event ingested. Mixpanel charges per Monthly Tracked User (MTU) β which means a user who fires 1 event and a user who fires 500 events cost the same. That sounds fair until you realize that a single page-load in a busy SaaS app can fire a dozen events per session.
The pricing model you pick determines your behavior. On PostHog, you'll think carefully about which events to fire. On Mixpanel, you'll think carefully about how many users touch the product each month. Neither is wrong β they just optimise for different shapes of apps.
How Each Tool Models Events and Users
PostHog counts every ingested event as a billable unit. One user clicking three buttons = three events. Autocaptured page views, custom events, and feature flag calls all count unless you explicitly filter them out. PostHog's SDKs make autocapture easy, which is great for onboarding and lethal for your bill if you forget to audit it.
Mixpanel counts distinct users who send at least one event in a calendar month. It doesn't matter if that user fires 10 events or 10,000 β they count as one MTU. This favors apps with highly engaged users who generate lots of events per session. It hurts apps with large lurker-to-active ratios, because even users who barely open the app inflate your MTU count.
PostHog Pricing: What You Actually Pay
PostHog's free tier gives you 1 million events per month at no cost, which is genuinely generous. Beyond that, pricing drops in tiers β you pay less per event as volume grows. As a rough guide based on publicly available pricing, you're looking at roughly $0.00045 per event in the first paid tier, dropping from there.
The catch is that PostHog bundles several products: product analytics, session replay, feature flags, A/B testing, and error tracking. Each product has its own free tier and its own overage billing. You can end up with five separate line items on one invoice. A realistic mid-stage SaaS team running all five products at moderate volume might pay anywhere from $200 to $600/month on cloud. That's a wide range, so use their pricing calculator with your actual expected numbers before committing.
# Quick sanity check: estimate your monthly PostHog event volume
# Count unique event types you plan to track
# Multiply by estimated daily active users
# Multiply by average events per session
# Multiply by 30
# Example:
# 20 event types * 500 DAU * 8 events/session * 30 days = 2,400,000 events/month
# That puts you comfortably in the first paid tier.
echo $((20 * 500 * 8 * 30))
PostHog Cloud also offers a startup program that gives significant credit to early-stage companies. If you qualify, it changes the calculus significantly and can keep you on cloud for a year without paying.
Mixpanel Pricing: MTUs, Events, and the Confusion Tax
Mixpanel's free tier covers 20 million events per month but caps you at 100,000 MTUs. Read that again: 20 million events, but only 100,000 distinct users. For most early-stage SaaS products that's fine. The moment you cross 100,000 monthly active users, you move to Growth pricing, which is negotiated and typically lands somewhere in the hundreds of dollars per month depending on user count.
The confusion tax is real. Many developers assume Mixpanel's event limit is the binding constraint. It rarely is. The MTU cap bites first. You can be well under 20 million events but hit 100,001 MTUs and suddenly need a paid plan. Always model your expected MAU before assuming the free tier covers you.
Mixpanel also recently introduced a simplified event-based pricing option in some markets. Check your region's pricing page because what you see quoted on third-party comparison articles (including this one) may not match what Mixpanel offers you when you create an account. Always verify directly.
Self-Hosting PostHog: The Real Operational Cost
Self-hosting PostHog is the option that makes developers say "we'll save money" and then spend two sprints on infrastructure. Let's be precise about what that means.
What PostHog Self-Hosted Actually Needs
PostHog's self-hosted deployment (PostHog Open Source) runs on Kubernetes via Helm chart or Docker Compose for smaller setups. The minimum production-grade setup needs at least a few CPU cores and several gigabytes of RAM dedicated to ClickHouse alone. ClickHouse is the OLAP database PostHog uses to store and query events β it's powerful and it is hungry.
A realistic production self-hosted setup for a SaaS with a few thousand daily active users might look like:
- 1 ClickHouse node: 4 vCPU, 16 GB RAM minimum (more for headroom)
- 1 PostgreSQL instance for app metadata
- Redis for session/queue data
- Kafka for high-volume event ingestion (optional but recommended above ~1M events/month)
- PostHog app server (Django-based, horizontally scalable)
On AWS or GCP, that cluster costs roughly $150β$400/month in compute depending on region and instance types. You also absorb the on-call burden. When ClickHouse runs out of disk at 2 AM, that's your problem. If your team has a dedicated DevOps person and already runs Kubernetes, self-hosting is a real option. If your team is two backend developers, be honest with yourself.
Upgrades and Maintenance
PostHog releases frequently. Helm chart upgrades generally work smoothly but occasionally require manual migration steps that are documented in their changelog. Budget time for this β roughly an hour per upgrade cycle, more if migrations are involved. Over a year, that adds up to real engineering time that has a cost even if it doesn't show on your cloud invoice.
Mixpanel has no self-hosted option. Full stop. If data residency or data sovereignty is a hard requirement for you, Mixpanel is off the table unless you can satisfy compliance through contractual means (DPA, GDPR data processing agreements, etc.).
Feature Parity: Where Each Tool Pulls Ahead
PostHog wins on breadth. One subscription covers analytics, session replay, feature flags, experiments, and surveys. If you want to avoid stitching together LaunchDarkly for flags and FullStory for session replay on top of a separate analytics tool, PostHog's consolidated platform genuinely reduces complexity. The error monitoring landscape is already fragmented enough without adding more single-purpose SaaS tools to your stack.
Mixpanel wins on analytics depth. Its funnel analysis, retention cohorts, and user flow reports are polished and fast. The query experience for non-technical stakeholders is noticeably smoother. If your product manager needs to self-serve complex cohort comparisons without help from engineering, Mixpanel is easier to hand over.
PostHog's SQL access to raw event data is a meaningful differentiator for developer-led teams. You can write arbitrary HogQL queries against your events, which means you're never blocked by a missing chart type. Mixpanel's JQL (JavaScript Query Language) is powerful but less intuitive, and not every plan gets full access to it.
Developer Experience Side by Side
Both tools have official SDKs for the major languages and frameworks. PostHog's documentation is thorough and maintained well, with clear examples for Next.js, React, Python, Go, and others. Their SDK autocapture feature reduces initial instrumentation time significantly β you can get meaningful data within an hour of installing the snippet.
Mixpanel requires more deliberate instrumentation. There's no autocapture equivalent, which means every event you want to track needs an explicit mixpanel.track() call. That's more work upfront but gives you cleaner, more intentional event taxonomy. Teams that have been burned by autocapture noise in tools like Heap often prefer this discipline.
// PostHog - autocapture on by default, plus custom events
import posthog from 'posthog-js'
posthog.init('phc_YOUR_KEY', {
api_host: 'https://app.posthog.com',
autocapture: true, // captures clicks, form submissions, page views
})
// Manual custom event
posthog.capture('subscription_upgraded', {
plan: 'pro',
billing_period: 'annual',
})
// Mixpanel - every event is explicit
import mixpanel from 'mixpanel-browser'
mixpanel.init('YOUR_TOKEN')
mixpanel.track('Subscription Upgraded', {
plan: 'pro',
billing_period: 'annual',
})
PostHog's feature flags API deserves a special mention. You can evaluate flags server-side with local evaluation (no network round-trip) using their backend SDKs, which means zero added latency for flag-gated features. This is the kind of detail that matters when you're deciding whether to consolidate on one platform versus running a dedicated feature flag tool. If you're curious how that compares to dedicated auth and user management tools, the pricing cliff patterns in tools like Clerk vs Auth0 are worth understanding before you commit to any vendor.
Mixpanel's Lexicon feature β a central event and property dictionary β is underrated. It lets you document what every event means, who owns it, and whether it's still in use. At scale, event sprawl is a real problem, and Mixpanel gives you first-class tooling to manage it. PostHog's equivalent is less developed.
Common Pitfalls and Gotchas
PostHog autocapture event explosion: Autocapture is on by default in PostHog's JavaScript SDK. If your app has a rich UI with lots of interactive elements, you can blow through a million events in a week just from button clicks you didn't explicitly want to track. Audit your event volume in the first 48 hours after installation and disable autocapture or add allowlists if you're close to tier boundaries.
Mixpanel MTU miscounting: Anonymous users who haven't signed in also count as MTUs once they fire an event. If you track marketing-site visits or signup-funnel drop-offs before authentication, you're counting those anonymous visitors against your MTU cap. Use Mixpanel's identity merge carefully and consider whether you want to call mixpanel.track() on unauthenticated pages at all.
PostHog self-host ClickHouse disk usage: ClickHouse stores events efficiently but doesn't auto-expire old data unless you configure TTL policies. A high-event-volume app can fill a disk in weeks if you don't set retention periods explicitly. Set your TTL at setup time, not after your first 3 AM disk-full alert.
-- Example ClickHouse TTL for PostHog events table (set during setup)
-- Keeps raw events for 12 months
ALTER TABLE events MODIFY TTL toDateTime(timestamp) + INTERVAL 12 MONTH;
Mixpanel free tier export limits: The free tier restricts data export and API access. If you want to pipe Mixpanel data into a warehouse or BI tool, you'll need a paid plan. Factor this in if your analytics workflow involves dbt or any downstream data pipeline. This is worth comparing to the broader observability ecosystem β the log export trade-offs in tools like Grafana Cloud vs Axiom follow a similar pattern where free tiers restrict egress.
Session replay storage on PostHog: Session replays are billed separately from events and can accumulate quickly on high-traffic apps. If you enable replay site-wide on a public marketing page, you'll capture replays from every visitor. Scope replay to authenticated routes or specific pages unless you explicitly want broad coverage.
Wrapping Up: Which One Should You Pick?
Here's the honest recommendation based on team shape and stage:
- Choose PostHog Cloud if you want a single platform for analytics, flags, and replays; if you're early-stage and the 1M free events/month covers you; or if your team values SQL access to raw data. Apply for the startup program before paying anything.
- Choose PostHog Self-Hosted only if you have a dedicated DevOps resource, a hard data residency requirement, and genuinely high event volumes where the math works out. Run the numbers honestly before committing β the infra bill and engineering time can exceed PostHog Cloud faster than you expect.
- Choose Mixpanel if your primary analytics consumers are non-technical product managers who need to self-serve; if you have large numbers of highly active users per seat (making MTU pricing efficient); or if event taxonomy discipline and a centralized data dictionary matter to your org.
- Avoid Mixpanel if data export and warehouse integration are core to your analytics workflow and you're not ready for a paid plan, or if you need self-hosting for compliance reasons.
Before you finalize the decision, also think about what sits adjacent to your analytics tool. Your notification pipeline, your auth layer, and your billing provider all generate events worth tracking. Tools like payment providers emit webhook events that feed directly into your product funnel β make sure your analytics tool can receive them cleanly. And if you're evaluating any tool that touches user data, reading through how self-hosted auth lock-in works in practice will sharpen your thinking on vendor dependency in general.
Concrete next steps:
- Model your expected monthly event volume and MAU before touching either free tier β spend 30 minutes in a spreadsheet to avoid surprises.
- Install PostHog's JavaScript SDK with autocapture enabled on a staging environment and watch the event counter for 24 hours to understand your real event rate.
- If considering Mixpanel, identify who on your team will actually use the analytics dashboard daily β if it's mostly engineers, PostHog's SQL access may serve you better.
- If self-hosting PostHog, provision a ClickHouse instance on a small VM first and load-test it with synthetic events before migrating real data.
- Set a calendar reminder to review your analytics bill at the 3-month mark regardless of which tool you choose β both products have enough billing nuance that a surprise is more likely than not without active monitoring.
Frequently Asked Questions
Does PostHog self-hosting actually save money compared to PostHog Cloud?
It depends on your event volume and whether you have existing infrastructure. At very high volumes (tens of millions of events per month), self-hosting can be cheaper, but you must factor in the EC2 or GCP compute cost for ClickHouse plus the engineering time to maintain and upgrade it. For most teams under 5 million events per month, PostHog Cloud's free tier or first paid tier is cheaper once you account for labor.
What counts as an MTU in Mixpanel and why does it matter for pricing?
An MTU (Monthly Tracked User) is any distinct user β identified or anonymous β who sends at least one event to Mixpanel in a calendar month. It matters because Mixpanel's free tier caps you at 100,000 MTUs regardless of how many events those users fire, so even low-activity users inflate your count and can push you into a paid plan unexpectedly.
Can PostHog replace Mixpanel for a non-technical product team?
PostHog has improved its no-code analytics experience significantly, but Mixpanel's funnel and retention reports are still smoother for non-technical users who need to self-serve complex queries. If your product manager needs to build cohorts and run A/B test analyses without engineering help, Mixpanel has the edge on polish.
Is there a way to use PostHog without paying anything as you scale past the free tier?
PostHog offers a startup program that provides substantial event credits to early-stage companies, which can extend your free usage significantly beyond the standard 1 million events per month. You need to apply and meet their eligibility criteria, but it's worth doing before assuming you'll need to pay.
What happens to my Mixpanel data if I want to switch tools later?
Mixpanel allows data export via its API and has a raw data export feature, but access to bulk export is restricted on the free tier. On paid plans, you can export events in JSON format or pipe data to a warehouse. The main lock-in risk is that your event taxonomy and funnel definitions live inside Mixpanel's data model, so migrating to another tool requires re-instrumenting your events from scratch.
π€ Share this article
Sign in to saveRelated Articles
Comments (0)
No comments yet. Be the first!