The latest from the PostHog community

PostHog is now up to 80% cheaper

Jun 24, 2024

TL;DR

How much can I save?

At lower volumes, our new event pricing is 80% cheaper than before.

In real terms this means:

  1. Someone sending us 10 million events per month would save $9,060 a year if they disabled person profiles for all events.

  2. They would still save $4,404 a year if they used person profiles on 50% of their events.

We expect teams to use a combination of events with and without person profiles depending on their needs, which you can see visualized below.


New PostHog pricing

This makes us better value than any popular (>$10M in revenue) product analytics tool.

Here's how our new pricing compares to Mixpanel's:

New PostHog pricing compared to Mixpanel

And here's a more detailed breakdown of the difference at each pricing tier:

Monthly eventsNew base event priceBase events + person profilesPercentage diff.
Up to 1 millionFreeFree-
1-2 million$0.0000500/event$0.0002480/event-80%
2-15 million$0.0000343/event$0.0001040/event-67%
15-50 million$0.0000295/event$0.0000655/event-55%
50-100 million$0.0000218/event$0.0000364/event-40%
100-250 million$0.0000150/event$0.0000187/event-20%
250+ million$0.0000090/event$0.0000100/event-10%

Who is this for?

Tracking events without person data is useful if:

  • You want to track your marketing website and your product, but you don't need detailed information about visitors to your marketing website.
  • You're willing to lose some functionality for lower bills.
  • You want to track API or server events, especially at high volumes.
  • You run a large e-commerce or content website with millions of users.
  • You're not tracking a high-volume event because it would be prohibitively expensive.
  • You want to use autocapture to track events, but have turned it off to save money.

We recommend most people use the identified_only configuration option for person profiles. This automatically captures person profiles for logged-in users of your product and website, but doesn't capture them for unidentified users where aggregate data is sufficient.

This is how we've configured our own product and website tracking.

What's the downside?

When sending events without person data, you cannot:

  • Filter on persons (e.g. an individual user)
  • Create cohorts filtered on person properties (e.g. paying vs non-paying users)
  • Target by person properties for feature flags, A/B tests, and surveys.
  • Receive initial UTM values for tracking marketing campaign performance (only the most recent).
  • View a person’s profile in the app, or query the persons table in our SQL insights.
  • Use groups functionality on standard events (without person profiles).

If you need the above functionality for all your traffic, you don't need to change anything. Continue to send person data with your events.

Person profiles are not all-or-nothing. You can use them on any traffic where you need more detailed information, and skip them when you don't need that detail. Read more about this in our persons documentation.

Why are we doing this?

The short answer? Because we can.

The slightly longer answer? Because it's the right thing to do for both our users and our business.

Most of our competitors are inefficient. They employ huge outbound sales teams to grow revenue. Their salaries and commissions for closing deals are passed onto their customers through higher prices.

In contrast, we're 100% inbound, we grow mostly through word of mouth, and we charge based on actual usage.

We don't believe in loss leaders, so we make a modest positive margin on each event sold, but what we charge is directly connected to what it costs us, not what we think we can get away with charging.

We grow our revenue through helping you grow, and onboarding you onto other tools, like session replay, feature flags, and surveys as well.

We think this is better than trying to squeeze you for every cent you have. You have a great experience, and we'll enjoy better retention and word of mouth for doing the right thing.

How do I start using it?

For most people, it only requires a simple config change to include process_persons: "identified_only" in the initialization of your JavaScript Web SDK or snippet.

This will track anonymous traffic without person profiles, and start collecting person data any time an identifying action is taken (i.e. using identify(), group(), setting person properties with $set, etc).

You can get more details on this and other use cases, like server-side events, in our persons documentation.

FAQ

Will my bill go up if I continue to use person profiles?

No. Events with person profiles enabled cost the same as our old pricing. You'll see a new line item on your invoice, but what you pay won't change if you send person profiles on every event.

Why aren't you making the events with person profiles cheaper?

Because events with person profiles cost a lot more for us to ingest and query. Not sending person data for certain events, however, saves us money, so we're passing that on.

This aligns our interests with our customers, and means we can make a positive margin on all events ingested (beyond our free tier), so it is sustainable but not greedy!

We're also working on reducing costs for events with person profiles enabled. When we do, we'll pass this saving on, too.

I have a question you haven't answered...

First, check out our person and person properties docs.

If those don't answer your question, you can leave a comment on this post, or ask a question in our community forum.

If it's an account specific question, get in touch with your account manager or raise a ticket in the app.