posthog-cost-tuning

SKILL.md

PostHog Cost Tuning

Overview

Reduce PostHog event-based pricing costs by controlling event volume, optimizing autocapture settings, and leveraging the generous free tier. PostHog charges per event with a free tier of 1M events/month, then ~$0.00031 per event beyond that.

Prerequisites

  • PostHog Cloud account with billing dashboard access
  • Application instrumented with PostHog SDK
  • Understanding of which events drive business value

Instructions

Step 1: Audit Event Volume by Type

set -euo pipefail
# Check which events consume the most quota
curl "https://app.posthog.com/api/projects/PROJECT_ID/insights/trend/?events=[{\"id\":\"$pageview\"},{\"id\":\"$autocapture\"},{\"id\":\"$screen\"}]&date_from=-30d&interval=week" \
  -H "Authorization: Bearer $POSTHOG_PERSONAL_API_KEY" | \
  jq '.result[] | {event: .label, total_30d: (.data | add)}'

Step 2: Disable Unnecessary Autocapture

// posthog-init.ts - Configure autocapture to skip noisy elements
posthog.init('phc_YOUR_KEY', {
  autocapture: {
    dom_event_allowlist: ['click', 'submit'], // Skip scroll, change, etc.
    element_allowlist: ['a', 'button', 'form', 'input[type=submit]'],
    css_selector_allowlist: ['.track-click'], // Only track explicitly marked elements
    url_ignorelist: ['/health', '/api/internal'], // Skip internal endpoints
  },
  // Disable session recording for anonymous users to save on recording quota
  session_recording: {
    maskAllInputs: true,
  },
});

Step 3: Sample High-Volume Events

// Reduce non-critical event volume by sampling
posthog.init('phc_YOUR_KEY', {
  // Only send 10% of pageview events (still statistically significant)
  before_send: (event) => {
    if (event.event === '$pageview') {
      return Math.random() < 0.1 ? event : null; // 90% reduction
    }
    // Always send business-critical events
    if (['purchase', 'signup', 'upgrade'].includes(event.event)) {
      return event;
    }
    // Sample other events at 50%
    return Math.random() < 0.5 ? event : null;
  },
});

Step 4: Filter Bot Traffic

// Bots generate significant event volume without business value
posthog.init('phc_YOUR_KEY', {
  before_send: (event) => {
    const ua = navigator.userAgent.toLowerCase();
    const isBot = /bot|crawler|spider|scrapy|headless|phantom/i.test(ua);
    return isBot ? null : event;
  },
});

Step 5: Monitor Monthly Costs

set -euo pipefail
# Check current event usage vs billing tier
curl "https://app.posthog.com/api/organizations/ORG_ID/billing/" \
  -H "Authorization: Bearer $POSTHOG_PERSONAL_API_KEY" | \
  jq '{
    events_used: .events_current_usage,
    events_limit: .events_plan_limit,
    usage_pct: (.events_current_usage / .events_plan_limit * 100),
    estimated_cost: (if .events_current_usage > 1000000 then ((.events_current_usage - 1000000) * 0.00031) else 0 end)  # 1000000 = 1M limit
  }'

Error Handling

Issue Cause Solution
Event volume spike Autocapture on high-frequency element Add element to css_selector_denylist
Bill higher than expected Bot traffic generating events Add bot filtering in before_send
Missing critical events Sampling too aggressive Exclude business events from sampling
Free tier exceeded early New feature launched without volume estimate Forecast events before launch

Examples

Basic usage: Apply posthog cost tuning to a standard project setup with default configuration options.

Advanced scenario: Customize posthog cost tuning for production environments with multiple constraints and team-specific requirements.

Output

  • Configuration files or code changes applied to the project
  • Validation report confirming correct implementation
  • Summary of changes made and their rationale

Resources

  • Official monitoring documentation
  • Community best practices and patterns
  • Related skills in this plugin pack
Weekly Installs
18
GitHub Stars
1.6K
First Seen
Jan 30, 2026
Installed on
codex18
opencode17
antigravity17
kilo17
qwen-code17
github-copilot17