Power users generate most of your revenue, but you won't know they're at risk until they're gone. Mixpanel's alerts let you monitor power user engagement in real-time and catch activity drops before they turn into churn. Here's how to set it up.
Define Power Users with Cohorts or Properties
Before alerting on power users, you need to identify them in Mixpanel. Use a combination of event frequency, custom properties, or a formal cohort.
Track User Activity as a Custom Property
Set a custom property on users that marks them as power users. You can base this on event count, subscription tier, or days active. Use mixpanel.people.set() to mark users with a Power User property.
// Mark users as power users based on their activity
mixpanel.people.set({
'Power User': true,
'Power User Tier': 'gold',
'Monthly Events': 250,
'Days Active': 45,
'Last Active': new Date().toISOString()
});
// Track when users enter power user status
mixpanel.track('Power User Status Changed', {
'new_status': 'gold',
'trigger': 'monthly_events_threshold',
'monthly_events': 250
});Build a Power User Cohort in Mixpanel
Go to People > Cohorts and create a new cohort filtered by your power user property. Name it Power Users (Gold Tier) so it's reusable. You can filter on custom properties, event counts, or device properties—whatever defines your power users.
// Segment events by power user properties in your application
if (userProperties['Power User'] === true) {
mixpanel.track('Power User Action', {
'action': 'advanced_feature_used',
'feature': 'custom_dashboards',
'user_tier': userProperties['Power User Tier']
});
}
// Structure cohort queries
const powerUserFilter = "properties['Power User'] == true AND properties['Power User Tier'] == 'gold'";
console.log('Querying cohort with filter:', powerUserFilter);Create and Configure the Alert
Once power users are identified in Mixpanel, set up an alert that fires when their engagement drops.
Create an Alert in the Mixpanel UI
In your workspace, click Alerts in the left sidebar, then Create Alert. Choose a metric to monitor—typically Events or a chart you've built. Name it Power User Activity Drop so your team knows what it watches.
// Prepare structured data for alert configuration
const powerUserAlertConfig = {
metric: 'Events',
eventName: 'Power User Action',
filters: [
{
property: 'Power User',
operator: 'equals',
value: true
},
{
property: 'Power User Tier',
operator: 'equals',
value: 'gold'
}
],
aggregation: 'count',
timeframe: 'day'
};
const alertCondition = {
type: 'anomaly',
sensitivity: 'medium',
window: '24_hours',
lookback: '30_days'
};
console.log('Power user alert configured');
Set the Alert Threshold or Anomaly Sensitivity
Choose between Anomaly Detection (Mixpanel's ML) or Fixed Threshold. Anomaly detection is better for power users—it learns normal variation and only fires on unusual drops. Set sensitivity to medium to avoid false positives.
// Configure alert thresholds
const alertThresholds = {
// Anomaly detection (recommended)
anomaly: {
type: 'std_dev',
threshold: 2, // Fire if 2 standard deviations below baseline
baseline_days: 30,
check_frequency: 'hourly'
},
// Fixed threshold (alternative)
fixed: {
type: 'absolute_change',
min_events: 100,
drop_percentage: 30, // Alert if drops by 30% or more
lookback_hours: 24
}
};
const activeThreshold = alertThresholds.anomaly;
console.log(`Using ${activeThreshold.type} with ${activeThreshold.threshold} std devs`);
Configure Alert Recipients and Delivery
Click Notifications and choose your delivery method: Email, Slack (via Mixpanel integration), or Webhook. For critical alerts on power users, prefer Slack or Webhooks—email gets lost. Test the integration before going live.
// Handle incoming webhook alerts from Mixpanel
const express = require('express');
const app = express();
app.post('/webhooks/mixpanel-alert', express.json(), (req, res) => {
const { alert_name, alert_message, timestamp } = req.body;
console.log(`Alert: ${alert_name}`);
console.log(`Message: ${alert_message}`);
// Route to incident management system
notifyOnCall({
title: `🚨 ${alert_name}`,
severity: 'high',
message: alert_message,
timestamp: timestamp
});
res.status(200).json({ received: true });
});
app.listen(3001);
Validate and Iterate on Your Alert
A live alert is just the start. Tune it over the first few weeks to eliminate false positives while catching real issues.
Backtest Your Alert Against Historical Data
Before enabling the alert fully, check how it would have performed over the last 30-60 days. Use Mixpanel's Dashboards to build a chart of power user events, then visually mark where your alert would have fired. Adjust thresholds if needed.
// Query historical power user data for backtest validation
const validateAlertBacktest = async () => {
const response = await fetch('https://data.mixpanel.com/api/2.0/events', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
'Authorization': `Bearer ${process.env.MIXPANEL_API_TOKEN}`
},
body: JSON.stringify({
from_date: '2026-01-26',
to_date: '2026-03-26',
event: 'Power User Action',
where: "properties['Power User'] == true",
unit: 'day',
interval: 1
})
});
const data = await response.json();
console.log('Historical data:', data);
return data;
};
await validateAlertBacktest();
Review Alert Performance After 2 Weeks
Check your Alert History in Mixpanel. Count true positives (alerts that led to action), false positives (noise), and false negatives (you spotted issues manually). Adjust sensitivity up if noisy; down if you're missing issues.
// Track alert outcomes for analysis
const logAlertOutcome = (alertName, fired, actionTaken) => {
mixpanel.track('Alert Outcome', {
'alert_name': alertName,
'alert_fired': fired,
'action_taken': actionTaken,
'outcome_type': fired && actionTaken ? 'true_positive' :
fired && !actionTaken ? 'false_positive' :
'true_negative',
'evaluated_at': new Date().toISOString()
});
};
// Track a real incident
logAlertOutcome('Power User Activity Drop', true, true);
// Track a false positive
logAlertOutcome('Power User Activity Drop', true, false);
Common Pitfalls
- Setting alert thresholds too tight. Daily fluctuations of 10-20% are normal—aim for 30%+ anomalies before alerting.
- Using email as the only notification channel. Emails get lost in inboxes. Always configure Slack or Webhooks for high-priority alerts.
- Treating power user definitions as static. Your power users will evolve as your product grows—review the definition every quarter or after major features.
- Creating too many alerts. Teams ignore noisy alert systems. Start with one critical power user metric, then add more only after proving it drives action.
Wrapping Up
You've set up monitoring that protects your most valuable customers. When the alert fires, you'll have hours to respond instead of days. Your power users are the foundation of your business—treat their engagement like you'd treat a payment system outage. If you want to track this automatically across tools, Product Analyst can help.