What you'll learn:

View here the presentation Slides:

The six things that inflate almost every PostHog bill are autocapture, session replay, data warehouse syncs, feature flags, product-versus-web analytics, and AI credits. Here is each one with its one-line fix:

  1. Autocapture records every click and keystroke automatically, which doubles your event count. Turn it off once you pass ~2,000 sessions a month and send custom events instead.
  2. Session replay records 100% of sessions by default. Add a 10% sampling trigger group and offload unlimited recording to Microsoft Clarity for free.
  3. Data warehouse syncs duplicate data you already store elsewhere. Sync only the rows you need and slow the refresh from hourly to daily.
  4. Feature flags keep billing as requests after an experiment ends. Migrate the winner into your codebase and close the flag.
  5. Product vs web analytics: the same events cost roughly 3.5× more as product analytics. Keep events on anonymous web analytics unless you need the person profile.
  6. PostHog AI credits cost 1 cent each after 500 free. Define what a credit is and when it is spent before you enable it.

Quick context on why you should trust this teardown. I’m JJ, founder of VisionLabs. My team manages around 30 PostHog accounts across companies doing anywhere from $5M to $100M in ARR, everything from info products to software to direct response.

This is my experience, and I’m not affiliated with PostHog in any way. With that said, let’s get into where the money actually goes, and exactly how to get it back.

Cost driverWhy it growsThe fixTypical impact
AutocaptureAuto-records every interaction as a billable eventTurn off past ~2k sessions/mo, send custom eventsCan cut event volume ~50%
Session replayRecords 100% of sessions10% sampling + Microsoft Clarity for overflowPredictable, capped replay cost
Data warehouse syncsDuplicates external rows, syncs too oftenSync needed rows only, hourly → dailyRemoves a hidden line item
Feature flagsBilled per request, left open foreverClose flags post-experiment, mind local eval (10×)Stops silent request billing
Product vs web analyticsProduct events tied to a person profile cost moreUse web analytics unless identity is neededUp to ~50% off that line
PostHog AI credits1¢ per credit after 500 free, usage undefinedDefine a credit before enablingAvoids surprise AI spend
How to optimize PostHog Costs

Why does your PostHog bill look so complicated?

Because PostHog itemizes everything instead of hiding it behind one number. Most tools charge you per monthly active user and bundle everything into that one line. PostHog does the opposite: it breaks out events, session recordings, feature flag requests, warehouse rows, and AI credits as separate line items. Think of it as the Spirit Airlines of analytics. Everything is à la carte, which feels complicated when you’re reading the bill, but it’s actually the thing that makes this whole article possible.

Here’s why that matters: if every cost is a separate line item, then most of those line items are optional. You can turn them down, sample them, or move them somewhere free. The transparency that makes the bill look scary is the same transparency that lets you get it exactly where you want it. You can read how the pricing fits together in our PostHog academy.

Autocapture: the fastest way to lower your PostHog event costs

Autocapture is the fastest single fix for a growing PostHog bill, because it silently records every click, form field, and pageview as a billable event and can nearly double your event count. It’s a phenomenal thing when you’re going from $0 to your first $1M in ARR: you install the snippet and get data without instrumenting anything. The problem is what happens after that. Over time, autocapture balloons your event count, and events are what you pay for.

The fix is simple: capture only what you need. You need clicks, you need views, you need the custom interactions specific to your app. You do not need an event every time someone starts typing in a field. Those rarely change a decision, and they add up fast.

  • Keep: pageviews, meaningful clicks, and custom events you fire on purpose with posthog.capture.
  • Kill: keystroke and field-focus events, dead clicks, and anything you’ve never once used in an insight.
  • Move: web vitals is the single biggest offender we see. You do not need web vitals firing as a PostHog event every day. Track it with a third-party tool and keep it off your event bill entirely.

Our rule of thumb: once you’re past roughly 2,000 sessions a month, turn autocapture off and send custom events instead. Every client we work with runs with it off. Here’s how we set up PostHog events from scratch if you want the full walkthrough.

How do you reduce PostHog session replay costs?

Add a sampling trigger group so you record a fixed percentage of sessions instead of all of them, and push unlimited recording to a free tool. People love to say “I need everything recorded, all the time, everywhere.” That’s almost never true, and it’s why teams hit their replay limit in the first week of every month.

Here’s the exact path inside PostHog:

  1. Go to Settings, then Replay (I always command-search “replay” to jump straight there).
  2. Scroll to Trigger groups and add a global group.
  3. Set it to everyone, at a 10% sample rate. Optionally add a minimum duration, say 5 seconds, so you skip bounces.

That alone caps your recordings at a predictable number instead of letting them run wild. You’ll record the 5,000 free sessions, or whatever budget you set aside, and stop hitting the wall at the start of each month.

The free swap: If you genuinely need more recordings, install Microsoft Clarity. It’s free, it gives you unlimited session recordings and heatmaps, and you can pass the same PostHog session ID into Clarity so the same user is unified across both tools. Track everyone’s events in PostHog, and when you want to actually watch a session, jump to Clarity. Their heatmaps are arguably better, and it’s honestly one of the best products Microsoft ships.

Data warehouse sync costs: the PostHog line nobody notices

Data warehouse syncs raise your PostHog bill by duplicating data you already pay to store elsewhere, and the sync frequency is where most of the cost hides. When you go to Data → Sources and connect Stripe, BigQuery, Postgres, MySQL, or Redshift, PostHog copies those rows into itself. You’re now paying for the same data twice, and it’s the one line item most teams never realize they turned on.

Think of it like running your app on Postgres and then importing all of it into BigQuery. You’re paying for the same data in two places, and the sync between them is usually the most expensive part. All the normal database cost problems you’d expect in BigQuery can happen here too, they’re just less obvious, because from the PostHog side it looks like you clicked a couple of buttons and selected “all.”

Before you connect any source, ask yourself two questions:

  • Which rows do I actually need? Sync only the rows you can explain a reason for. Not the whole table because it was one checkbox.
  • How fresh does this really need to be? Every hour? Every day? Keep your refresh rate in the realm of normalcy. (I’m looking at you, the handful of clients who ask for per-second updates.)

Are your feature flags costing you money after the experiment ended?

Yes, if you leave them open. Feature flags are billed on requests, and a flag that’s still live months after you picked a winner keeps getting billed forever. I’ve seen teams use flags as their deploy mechanism, flipping them from 50% to 100% and leaving them there. That’s a fast way to move and break things, and then pay for it later.

Keep your flags clean:

  1. Use flags to roll features out and run experiments, not to ship permanently.
  2. Once you’ve decided who won, migrate the winner into your codebase and close the flag.
  3. Don’t let “temporary” flags live in production indefinitely.

It’s a cost-benefit call. If migrating a test into code takes you an hour, maybe that hour is worth $100. At low scale the flag is cheaper than the hour, so leave it. As you ramp up, that flips, and stale flags start costing real money. One mechanic most teams miss: if you use local evaluation on a backend SDK, PostHog charges each local-eval request as 10 feature flag requests. A server polling every 30 seconds adds up to hundreds of thousands of billed requests a month, so know that number before you turn it on.

Product analytics vs web analytics: the hidden 3.5× multiplier

Product analytics costs roughly 3.5× more than web analytics for the same event volume in PostHog, because product events are tied to an identified person profile. What makes it dangerous is that the UI barely shows you which one you’re paying for. Pull up their pricing calculator and try it: 10 million events on web analytics runs about $337, while the same 10 million events on product analytics runs roughly 3.5× that.

Bar chart comparing PostHog cost for 10 million events: $337 on web analytics versus about $1,180 (roughly 3.5 times more) on product analytics, because product events are tied to a person profile.

Bar chart comparing PostHog cost for 10 million events: $337 on web analytics versus about $1,180 (roughly 3.5 times more) on product analytics, because product events are tied to a person profile.

The real difference comes down to one thing: is the event tied to a person profile? Product analytics stores an identity graph of who each user is; web analytics keeps things anonymous. Both are legitimate, but they’re priced very differently, and it’s easy to select “all,” end up on product analytics for everything, and quietly spend $5,000 a month on what could have been half that.

So make it a deliberate decision, not a default. Do you need this event tied to an identified person, or is anonymous web analytics enough? Decide per event stream, and check this line whenever your bill jumps for no obvious reason.

PostHog AI credits: know what a credit costs before you enable it

PostHog AI costs 1 cent per credit after 500 free credits, and the real risk is spending on it without knowing what a credit is or when it’s used. This is the one I’ve only really seen bite once, so I’ll keep it short. The trap isn’t the price, it’s that most people never ask the two questions you should ask on every AI platform: what counts as a credit, and when exactly are credits used? Until you can answer those, you can’t predict the cost. Enable it if it’s worth the value to you, just define the credit first.

When is it worth having someone else optimize PostHog for you?

When the time to fix it costs more than the bill you’d save, or when you’d rather your team ship product than babysit settings. Five of the six fixes above are basically one toggle away from done. The sixth, warehouse syncs, takes a bit of judgment. None of it is rocket science.

And to be clear, PostHog is still a phenomenal tool, and the cost is usually nominal compared to the competitors on the market. Some of the itemized lines will make you go “wait, why am I paying for that?” That’s the transparency talking. It’s the same itemization that lets you get your bill down to exactly the features you use.

If you’d rather just have this handled, that’s what we do. My team runs this exact teardown across the PostHog accounts we manage: we handle the technical part so you focus on growing sessions, leads, and sales. Take a look at our PostHog implementation and audit work, or book a quick call and tell us how you heard about us. Action > Data.

More from

📅 Free Live Workshop Live now ▷ Replay available

The framework we use to drive revenue using data

Turn your data patterns into revenue. Less reporting on what happened, more action on what to do next.

$1M Challenger brands
$1B Category leaders

The same framework works at every revenue scale — the data problem doesn't change.

Enter your email above to save your free spot · June 17, 2026, 3:00 PM

Insight Engineering: Driving Revenue First — we're live now.

Missed it live? The full replay is playing above.

00
Days
00
Hours
00
Minutes
00
Seconds
until we go live
JJ Reynolds
Hosted by JJ Reynolds
Sharing the exact data framework his team runs with growth clients
  • In this session you'll leave with
  • A way to tell which numbers actually drive revenue, and which ones you can stop reporting.
    The framework for turning one data pattern into a revenue experiment you can ship this week.
    A repeatable system, so acting on insight stops depending on who has time to dig through dashboards.

Trusted by teams at

Days
Hours
Minutes
Seconds

Black Friday Offer🔥 Get your data audit. Normally $2,500—this week only $97. We’ll audit your GA4 stack and jump on a live session to prioritize fixes.