PostHog is an open-source product analytics platform. Event tracking, session replays, feature flags, A/B testing, surveys — all self-hostable, all in one tool.
Why PostHog?
- All-in-one — analytics, replays, feature flags, experiments, surveys
- Self-hostable — Docker or Kubernetes, data stays on your servers
- Free tier — 1M events, 5K sessions, unlimited feature flags
- Open source — MIT license, no vendor lock-in
Quick Start
npm install posthog-js
import posthog from 'posthog-js';
posthog.init('YOUR_API_KEY', {
api_host: 'https://app.posthog.com',
person_profiles: 'identified_only',
});
Event Tracking
// Track custom events
posthog.capture('button_clicked', {
button_name: 'signup',
page: '/pricing',
});
// Track page views (auto or manual)
posthog.capture('$pageview');
// Identify users
posthog.identify('user_123', {
email: 'alice@example.com',
plan: 'pro',
company: 'Acme Corp',
});
// Group analytics
posthog.group('company', 'acme-corp', {
name: 'Acme Corp',
industry: 'SaaS',
employees: 50,
});
Feature Flags
// Check feature flag
if (posthog.isFeatureEnabled('new-checkout')) {
showNewCheckout();
} else {
showOldCheckout();
}
// Get flag payload
const variant = posthog.getFeatureFlagPayload('pricing-test');
// { price: 29, title: 'Pro Plan' }
// React component
import { useFeatureFlagEnabled } from 'posthog-js/react';
function App() {
const showNewUI = useFeatureFlagEnabled('new-ui');
return showNewUI ? <NewUI /> : <OldUI />;
}
Server-Side (Node.js)
import { PostHog } from 'posthog-node';
const posthog = new PostHog('YOUR_API_KEY', {
host: 'https://app.posthog.com',
});
// Track event
posthog.capture({
distinctId: 'user_123',
event: 'order_completed',
properties: { amount: 99.99, currency: 'USD' },
});
// Feature flag
const enabled = await posthog.isFeatureEnabled('new-api', 'user_123');
// Don't forget!
await posthog.shutdown();
A/B Testing
const variant = posthog.getFeatureFlag('signup-button-test');
if (variant === 'control') {
showButton('Sign Up', 'blue');
} else if (variant === 'test-green') {
showButton('Get Started', 'green');
} else if (variant === 'test-orange') {
showButton('Start Free Trial', 'orange');
}
// PostHog automatically tracks which variant converts better
API
# Query events
curl -X POST 'https://app.posthog.com/api/projects/PROJECT_ID/query' \
-H 'Authorization: Bearer YOUR_PERSONAL_API_KEY' \
-d '{
"query": {
"kind": "EventsQuery",
"select": ["event", "timestamp"],
"where": ["event = '\''button_clicked'\''"]
}
}'
Tracking product metrics? Check out my Apify actors for competitive analytics data, or email spinov001@gmail.com for custom analytics solutions.
PostHog, Mixpanel, or Amplitude — which analytics tool do you use? Share below!
Top comments (0)