Skip to content
Gauge

ax-check.com

PostHog

posthog.com

ax-check.com

Checked 6 October 2026

B

84/100

Agents haven’t verified setup

PostHog docs and pricing are clear and ready for agent use

21 of 23 checks passed: install commands, API/MCP docs, and SDKs all resolved. Pricing is stated openly with exact per-unit rates and free-tier limits.

2 fixes to start with

Concrete changes, backed by what we found.

Onboarding

Resolve the blocker that stopped agent setup.

Agents cannot progress through onboarding without human help. Provide an agent-accessible path through authentication and setup.

Docs

Return Markdown when clients request text/markdown.

Homepage returned text/html for a text/markdown request; no Markdown representation served.

Recorded coding sessions

Same task, 3 models, no posthog.com account. Recorded 6 October 2026 on Pi.

3 recorded · 53s

53s · recorded

Session findings

Select a finding to see it in context.

piv0.84.2
modelQwen 3.8 Maxcwd/sandbox/repo
Help me build a simple example using PostHog. Tell me how pricing works, and briefly tell me whether this product will be easy for you to manage. Let me know if you get blocked. If this product has no developer workflow you can act on, say so plainly and stop. Stay light: use the hosted product through its SDK or API. Do not start local service stacks or wait for long-running commands; if the quickstart requires either, say so plainly and stop.
Thinking…

The user is asking for a simple PostHog example. Let me check the environment — are there API keys or network access? PostHog is a product analytics platform. The developer workflow exists: a PostHog SDK (JS, Python) that sends events to a hosted instance (us.posthog.com). Pricing: free tier, per-event pricing, etc.

Let me check the sandbox: whether there's network access, what the repo contains.

I should stay light: use a hosted product via SDK/API. I shouldn't spin up a local stack. PostHog has a free cloud tier. Without an API key, I can't actually send data. But I can build a small example (a Python script using posthog-python) and explain that a PostHog project API key is required.

First, let me check the environment.

Things to check: network access, whether pip is available, contents of the current directory, environment variables for keys.

Let me run a few commands in parallel.

Let me think about what "whether this product is easy for you to manage" means — i.e., is PostHog easy for an AI agent to operate? PostHog has a REST API for querying insights/events, and the project API key is only for write-only capture; querying requires a personal API key. So the agent can send events easily; querying analytics requires a personal API key + organization. Overall: it's easy as long as keys are provided.

Let me investigate the sandbox.

I'll start by checking the environment — network access, tooling, and whether any PostHog credentials are already available.

pwd; ls -la; echo "---python---"; which python3 pip3 node npm 2>/dev/null; echo "---env (posthog-ish)---"; env | grep -iE "posthog|ph_|api_key|token" | sed 's/=.*/=<redacted-present>/' || echo "none found"
/sandbox/repo
/sandbox/repo
total 16
drwxr-xr-x 3 root root 4096 Sep 18 08:00 .
drwxr-xr-x 7 root root 4096 Oct  6 19:29 ..
drwxr-xr-x 8 root root 4096 Sep 24 20:05 .git
-rw-r--r-- 1 root root  408 Sep 18 08:00 .gitignore
---python---
/usr/local/bin/python3
/usr/local/bin/pip3
/usr/local/bin/node
/usr/local/bin/npm
---env (posthog-ish)---
PI_GATEWAY_API_KEY=<redacted-present>
echo "--- connectivity test ---"; curl -s -o /dev/null -w "posthog.com:%{http_code}\n" --max-time 8 https://us.posthog.com/ ; curl -s -o /dev/null -w "pypi:%{http_code}\n" --max-time 8 https://pypi.org/simple/ ; echo "--- git remote ---"; git -C /sandbox/repo remote -v 2>/dev/null | head
--- connectivity test ---
--- connectivity test ---
posthog.com:302
pypi:200
--- git remote ---
Thinking…

Network is working, no PostHog keys in the environment variables. Let's check the pricing page to provide accurate pricing information. Fetch pricing from posthog.com/pricing via curl.

Also, install posthog-python (lightweight) and write a sample script that sends events to the hosted PostHog cloud (us.posthog.com). If there's no actual API key, we can't verify against a real project. Can we use PostHog's demo/test endpoint? Actually, PostHog Cloud requires a valid project API key (phc_...). Without a key, events will be rejected (though PostHog's capture endpoint sometimes returns 200 even with invalid keys... actually it returns 400/401).

We could also write a sample using a placeholder key and a --dry-run mode that prints out the payload, so it works without credentials, and tell the user how to plug in the actual key. This way we maintain the "lightweight" approach and also avoid getting blocked.

First, let's quickly check the pricing info.

Network and PyPI are reachable; no PostHog credentials in the environment. Let me grab current pricing details and check the Python SDK availability.

curl -sL --max-time 15 https://posthog.com/pricing | sed -e 's/<[^>]*>/ /g' | tr -s ' \n' ' \n' | grep -iE "free|per event|/month|\\$0\.|events included" | head -40
prose-sm prose-h1:text-2xl max-w-none relative flex-1 min-w-0"> Copy page 97% of companies use PostHog for free. One day we’d like your money, but not today. O
 prose-sm prose-h1:text-2xl max-w-none relative flex-1 min-w-0"> Copy page 97% of companies use PostHog for free. One day we’d like your money, but not today. Only add a card if you need more than the free tier limits, advanced features, or want more projects. Your free allowance renews every month. Yes, for everything. Yes, forever. Get started - free No credit card required What you get for free, every month Resets monthly. Same allowance whether or not you have a card on file. + Analytics 1M events Session replay 5K recordings Feature flags 1M requests Experiments Billed with feature flags Error tracking 100K exceptions Surveys 1500 responses Data warehouse 1M rows + FREE historical Data pipelines 10K events + 1M rows AI Observability 100K events Evaluations Billed with AI observability PostHog AI 500 credits (worth $5) Inbox Beta 3 PRs Workflows 10K messages per channel Logs 10 GB ingested Replay Vision 2500 credits (worth $25) PostHog Desktop Beta 2000 credits (worth $20) + Analytics 1M events Session replay 5K recordings Feature flags 1M requests Experiments Billed with feature flags Error tracking 100K exceptions Surveys 1500 responses Data warehouse 1M rows + FREE historical Data pipelines 10K events + 1M rows AI Observability 100K events Evaluations Billed with AI observability PostHog AI 500 credits (worth $5) Inbox Beta 3 PRs Workflows 10K messages per channel Logs 10 GB ingested Replay Vision 2500 credits (worth $25) PostHog Desktop Beta 2000 credits (worth $20) Used across any of these products: PostHog Web PostHog Slack PostHog Desktop PostHog MCP Then why would I pay? There&#x27;s one signup and one product. Just add a card whenever you need higher limits. 1 Start here Free No credit card, not a trial. This is 97% of companies . Full monthly free tier on every product Unlimited team members 1 project, 1-year data retention Community support Usage stops at the free tier limits, so you can&#x27;t be charged by surprise. Get started - free Hit a limit? Add a card 2 If and when you need it Pay-as-you-go Same free tier every month. You only pay for what you use. Unlimited usage 6 projects – up from 1 7-year data retention – up from 1 year Email support – or Slack over $2k/mo Each product gets its own billing limit - going viral won&#x27;t require another funding round. Set billing limits 600k+ companies from side projects to public companies Customer stories Platform features, volume discounts, and onboarding help Platform packages SSO, audit logs, custom roles, and project permissions for teams that need to manage access as they grow. See what&#x27;s included Doing serious volume? Annual plans and volume discounts are available. Talk to a technical account exec – no SDRs, no discovery calls. Talk to a human Book an onboarding call Get 30 minutes with a PostHog expert for $80 – they’ll get your setup right the first time. Book a call Pricing calculator Your estimate ( 7 products ) Analytics $0 Session Replay $0 AI Observability $0 Replay Vision $0 Feature Flags $0 Error Tracking $0 PostHog AI $0 Add a product 9 more Platform packages $0 See all products and per-unit rates Analytics Remove The first 1M events are free , every month. Estimated total for all products &amp; add-ons Free Get started Share estimate Create an estimate with AI How our pricing works Only pay for products you use Generous free tier for each product (resets monthly) You can set billing limits per product so you never get a surprise bill We also offer discounts for startups and non-profits Estimating usage Not sure what your volume looks like? Generate an AI estimate or add the tracking code to your site and check back in a few days – no credit card required. If something stupid happens and you get an unexpected bill (like if your side project unexpectedly goes viral or you&#x27;re unhappy), we&#x27;ll pretty much always refund it! We&#x27;ve also written this handy guide to help! James Hawkins Co-founder Our pricing is designed to make you happy Here&#x27;s what you should know about our pricing: We don’t have loss-leader products that will go up in pricing later or get retired. We aim to match the cheapest competitor at every scale. Tell us if we&#x27;re not! (Note: This doesn&#x27;t include your buddy&#x27;s two-person startup.) We have significant revenue and are default alive . We don’t rely on investors to grow, and we’re stable. This goes a long way to avoiding the average dumb VC-backed company stuff — like running out of money or selling to a lame bigger company. We have an open source product too. It is MIT licensed if you want to use it in a big organization that isn’t ready to move to PostHog Web yet. If this makes you happy, just start here: Get started - free No credit card required Pricing FAQ How do I know how much PostHog will cost? The easiest way is to sign up, set your billing limit to $0 (if you expect to go over), and install PostHog. You&#x27;ll get an accurate projection after just a few days. You can also read our doc on estimating usage and costs . Do I pay anything for stored data (events, exceptions, replays, logs, etc.)? No, for all of our products you only pay for what you capture, ingest, or sync in a given month (i.e. you only pay when each event is first received). There are no additional storage costs or fees. How long does PostHog retain data (events, recordings, logs)? Events and metadata are guaranteed to be retained for 7 years on any paid plan and 1 year on a free plan. After 1 year, data may be moved into cold storage so queries may run more slowly. Recordings on the free plan are retained for 1 month. On the pay-as-you-go plan, recordings are retained for 90 days. The Boost and Scale add-ons can increase this to up to one year. The Enterprise add-on can increase retention to 5 years. Logs are retained for 14 days by default. You can set custom retention per service or per source at $0.05/GB per month retained. What happens after the data retention period elapses? Any data stored for more than the retention period may be permanently deleted from our systems. Is there a free trial on paid plans? We have a generous free tier on every paid plan so you can try out all the features available on PostHog before paying (though you will need to enter your credit card to unlock those features). If you have additional needs, such as enterprise features, please get in touch with our sales team . What currency are your prices in? All prices are in US Dollars (USD), excluding taxes. Do you offer a discount for non-profits? Yes in most cases! Create your account, contact the sales team for help with some basic details on your organization. We will then apply a discount. Are there any minimums or annual commitments? Nope. We can, however, offer annual commitments (for example, to maintain pricing) if you need them as part of an enterprise agreement. How does PostHog&#x27;s pricing work? PostHog has per-product usage-based pricing. This means you only pay for what you use, such as events captured, sessions recorded, and flags requested. PostHog is free to use and each product has a generous free monthly allowance (1M events for analytics, 5K session replays, 1M feature flag requests, and more). There is no minimum spend or annual contracts needed and you can set billing limits so you&#x27;re never surprised. Which plan is right for me? For nearly everyone, the pay-as-you-go plan is the right choice. It unlocks all of the features of PostHog and remains free if you stay within the limits each month (which you can set billing limits to do). What happens if I hit or go over the free limit? On the pay-as-you-go plan, we charge based on usage for everything above the free allowance. On the free plan, any additional events are permanently dropped and feature flags will return a default quota limited response. Do free tier limits reset every month? Yes. Every month, your usage is reset and you get another 1M events, 5K session replays, and more to use. Unused free tier limits do not rollover. Can I set a billing limit? Yes, you can set a billing limit for each of PostHog&#x27;s products separately in your organization&#x27;s billing settings . Check out our doc on billing limits and alerts for more information. What happens if I hit my billing limit? If you&#x27;ve set a billing limit and your usage hits it, any additional events are permanently dropped and feature flags will return a default quota limited response. PostHog will never charge you more than what you&#x27;ve set as your billing limit. How is usage calculated? Usage is calculated on a per-product level. Events for product and web analytics, recordings for session replay, requests for feature flags and experiments, exceptions for error tracking, responses for surveys, synced rows for data warehouse, messages for workflows, and GB ingested for logs. How can I manage my spend? You monitor your usage and set billing limits on the billing page in-app. This shows how much you&#x27;ve spent, projected spend, and a billable usage dashboard. Many products, like product analytics and feature flags , also have docs on cutting costs. Can I cancel my plan at any time? Yes, you can cancel your plan by setting a billing limit at any time and we&#x27;ll only charge for what you use. If you have an accidental spike , talk to us and we&#x27;ll help you sort it out. Is PostHog cheaper than competitors? Usually, yes, and often by a significant margin. Because PostHog provides multiple products teams need, we&#x27;re able to charge less than competitors. We aim to be the cheapest option for each product compared to major competitors. Beyond the all-in-one advantage, most competitors offer time-limited free trials (typically 14-30 days) with restricted features; PostHog&#x27;s free tier doesn&#x27;t expire, includes full access to most features, and resets every month, no credit card or sales call required. You can read how we stack up against competitors like Amplitude , Mixpanel , Heap , FullStory , Hotjar , GA4 , and a lot more in our comparison blogs . What do I get with PostHog that I wouldn&#x27;t get paying for multiple separate tools? A lot less headache, mostly. All your data lives in one place so you don&#x27;t need to jump between tools or piece them together to do analysis. With PostHog, you can go directly from a funnel to a replay to an error trace instead of context switching to piece together what actually happened. You just need to install a single SDK, manage a single bill, and sign a single contract (if you&#x27;re into that sort of thing). If you need a BAA for HIPAA compliance, it&#x27;s one conversation instead of five. Your procurement team will genuinely thank you. When does billing start? Usage starts being tracked as soon as you sign up for PostHog, but you aren&#x27;t billed until 1 month later. For example, if I signed up on April 6th, my first month would be billed May 6th. How often am I billed? You are billed once a month, on the same day each month. What payment methods does PostHog accept? PostHog accepts credit or debit cards processed through Stripe. If you want to pay via invoice, you can contact the sales team for help . Do you support invoicing or purchase orders? Yes, but you need to make an upfront credit purchase which can be done by contacting our sales team . Does PostHog have any setup fees or hidden costs? No. Our pricing is fully transparent. Can I use PostHog completely free forever? Yes, as long as you stay under the free tier limits. Many of our users have used PostHog for free for years. Do I need to pay for everything or only certain products? You can choose what products you use and you don&#x27;t need to pay for anything you don&#x27;t want. You can set billing limits for the products you don&#x27;t want to use to be extra safe too. PostHog&#x27;s products still work if you only use them individually. Does PostHog offer annual commitment discounts? Yes. PostHog does offer bigger discounts for annual commitments above a certain spend. See our doc on pre-paid plans for more. Have another pricing-related question? Ask PostHog AI or talk to a human . Shameless CTA If nothing else has sold you on PostHog, hopefully these classic marketing tactics will. Eco-friendly PostHog Web Digital download* Not endorsed by Kim K *PostHog is a web product and cannot be installed by CD. We did once send some customers a floppy disk but it was a Rickroll. Eco-friendly PostHog Web Digital download* Select your cloud US (Virginia) EU (Frankfurt) Starts at: $0 Free &gt; 1 left at this price!! Get started Hurry: Tons of companies signed up today . Act now and get $0 off your first order. /* */ /* */ 


[Showing lines 2-2 of 2 (50.0KB limit). Full output: /tmp/pi-bash-6df7bdf2d92d795f.log]
pip3 install -q posthog 2>&1 | tail -2; python3 -c "import posthog; print('posthog-python version:', posthog.VERSION)"
posthog-python version: 7.64.1
posthog-python version: 7.64.1
Thinking…

Got the pricing info. The SDK is already installed. Next, build a simple sample: a Python script that captures events to PostHog Cloud using the SDK, and also demonstrates the raw HTTP capture API. Since there's no API key, support a dry-run mode, and additionally test whether the hosted capture endpoint responds (without a valid key it'll be rejected — that's fine, as long as I mention that).

Let me write the sample in the repo. The repo only has a .gitignore. Should I create a posthog-example/ folder and put track_events.py and a README in it? Keep it lightweight. Also, do an actual call to the hosted capture endpoint using a placeholder key and show what kind of response comes back — that's an HTTP request to the hosted product, not a local stack, so it's allowed.

Alright, let me write the script and run it in dry-run mode, then actually make a call to https://us.posthog.com/capture/ using a fake key to show the endpoint's behavior.

Got the pricing info and SDK installation is complete. Now I'm going to create a minimal example — a Python script that uses the official posthog SDK against the hosted PostHog Cloud (no local stack needed). I'll also include a dry-run mode so it can be verified without credentials.

File edits

1 file

Completed
Writtenposthog-example/track_events.pyView changes

/sandbox/repo/posthog-example/track_events.py

Written content · previous contents were not recorded

#!/usr/bin/env python3
"""Minimal PostHog example: capture events to hosted PostHog Cloud via the Python SDK.
Usage:
# Dry run (no credentials needed) - prints the payloads that would be sent:
python3 track_events.py --dry-run
# Real capture against PostHog Cloud:
# 1. Sign up free at https://us.posthog.com (no credit card)
# 2. Project settings -> Project API Key (starts with "phc_")
export POSTHOG_API_KEY=phc_xxx
export POSTHOG_HOST=https://us.posthog.com # or https://eu.posthog.com
python3 track_events.py
"""
import argparse
import os
import sys
import posthog
EVENTS = [
# (distinct_id, event name, properties)
("demo-user-1", "app_started", {"version": "1.0.0", "platform": "python-demo"}),
("demo-user-1", "button_clicked", {"button": "signup", "screen": "home"}),
("demo-user-2", "signup_completed", {"plan": "free", "referral": "docs"}),
]
def main() -> int:
parser = argparse.ArgumentParser(description="Send demo events to PostHog Cloud")
parser.add_argument("--dry-run", action="store_true",
help="print event payloads instead of sending them")
args = parser.parse_args()
api_key = os.environ.get("POSTHOG_API_KEY", "")
host = os.environ.get("POSTHOG_HOST", "https://us.posthog.com")
if args.dry_run or not api_key:
if not args.dry_run:
print("No POSTHOG_API_KEY set -> falling back to dry run.\n", file=sys.stderr)
print(f"Would POST to {host}/capture/ (batched by SDK):\n")
for distinct_id, event, props in EVENTS:
print(f" distinct_id={distinct_id!r} event={event!r} properties={props}")
print("\nTo send for real: export POSTHOG_API_KEY=phc_... and rerun.")
return 0
posthog.project_api_key = api_key
posthog.host = host
# debug=True surfaces any API errors in the SDK's background thread
posthog.debug = True
for distinct_id, event, props in EVENTS:
posthog.capture(distinct_id, event, props)
# The SDK batches/flushes in a background thread; flush to guarantee delivery
# before the process exits.
posthog.flush()
print(f"Captured {len(EVENTS)} events to {host}. Check Activity in your PostHog project.")
return 0
if __name__ == "__main__":
sys.exit(main())
Thinking…

Next, verification: run a dry run and directly test the hosted capture endpoint using a placeholder key (to demonstrate that the hosted API responds — no valid key is required to verify connectivity/behavior). This is lightweight, just a single curl command.

Next, I'll verify the sample (in dry-run mode), and additionally hit the hosted capture endpoint directly to confirm that PostHog Cloud's HTTP API is reachable and how it responds:

cd /sandbox/repo/posthog-example && python3 track_events.py --dry-run
Would POST to https://us.posthog.com/capture/ (batched by SDK):
Would POST to https://us.posthog.com/capture/ (batched by SDK):

  distinct_id='demo-user-1'  event='app_started'  properties={'version': '1.0.0', 'platform': 'python-demo'}
  distinct_id='demo-user-1'  event='button_clicked'  properties={'button': 'signup', 'screen': 'home'}
  distinct_id='demo-user-2'  event='signup_completed'  properties={'plan': 'free', 'referral': 'docs'}

To send for real: export POSTHOG_API_KEY=phc_... and rerun.
curl -s --max-time 10 -w "\nHTTP %{http_code}\n" -X POST https://us.posthog.com/capture/ -H "Content-Type: application/json" -d '{"api_key":"phc_placeholder_invalid_key","event":"connectivity_test","distinct_id":"probe","properties":{}}'
{"status":"Ok"}
{"status":"Ok"}
HTTP 200
Thinking…

The endpoint returned {"status":"Ok"} even with an invalid key — PostHog accepts capture requests asynchronously (invalid keys are silently discarded on the server side). This is known behavior. I should mention that point: since the capture API always returns Ok, a real key is needed to actually verify data.

Done. Next, I'll summarize: examples created, how the pricing model works, ease of administration, obstacles (actual delivery requires a phc_ key; without signup credentials, end-to-end verification isn't possible, but there's no hard block — the workflow is actionable).

Done. Everything worked without getting blocked. Here's the summary:

What I built

/sandbox/repo/posthog-example/track_events.py — a minimal example using the official posthog Python SDK (v7.64.1) against hosted PostHog Cloud. No local stack, no long-running processes — just a script plus one HTTP call to the hosted API.

  • ✅ Dry-run verified: prints the 3 demo event payloads (app_started, button_clicked, signup_completed) it would batch to https://us.posthog.com/capture/.
  • ✅ Hosted API verified reachable: POST https://us.posthog.com/capture/ returned 200 {"status":"Ok"}. Note PostHog accepts capture requests asynchronously and returns Ok even for invalid keys (bad events are dropped server-side), so a real phc_ key is needed to see data land.

To send for real: sign up free at us.posthog.com (or eu.posthog.com), grab the Project API Key from project settings, then:

export POSTHOG_API_KEY=phc_xxx
python3 posthog-example/track_events.py

How pricing works (from posthog.com/pricing, verified today)

  • Usage-based, per product, free tier resets monthly — same whether or not you add a card.
  • Free monthly allowances include: 1M analytics events, 5K session replays, 1M feature-flag requests, 100K error-tracking exceptions, 1M warehouse rows.
  • Free plan: no card, 1 project, 1-year retention; events above the limit are simply dropped (no surprise bills).
  • Pay-as-you-go: same free tier, pay only for usage above it; 6 projects, 7-year retention; per-product billing limits so you can cap spend (even at $0). No storage fees — you only pay when an event is first ingested. Startup/non-profit discounts available.

Will this be easy for me to manage?

Yes, with one caveat. PostHog has a clean developer workflow I can act on entirely from here: SDKs, a simple stateless HTTP capture API, and a REST/Trends query API. The one thing I can't do myself is create an account — sending real events and querying insights requires keys you'd provide (phc_ project key for capture; a personal API key for the query API). With those in env vars, this is fully agent-manageable. The only thing I'd avoid is self-hosting PostHog (Docker/ClickHouse stack), which your instructions and I both agree is out of scope.

Blocked? No — nothing blocked. The only missing piece is a real API key, which is why the example ships with a working dry-run mode.

AX Fundamentals

23 checks. Open an area for details.

This check is a quick preview. Test more tasks and models with Gauge Agents.

Test your product with Gauge Agents

AX Check by Gauge