executing-plans
executing-plans
Use when executing an implementation plan in the current session as the implementer yourself — your human partner chose inline execution, or no subagent tool is available
posthog-cost-tuningOptimize PostHog costs through tier selection, sampling, and usage monitoring. Use when analyzing PostHog billing, reducing API costs, or implementing usage monitoring and budget alerts. Trigger with phrases like "posthog cost", "posthog billing", "reduce posthog costs", "posthog pricing", "posthog expensive", "posthog budget".
Independent GitHub snapshot · Automated classification · Original documentation governs
Optimize PostHog costs through smart tier selection, sampling, and usage monitoring.
| Tier | Monthly Cost | Included | Overage |
|---|---|---|---|
| Free | $0 | 1,000 requests | N/A |
| Pro | $99 | 100,000 requests | $0.001/request |
| Enterprise | Custom | Unlimited | Volume discounts |
interface UsageEstimate {
requestsPerMonth: number;
tier: string;
estimatedCost: number;
recommendation?: string;
}
function estimatePostHogCost(requestsPerMonth: number): UsageEstimate {
if (requestsPerMonth <= 1000) {
return { requestsPerMonth, tier: 'Free', estimatedCost: 0 };
}
if (requestsPerMonth <= 100000) {
return { requestsPerMonth, tier: 'Pro', estimatedCost: 99 };
}
const proOverage = (requestsPerMonth - 100000) * 0.001;
const proCost = 99 + proOverage;
return {
requestsPerMonth,
tier: 'Pro (with overage)',
estimatedCost: proCost,
recommendation: proCost > 500
? 'Consider Enterprise tier for volume discounts'
: undefined,
};
}
class PostHogUsageMonitor {
private requestCount = 0;
private bytesTransferred = 0;
private alertThreshold: number;
constructor(monthlyBudget: number) {
this.alertThreshold = monthlyBudget * 0.8; // 80% warning
}
track(request: { bytes: number }) {
this.requestCount++;
this.bytesTransferred += request.bytes;
if (this.estimatedCost() > this.alertThreshold) {
this.sendAlert('Approaching PostHog budget limit');
}
}
estimatedCost(): number {
return estimatePostHogCost(this.requestCount).estimatedCost;
}
private sendAlert(message: string) {
// Send to Slack, email, PagerDuty, etc.
}
}
function shouldSample(samplingRate = 0.1): boolean {
return Math.random() < samplingRate;
}
// Use for non-critical telemetry
if (shouldSample(0.1)) { // 10% sample
await posthogClient.trackEvent(event);
}
// Instead of N individual calls
await Promise.all(ids.map(id => posthogClient.get(id)));
// Use batch endpoint (1 call)
await posthogClient.batchGet(ids);
const client = new PostHogClient({
compression: true, // Enable gzip
});
# Set up billing alerts in PostHog dashboard
# Or use API if available:
# Check PostHog documentation for billing APIs
-- If tracking usage in your database
SELECT
DATE_TRUNC('day', created_at) as date,
COUNT(*) as requests,
SUM(response_bytes) as bytes,
COUNT(*) * 0.001 as estimated_cost
FROM posthog_api_logs
WHERE created_at >= NOW() - INTERVAL '30 days'
GROUP BY 1
ORDER BY 1;
Review PostHog dashboard for usage patterns and costs.
Use the cost estimation function to find the right tier.
Add usage tracking to catch budget overruns early.
Enable batching, caching, and sampling where appropriate.
| Issue | Cause | Solution |
|---|---|---|
| Unexpected charges | Untracked usage | Implement monitoring |
| Overage fees | Wrong tier | Upgrade tier |
| Budget exceeded | No alerts | Set up alerts |
| Inefficient usage | No batching | Enable batch requests |
// Estimate monthly cost for your usage
const estimate = estimatePostHogCost(yourMonthlyRequests);
console.log(`Tier: ${estimate.tier}, Cost: ${estimate.estimatedCost}`);
if (estimate.recommendation) {
console.log(`💡 ${estimate.recommendation}`);
}
For architecture patterns, see posthog-reference-architecture.