Signal Detection watches your metrics for unexpected drops or spikes, alerting you when something breaks. Without it, you discover a 40% dip in signups two days later during a dashboard check. With it enabled, you catch the problem minutes after it happens. Here's how to get it running.
Enable Signal Detection on Your Reports
Signal Detection is built into Mixpanel reports—no separate tool needed, just flip a switch.
Open a Report and Activate Detection
Go to Reports in the left sidebar and open any report you want to monitor (events, funnels, retention). Look for the Signal Detection toggle in the top-right corner of the chart. Switch it on. Mixpanel immediately starts learning your metric's normal behavior.
// Signal Detection runs server-side on Mixpanel's infrastructure
// Your tracked events feed into it automatically—no SDK changes needed
mixpanel.track('purchase_completed', {
'amount': 99.99,
'plan': 'annual',
'source': 'homepage'
});Wait for the Baseline Period
Signal Detection needs 14 days of historical data to establish normal behavior. During this window, the system is silent—learning but not alerting. After day 14, it begins flagging anomalies. Check back in two weeks to see your first signals.
// Configure the SDK for reliable baseline data collection
mixpanel.set_config({
'batch_size': 20,
'batch_flush_interval': 60000, // 60 seconds
'track_pageview': true
});
// Send events consistently during baseline
mixpanel.track('feature_used', {
'feature_name': 'export_csv',
'user_tier': 'pro'
});Configure Sensitivity and Alerts
Once detection is learning, tune it to match your team's tolerance for false alarms.
Adjust Detection Sensitivity
Click the Signal Detection settings icon. You'll see a sensitivity slider: Conservative flags 30%+ deviations, Aggressive flags 15%+ changes. Start with Conservative and tighten it after 4 weeks of observing alert quality. Too aggressive means your team ignores alerts. Too conservative means you miss real issues.
// Retrieve signals via the Data Export API to audit detection quality
const fetchSignals = async (fromDate, toDate) => {
const response = await fetch(
'https://mixpanel.com/api/2.0/export?' +
`from_date=${fromDate}&to_date=${toDate}`,
{
headers: {
'Authorization': 'Bearer YOUR_SERVICE_ACCOUNT_TOKEN'
}
}
);
return response.json();
};
// Log high-severity signals for team review
const signals = await fetchSignals('2024-02-01', '2024-02-28');
signals
.filter(s => s.severity === 'critical')
.forEach(s => console.log(`${s.metric}: ${s.change_percent}% deviation`));Connect Alert Destinations
Under Alert Settings, click Add Destination and choose Slack, email, or webhook. For Slack, click Connect and authorize Mixpanel to post to your workspace. For webhooks, paste your endpoint URL—Mixpanel will POST JSON payloads whenever an anomaly is detected.
// Example webhook handler for receiving signal alerts
const handleMixpanelSignal = (req, res) => {
const { metric_name, metric_value, baseline_value, deviation_percent, timestamp } = req.body;
console.log(`Signal: ${metric_name}`);
console.log(`Value: ${metric_value}, Baseline: ${baseline_value}`);
console.log(`Deviation: ${deviation_percent}%`);
// Custom routing: escalate if critical
if (deviation_percent > 50) {
notifyOncall(metric_name, deviation_percent);
} else {
postToSlack('#metrics', `${metric_name} anomaly detected: ${deviation_percent}%`);
}
res.status(200).send('OK');
};Review Signals and Suppress False Positives
Not every alert is actionable. Spend time filtering noise so alerts actually drive action.
Check the Signals Timeline
Go back to your report and click View All Signals or Anomalies. You'll see a timeline of flagged events with severity levels. Click any signal to see the exact time, metric value, and baseline comparison. Cross-reference with your deployment calendar, marketing pushes, or infrastructure changes. Most false positives have a root cause—find it.
// Query signal history and filter by date and severity
const getSignalsByDateRange = async (reportId, startDate, endDate) => {
const params = new URLSearchParams({
'from_date': startDate,
'to_date': endDate,
'min_severity': 'medium'
});
const response = await fetch(
`https://mixpanel.com/api/2.0/reports/${reportId}/signals?${params}`,
{
headers: {
'Authorization': 'Bearer YOUR_API_TOKEN'
}
}
);
return response.json();
};
// Review signals for pattern
const recentSignals = await getSignalsByDateRange('report_123', '2024-02-01', '2024-02-28');
console.table(recentSignals.map(s => ({ metric: s.metric, severity: s.severity, date: s.timestamp })));Suppress Expected Deviations
For planned events (major deploys, marketing campaigns, maintenance windows), click Suppress Anomaly on the signal. Specify the date range—Mixpanel won't flag anomalies during that period. For recurring events (monthly sales, weekly releases), set suppression rules so you don't muffle real issues.
// Mark events during known metric shifts to help train Signal Detection
mixpanel.track('deployment_started', {
'version': '3.2.1',
'environment': 'production',
'expected_metric_impact': true,
'suppression_window_until': '2024-02-15T16:00:00Z'
});
// Signal Detection will learn to expect deviations during these windows
mixpanel.track('marketing_campaign_launched', {
'campaign_id': 'summer_promo_2024',
'expected_volume_spike': '40%',
'suppression_window_until': '2024-08-31'
});Common Pitfalls
- Starting detection with fewer than 14 days of data: The baseline window is non-negotiable. Incomplete baselines produce false alerts. Always wait the full learning period before expecting reliable signals.
- Noisy or inconsistent event tracking: If event names, properties, or volume are erratic, Signal Detection can't establish clean baselines. Audit and stabilize your event schema first.
- Monitoring low-volume events: Detection needs sufficient data density to work. A metric that fires 3 times per week won't produce useful anomaly detection. Focus on high-frequency metrics like DAU, transactions, or login events.
- Suppressing too aggressively: Each suppression teaches Detection to ignore similar deviations. Only suppress truly expected, one-time events. Recurring patterns should be learned, not suppressed indefinitely.
Wrapping Up
Signal Detection transforms Mixpanel from a dashboard you check to an early-warning system that checks itself. Once baseline learning completes, your team shifts from manual monitoring to reactive alerting—catching problems in minutes instead of days. If you want to detect anomalies automatically across all your tools, Product Analyst can help.