User retention is your real business metric—acquisition is noise if nobody comes back. Mixpanel's Retention report gives you the cohort view: who signed up, when they came back, and how long they stuck around. But you need clean event data and the right report setup to see the real picture.
Setting Up Events for Retention Analysis
Retention in Mixpanel lives on two events: an initial event (Sign Up, first purchase) and a return event (Log In, create report). Get these two right, and the reporting works.
Step 1: Track a Clear Initial Event
Choose the moment you want retention *from*. For most SaaS, this is Sign Up. Track it once per user at account creation. Include properties that describe the user: plan tier, source, geography, anything you want to slice retention by later.
// Track signup as the cohort baseline
mixpanel.track('Sign Up', {
'distinct_id': userId,
'Plan Type': 'free',
'Signup Source': 'google_ads',
'Country': 'US'
});Step 2: Track a Return Event Consistently
Choose what counts as a user 'returning.' This could be Log In, Created Report, Viewed Dashboard, or any action that shows the user is engaged. Fire this event every time they return, not just once.
// Fire this on every return/engagement
mixpanel.track('Log In', {
'distinct_id': userId,
'Login Source': 'web',
'Session Duration': sessionLength
});
// Or a product-specific engagement event
mixpanel.track('Created Report', {
'distinct_id': userId,
'Report Type': 'custom'
});Step 3: Add Filtering Properties to Initial Event
Include any property you want to filter or segment retention by. Mixpanel lets you slice retention by these properties in the report. Common ones: plan tier, signup source, feature flags, industry, company size.
mixpanel.track('Sign Up', {
'distinct_id': userId,
'Plan Type': determineUserPlan(),
'Signup Source': getUTMSource(),
'Industry': customerIndustry,
'Features Available': ['reports', 'exports', 'sso'],
'ICP': isEnterpriseTarget ? 'yes' : 'no'
});'First Time User': true.Building the Retention Report
With events tracked, the Retention report is straightforward. You're telling Mixpanel: 'Show me users who did X on day 1, then Y on day N.'
Step 4: Open the Retention Report
In the Mixpanel sidebar, go to Reports > Retention. You'll see a matrix: rows are cohorts (by signup date), columns are days/weeks post-signup, cells show % of users who returned.
Step 5: Set the Starting Event
Click the Starting Event dropdown and select Sign Up (or whatever your cohort event is). Choose your cohort granularity: Daily, Weekly, or Monthly. Weekly is standard for SaaS.
// Ensure your initial event has a proper timestamp
mixpanel.track('Sign Up', {
'distinct_id': userId,
'$timestamp': Math.floor(Date.now() / 1000),
'Plan Type': 'free'
});Step 6: Set the Returning Event
Click Returning Event and select Log In or Created Report—whatever shows the user came back and engaged. Mixpanel will now show: of the users who signed up in week 1, what % logged in on day 1, day 7, day 30, etc.
Step 7: Filter and Segment
Use the Add Filter button to narrow which users are included (e.g., only free-plan signups). Add segmentation using the Segment By dropdown to break retention down by properties like Plan Type, Signup Source, or Country. This reveals which cohorts are stickiest.
// Properties you track enable filtering in the report UI
mixpanel.track('Sign Up', {
'distinct_id': userId,
'Plan Type': userPlan,
'Signup Source': source,
'Company Size': companySize
});Monitoring and Interpreting Results
The report is live, but knowing what to look for is the skill. These patterns tell you whether retention is healthy or something broke.
Step 8: Save the Report to a Dashboard
Click Save and give it a name—e.g., 'Weekly Retention by Plan Type'. Pin it to a shared team dashboard. The report updates automatically each day; cohorts are added weekly.
Step 9: Watch the Retention Curve Shape
A healthy curve drops sharply days 0–1 (normal—many users churn immediately), then flattens. A curve that drops 50% by day 7 then stays flat suggests onboarding works. A curve that keeps dropping steeply suggests the product isn't keeping users engaged.
Step 10: Compare Month-Over-Month and Set Alerts
Pull last month's cohorts and this month's. If day-7 retention drops from 45% to 35%, something changed. Export data via the Mixpanel API and pipe it into a Slack bot to alert when retention drops below your baseline.
// Fetch retention data via API for custom alerting
const response = await fetch(
'https://data.mixpanel.com/api/2.0/retention?' +
'from_date=2026-03-01&to_date=2026-03-26&' +
'retention_type=rolling&unit=week&' +
'event=' + encodeURIComponent(JSON.stringify({'event': 'Log In'})) +
'&initial_event=' + encodeURIComponent(JSON.stringify({'event': 'Sign Up'})),
{
headers: {
'Authorization': 'Basic ' + btoa(projectToken + ':')
}
}
);
const cohorts = await response.json();
// Now check if latest cohort's day-7 retention dropped
if (cohorts.data[0][1] < 0.4) {
alert('Retention dropped below 40%');
}Common Pitfalls
- Sign Up event firing multiple times per user. Cohort dates get muddled. Check for duplicate events in Events and filter to first signup only.
- Choosing a return event that's too frequent (every API call) or too rare (only paid conversion). Pick something that feels like real engagement without noise.
- Forgetting timezone offsets. Mixpanel uses UTC; if your users are EST, cohort boundaries might be off by hours and skew your data.
- Comparing retention before and after a product launch without segmenting. Old cohorts didn't experience the new feature; don't mix them with new cohorts.
Wrapping Up
Retention monitoring in Mixpanel is straightforward once your events are clean. Choose initial and return events, set up the report, and read the curves weekly. Healthy SaaS products see day-7 retention above 40% and day-30 above 25%. If your numbers are lower, dig into cohorts by plan type, source, or feature adoption to find the leak. If you want to monitor retention across multiple tools and set up automated alerts, Product Analyst can help.