Power users drive retention and revenue, but finding them in your user base requires intentional tracking and segmentation. Mixpanel's Cohorts, Insights, and Funnels let you define power users by any metric—then visualize exactly what they're doing. We'll show you how to set this up so you're not guessing who your most engaged users are.
Define Your Power User Metric
Power users look different for every product. Daily active streaks? Feature breadth? Events per month? Start by tracking the behaviors that actually predict engagement.
Track Engagement Events with Consistent Properties
Use mixpanel.track() to log engagement behaviors with descriptive properties. Every feature usage, session milestone, or adoption milestone should be a tracked event. Consistency matters—Mixpanel is case-sensitive, so use the same property names every time.
// Track feature usage with engagement context
mixpanel.track('Feature Used', {
feature_name: 'dashboard_export',
feature_category: 'data_analysis',
events_in_session: 8,
user_tenure_days: 120
});
// Track adoption milestones
mixpanel.track('Feature Adopted', {
feature: 'custom_alerts',
features_adopted_total: 5,
days_from_signup: 45
});
// Log session depth
mixpanel.track('Session Complete', {
session_duration_minutes: 32,
event_count_in_session: 15,
actions_taken: ['filter', 'segment', 'export']
});Set User Properties for Power User Metrics
Call mixpanel.identify() with the user ID, then use mixpanel.set_user_properties() to store computed metrics at the user level. These become your filters in Insights. Include lifetime value metrics: total events, feature count, days active, last activity.
// Identify user and set aggregated metrics
mixpanel.identify(user_id);
mixpanel.set_user_properties({
'lifetime_events': 847,
'monthly_active_days': 24,
'features_adopted': 9,
'days_since_last_login': 2,
'total_sessions': 156,
'avg_session_duration_minutes': 28,
'power_user_tier': 'platinum'
});
// Alternatively, use set() for profile updates
mixpanel.set({
'last_power_action': new Date().toISOString(),
'power_user_score': 92
});Build a Cohort for Power Users
Once metrics are being tracked, create a Cohort in Mixpanel to formalize your definition. This becomes a reusable filter across all reports.
Create a Cohort with Behavioral and Property Filters
Open Cohorts in the Mixpanel sidebar, click Create Cohort, and name it Power Users - Monthly Active. Add filters: monthly_active_days >= 20 AND lifetime_events >= 500 AND event 'Feature Used' completed in last 7 days. Mixpanel calculates membership in real-time. Save and wait a few minutes for the cohort to populate.
// Query cohort membership via Mixpanel Data API
const checkCohortMembership = async (distinct_id, cohort_id) => {
const params = new URLSearchParams({
distinct_id: distinct_id,
project_id: PROJECT_ID
});
const response = await fetch(
`https://data.mixpanel.com/api/2.0/cohorts/${cohort_id}`,
{
method: 'GET',
headers: {
'Authorization': 'Basic ' + Buffer.from(TOKEN + ':').toString('base64')
}
}
);
const cohortData = await response.json();
// cohortData.members includes all users in the cohort
return cohortData.members.includes(distinct_id);
};
// Track when users enter or exit a cohort
if (await checkCohortMembership(user_id, 'power_user_cohort')) {
mixpanel.track('Joined Power User Cohort', {
cohort_name: 'Power Users - Monthly Active',
timestamp: new Date().toISOString()
});
}Test and Iterate Your Cohort Definition
Before using the cohort in reports, run a quick Insights report filtered by the new cohort to verify it's capturing the right users. Check the cohort size—if it's zero or suspiciously small, trace back: are the property values matching? Are the events named correctly? Is the date range too narrow?
// Validate cohort size and composition
const validateCohort = async (cohort_id) => {
const response = await fetch(
`https://data.mixpanel.com/api/2.0/cohorts/${cohort_id}/members`,
{
headers: {
'Authorization': 'Basic ' + Buffer.from(TOKEN + ':').toString('base64')
}
}
);
const data = await response.json();
console.log(`Cohort size: ${data.member_count}`);
console.log(`Sample members:`, data.members.slice(0, 5));
// Calculate composition stats
const avgLifetimeEvents = data.members.reduce((sum, member) => {
return sum + (member.properties['lifetime_events'] || 0);
}, 0) / data.members.length;
console.log(`Avg lifetime events: ${avgLifetimeEvents}`);
return data;
};
validateCohort('power_user_cohort');Visualize Power User Behavior in Reports
Now that power users are defined and cohorted, see what they actually do. Insights and Funnels will show you how their behavior differs from casual users.
Create an Insights Report Broken Down by Power User Tier
Go to Insights, select an event (e.g., Feature Used), set the Breakdown to power_user_tier. This shows you feature usage volume split between power users and others. Alternatively, add a Filter for your Power User cohort to isolate just power user behavior.
// Query Insights data for power users vs. everyone
const compareInsights = async () => {
const powerUserQuery = {
event: 'Feature Used',
type: 'general',
unit: 'day',
from_date: '2026-01-01',
to_date: '2026-03-26',
interval: 1,
where: [
{
property: 'power_user_tier',
type: 'string',
operator: 'is',
value: 'platinum'
}
]
};
const response = await fetch(
'https://data.mixpanel.com/api/2.0/events/top',
{
method: 'POST',
headers: {
'Authorization': 'Basic ' + Buffer.from(TOKEN + ':').toString('base64'),
'Content-Type': 'application/json'
},
body: JSON.stringify(powerUserQuery)
}
);
const data = await response.json();
// data.results = daily event counts for power users
console.log('Power user events per day:', data.results);
return data;
};
compareInsights();Build a Funnel to Track Power User Progression
Create a new Funnel with steps: Sign Up → Feature Demo Viewed → First Feature Used → Returned After Day 1. Filter by your Power User cohort. You'll see what % of power users hit each milestone and where engagement drops.
// Fetch funnel data for power users
const getFunnelConversion = async (funnel_id, cohort_id) => {
const response = await fetch(
`https://data.mixpanel.com/api/2.0/funnels/${funnel_id}?cohort_id=${cohort_id}`,
{
headers: {
'Authorization': 'Basic ' + Buffer.from(TOKEN + ':').toString('base64')
}
}
);
const data = await response.json();
// Calculate step-by-step conversion
const analysis = data.funnel_steps.map((step, index) => {
const prevCount = index === 0 ? step.count : data.funnel_steps[index - 1].count;
const conversionRate = (step.count / prevCount) * 100;
return {
step_name: step.event,
users_reached: step.count,
conversion_from_previous: conversionRate.toFixed(2) + '%'
};
});
return analysis;
};
// Power users might show 85% conversion through all steps
// Regular users might drop to 20% at step 2Common Pitfalls
- Tracking event names inconsistently. If you log 'Feature_Used', 'Feature Used', and 'featureUsed' separately, Mixpanel treats them as three different events. Your segmentation filters won't work as expected.
- Creating a cohort without validating it. Always spot-check: run a sample report filtered by the cohort to confirm it captures the users you expect. A cohort with zero members means a typo or mismatched property value.
- Over-engineering the definition too early. Start with one or two signals (events per week + days active). Add behavioral complexity only after you see baseline patterns in your power user segment.
- Relying solely on historical data. Mixpanel retains event data based on your plan (typically 12 months). If you need to analyze power users from 18 months ago, you won't have the underlying event logs, only aggregated cohort snapshots.
Wrapping Up
You now have power users formally defined, cohorted in Mixpanel, and visible in Insights and Funnels. Track the right engagement signals, layer them into a Cohort, and watch for behavior differences. If you want to identify and track power users automatically across all your analytics tools without manual Mixpanel queries, Product Analyst can help.