6 min read

How to Visualize Power Users in Mixpanel

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.

javascript
// 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']
});
Track engagement signals with consistent property names for segmentation

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.

javascript
// 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
});
Store aggregated engagement metrics as user properties to use as Insight filters
Watch out: Mixpanel limits user properties to 2000 per project. Use snake_case naming consistently and avoid storing properties you won't actually query on.

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.

javascript
// 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()
  });
}
Check cohort membership programmatically and track cohort changes

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?

javascript
// 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');
Validate cohort composition before using it in analysis
Tip: Start with broad criteria. A cohort with 100–500 users is usually more actionable than one with 5,000 or 10. You can always refine the definition after you see behavior patterns.

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.

javascript
// 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();
Compare event rates between power users and the full user base

Build a Funnel to Track Power User Progression

Create a new Funnel with steps: Sign UpFeature Demo ViewedFirst Feature UsedReturned After Day 1. Filter by your Power User cohort. You'll see what % of power users hit each milestone and where engagement drops.

javascript
// 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 2
Analyze funnel conversion rates specific to power users
Tip: Use Retention to compare power user stickiness. Run retention on your Power User cohort and compare month-over-month retention to the full user base. You should see significantly higher retention.

Common 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.

Track these metrics automatically

Product Analyst connects to your stack and surfaces the insights that matter.

Try Product Analyst — Free