Churn rate is the percentage of users who stop using your product in a given time period—and it's the metric that determines whether you're actually growing. If you're shipping features but losing customers faster than you're gaining them, Amplitude makes it obvious why.
Defining Churn Rate for Your Product
Churn isn't a standard metric—you define what 'churned' means based on your business model.
Identify your churn trigger
For SaaS, it's a subscription cancellation. For a mobile game, it's 30 days without a session. For a marketplace, it's an account going inactive. The trigger determines everything downstream. Once you know it, instrument it in your code as an event that Amplitude tracks.
Track churn as an explicit event
Send a clear event when a user churns. Include context: cancellation reason, how long they were active, what they paid, which features they used. This gives you material to analyze later instead of just a number.
// Track explicit churn event
amplitude.track('Subscription Cancelled', {
'subscription_id': 'sub_abc123',
'revenue_monthly': 99.99,
'reason': 'too_expensive',
'months_active': 14,
'features_used': ['reports', 'exports']
});Set a time window for measurement
Churn rate is always over a specific period. Monthly churn (MRR churn) is standard for SaaS. Weekly churn for engagement-driven products. Amplitude's Retention feature lets you measure drop-off over any time window you define.
Tracking Churn in Amplitude
To measure churn reliably, you need consistent, well-structured event tracking.
Mark users as churned with user properties
Beyond the event, set a user property that flags them as churned. This makes segmentation easy. Later, when you want to analyze 'what did churned users do differently?', you can filter by this property in Segmentation.
// Set user property when churn is detected
amplitude.setUserProperties({
'is_churned': true,
'churn_date': new Date().toISOString(),
'churn_type': 'voluntary'
});Also track inactivity as a warning signal
Explicit churn events (cancellations) are clear. But inactivity often precedes churn. Track days_since_last_event or last_active_date as user properties. Users with 30+ days of inactivity are at risk even if they haven't explicitly cancelled.
// Update user properties on each session
amplitude.setUserProperties({
'last_active': new Date().toISOString(),
'days_since_active': 0,
'session_count': userSessionCount
});Track across all platforms consistently
If you have users on web, iOS, and Android, instrument churn identically on each. Amplitude syncs these to a single user profile, so you measure net churn across your entire product—not just web or mobile in isolation.
Analyzing Churn in Amplitude
Once events flow in, Amplitude gives you multiple lenses to see churn patterns.
Use Retention to see drop-off over time
Navigate to Analytics > Retention. Pick your activation event (e.g., First Sign-up) and your churn event (e.g., Subscription Cancelled). Amplitude plots the percentage of users from each cohort that remain active. A steep cliff early means onboarding is broken. A slow fade means long-term users are leaving.
// Ensure events are properly tied to users for retention analysis
amplitude.track('User Signed Up', {
'signup_source': 'google_ad',
'plan': 'free'
});
// Later, track churn
amplitude.track('Subscription Cancelled', {
'plan': 'free', // same attribute for grouping
'downgrade_reason': 'not_using'
});Create a churned user cohort for deeper analysis
In Segmentation, build a cohort: is_churned == true AND churn_date within the last 30 days. Save it. Now you can answer: What features did churned users skip? How long was their first session? What was their average revenue? Patterns emerge fast.
Query churn data via HTTP API for reporting automation
For scheduled reports or data warehouse syncs, use Amplitude's HTTP API to export churn events. Filter by event type and date range, then pipe into your BI tool or data pipeline.
// Export churn events for custom analysis
const apiKey = process.env.AMPLITUDE_API_KEY;
const params = new URLSearchParams({
'start': '20250301T00:00:00Z',
'end': '20250331T23:59:59Z',
'event': 'Subscription Cancelled'
});
const response = await fetch(
`https://api2.amplitude.com/api/2/events?${params}`,
{
headers: {
'Authorization': `Bearer ${apiKey}`
}
}
);
const churnEvents = await response.json();
// Calculate: (churnEvents.data.length / totalUsers) * 100Common Pitfalls
- Setting your inactivity threshold too high. Marking users as churned after 6 months means you miss real churn happening at day 30. Start conservative—30 days inactive is a safe baseline.
- Not separating voluntary from involuntary churn. Payment failures, legal holds, and account suspensions skew your numbers. Your product team needs to know actual voluntary churn, not payment processing noise.
- Ignoring seasonal patterns. New Year, post-holidays, and budget cycles all spike churn. Compare year-over-year, not sequential months, or you'll chase phantom trends.
- Confusing active users with engaged users. Someone might log in but never send an event. Track engagement metrics (feature use, content consumption) alongside login events for a real picture.
Wrapping Up
Churn rate is deceptively simple to define and impossible to ignore once you're tracking it in Amplitude. The metric forces you to ask uncomfortable questions: Why are users leaving? Is it a product problem or a fit problem? What's your actual unit economics if half your users are gone in six months? Once you're measuring churn, you can act on it—and that's where momentum compounds. If you want to track churn automatically across Amplitude, Mixpanel, and PostHog without context-switching, Product Analyst can help.