6 min read

How to Set Up Signal Detection in Mixpanel

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.

javascript
// 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'
});
Consistent event tracking is all the SDK needs to do. Detection works in the background.

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.

javascript
// 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'
});
Stable, predictable tracking during the learning phase gives Detection the cleanest baseline.
Watch out: Signal Detection will struggle if you have bursty event patterns (spikes every Friday, drops on holidays). It takes 4–6 weeks to learn seasonal behavior. Suppress those expected windows once patterns emerge.

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.

javascript
// 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`));
Audit signal history to validate that sensitivity settings match your needs.

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.

javascript
// 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');
};
Handle webhook payloads server-side to trigger runbooks or escalation workflows.
Tip: Slack alerts keep your team in the loop during incidents. Email works better for detailed post-mortems. Use both: Slack for speed, email for documentation.

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.

javascript
// 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 })));
Pull signal history to identify patterns and validate detection accuracy.

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.

javascript
// 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'
});
Tag events with suppression metadata to train Detection to ignore expected spikes.
Watch out: Over-suppressing defeats the purpose. If 70% of your signals are suppressed, you've lost visibility. Instead, fix the root cause—often it's noisy event tracking or weak baselines that need attention.

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.

Track these metrics automatically

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

Try Product Analyst — Free