We’ve decided to make less money [Part 2]

Aug 01, 2024

TL;DR

  • Last week, we slashed the cost of session replay by more than 50%, making PostHog the cheapest session replay tool in its class.

  • Today we're announcing Part 2, a change to our pricing that makes tracking events for anonymous users up to 80% cheaper.

  • We'll see a ~30% decline in product analytics revenue from the change, but it will unlock several new use cases, such as web analytics at massive scale, and tracking high-volume backend events, that were previously prohibitively expensive.

What's changing?

Until now, we charged the same for all events we ingested. This is standard practice among product analytics tools. Popular tools like Mixpanel, Amplitude, and Heap all charge customers the same for each tracked user, session, or event, regardless of the cost to them.

But now we’re changing that by splitting our product analytics pricing into two event types:

1. Identified events (previous default event type)

Events generated by logged-in users associated with a person profile, which can include custom data like a user's name and email address

Identified events let you create user-specific insights and cohorts based on person properties. They cost the same as our existing event pricing.

2. Anonymous events New

Events that only include non-identifying data, such as referral data (UTMs, domains, etc), device type, and basic location information

Anonymous events are between 55% and 80% cheaper for most of our customers, and will soon become the default event type.

Event prices

In reality, if you're tracking both anonymous traffic (like website visitors) and identified users (like logged-in customers), you'll likely use a mix of both event types. We've updated our pricing calculator to help you better estimate your exact usage and potential savings.

If you were to switch to 100% anonymous events, here's a breakdown of the cost savings:

Monthly eventsIdentified eventsAnonymous eventsChange
0-1 millionFreeFree 
1-2 million$0.0002480/event$0.0000500/event80% cheaper
2-15 million$0.0001040/event$0.0000343/event67% cheaper
15-50 million$0.0000655/event$0.0000295/event55% cheaper
50-100 million$0.0000364/event$0.0000218/event40% cheaper
100-250 million$0.0000187/event$0.0000150/event20% cheaper
250+ million$0.0000100/event$0.0000090/event10% cheaper

This means a website owner who sends 10m events per month would pay just $324 per month if they switched to only sending anonymous events, saving $9,072 per year in the process.

When should I use anonymous events?

Anonymous events are ideal for tracking users who aren't logged in, or for use cases where you only need to analyze behavior at an aggregate level, such as:

  • Visitors to your marketing website
  • Shoppers on an e-commerce store
  • Logged-out users of mobile apps
  • Tracking API and backend events
  • Events generated by LLMs
  • Error monitoring

If you mostly track logged-in users, however, you should continue to do so.

Why are anonymous events so much cheaper?

The ELI5 version is that they cost less to ingest and process, so we're passing that saving onto you.

Here's the slightly longer version:

  • When you call posthog.identify or capture an event from an identified user, we do a bunch of processing to create, update, or merge person profiles in our backend. These are stored in Postgres, separate from our events tables in ClickHouse, making this one of the most complex and expensive steps in our ingestion pipeline.

  • When ingesting anonymous events, we can entirely rely on our cheaper, faster ClickHouse tables. For example, we use a sessions table to capture session properties, such as the referring domain and the URLs visited.

  • This lets us charge you much less for these events, saving you money and enabling many use cases that would have been cost prohibitive before.

Why are you deliberately making less money?

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.

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.

When is Part 3?

It's in pre-production. Release date TBD.

Would you rather fight one horse-sized hedgehog, or 100 hedgehog-sized horses?

We would never fight hedgehogs, how dare you.


FAQ

 

Do I still get 1 million free events?

Yes, your first 1 million events each month are free, regardless of what type of events you're sending.

How will my bill change?

All events are charged at the base rate for anonymous events. Identified events are then billed as an extra rate on top of them, referred to as 'Person profiles' on your bill.

What are the limitations of anonymous events?

With anonymous events, you cannot:

  • Filter on persons (e.g. an individual user).
  • Do multi-touch attribution – only last touch is supported.
  • Target by person properties for feature flags, A/B tests, and surveys.
  • Create cohorts filtered on person properties (e.g. paying vs non-paying users).
  • View a person’s profile in the app, or query the persons table in our SQL insights.
  • Use groups analytics on anonymous events.

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.

Can I use anonymous and identified events together on the same project?

Absolutely. You can capture identified events where you need more detailed information and anonymous events when you don't need that detail.

Here's how we use them:

  • On our website, most users are tracked using anonymous events. When people visit our website, referral data like Entry UTM Source are stored in the sessions table.

  • When someone signs up to PostHog and becomes an identified user, referral data like Entry UTM Source are merged into the identified user's person profile as Initial UTM Source, Initial Referring Domain, and so on.

  • We run our website and product on the same project. This is how we recommend using PostHog for tracking behavior on both your product and website.

Note, though, that once a user becomes identified, all events they perform are identified events, because we need to check and update their profile each time.

How do I start using anonymous events?

For most users, 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 events until an identifying action is taken – i.e. using identify(), group(), setting person properties with $set, etc.

Soon, we will be making identified_only the default for all users. We'll let you know when that change happens, but you can make the change now if you prefer.

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

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

It may be covered in our person and person properties docs.

If not, ask it below, in our community forum, or raise a support ticket in the app.

Comments