6 min read

How to Set Up Funnel Analysis in Mixpanel

Funnel analysis shows you where users drop off in critical workflows. If you can't see how many signups complete onboarding or how many trial users upgrade, you're flying blind. Mixpanel's Funnels report lets you track this in minutes.

Set Up Event Tracking for Funnel Steps

Before you can visualize a funnel, you need to track the events that make it up. Each step in your funnel is a separate event.

Track funnel step events with the Mixpanel SDK

Initialize Mixpanel in your app and call mixpanel.track() for each key event. Give your events clear, descriptive names like Signup Started, Payment Attempted, or Account Created.

javascript
import mixpanel from 'mixpanel-browser';
mixpanel.init('YOUR_PROJECT_TOKEN');

mixpanel.track('Signup Started', {
  source: 'homepage',
  plan_type: 'pro'
});

mixpanel.track('Email Verified', {
  verification_method: 'email',
  time_to_verify: 120
});

mixpanel.track('Payment Completed', {
  amount: 99,
  currency: 'USD',
  plan: 'pro'
});
Track distinct events for each funnel stage

Attach properties to segment your funnel

Include properties on every event so you can later segment your funnel by plan type, source, region, or any other dimension. Properties help you answer questions like 'Do enterprise users have a higher completion rate?'

javascript
mixpanel.track('Onboarding Completed', {
  user_id: user.id,
  plan_type: user.plan,
  days_to_complete: 3,
  num_logins: 5,
  source: 'api_integration',
  region: 'us'
});
Add context properties to every funnel event
Tip: Use consistent property names across all events. If you call it plan_type in one event and subscription_plan in another, Mixpanel treats them as separate properties and segmentation breaks.

Create Your Funnel in the Mixpanel Dashboard

Once events are flowing, go to the Mixpanel UI and build your first funnel.

Navigate to Funnels and add your first step

Log into Mixpanel, go to Analytics > Funnels. Click + New Funnel. In step 1, select the first event in your funnel (e.g., Signup Started) from the dropdown. Mixpanel auto-loads all tracked events.

javascript
// Your tracked events become available in Mixpanel immediately
// Example funnel configuration in the UI:
// Step 1: 'Signup Started' (1000 users)
// Step 2: 'Email Verified' (750 users, 75% conversion)
// Step 3: 'Payment Completed' (450 users, 60% conversion)
// Step 4: 'Onboarding Completed' (300 users, 67% conversion)

// Mixpanel calculates conversion rates between each step automatically
Each tracked event becomes available as a funnel step

Add conditions to filter funnel steps

Click + Add step and select your second event. You can optionally add conditions to refine which events count — for example, only count Payment Completed if the amount is greater than $0, or only count Onboarding Completed if num_logins is at least 1.

javascript
// In the Mixpanel UI, click "Add condition" on any step
// Example: Event 'Payment Completed' where amount >= 99
// This filters out test transactions under $99

// Track properties that let you apply conditions:
mixpanel.track('Payment Completed', {
  amount: 99.00,
  is_test_transaction: false,
  payment_method: 'card'
});
Conditions filter out unwanted events from your funnel

Segment your funnel to understand drop-off

After building the funnel, click Segment by and choose a property. Mixpanel will break out conversion rates by that dimension. For example, segment by plan_type to see if Pro users have higher onboarding completion than Free users.

javascript
// Include properties you want to segment on later
mixpanel.track('Signup Started', {
  plan_type: 'pro',            // Segment by plan
  source: 'paid_search',       // Or by traffic source
  region: 'us',                // Or by region
  company_size: 'enterprise'   // Or by company size
});

// In the UI: click "Segment by plan_type" to see conversion by plan
Include dimensions for later segmentation
Watch out: If you add step 2 before Mixpanel sees at least one user complete both step 1 and step 2, the funnel will show 0% conversion. Wait a few minutes (or hours for low traffic) before drawing conclusions.

Use Funnel Results to Drive Decisions

Once your funnel is live, use the data to identify bottlenecks and run experiments.

Identify where users drop off

Look at the funnel chart. If 90% complete step 1 but only 30% complete step 2, that step is your bottleneck. Drill into that step with additional properties to understand why — is the form too long? Is the verification email going to spam?

javascript
// Track failure reasons to debug bottlenecks
mixpanel.track('Email Verification Failed', {
  reason: 'invalid_email',
  user_id: user.id,
  email_provider: 'gmail',
  attempt_number: 1
});

mixpanel.track('Email Verification Skipped', {
  reason: 'user_clicked_skip',
  email_provider: 'yahoo'
});
Track failure reasons to diagnose step drop-off

Test variations and measure impact

Run A/B tests on bottleneck steps. Tag events with experiment metadata so you can segment your funnel by variant. Compare conversion rates between control and treatment groups.

javascript
// Tag events with experiment info for later segmentation
mixpanel.track('Signup Started', {
  experiment: 'shorter_form_v2',
  variant: 'variant_a',
  form_field_count: 5,
  expected_time: '2 minutes'
});

// Later, segment the funnel by 'variant' to compare
// variant_a (5 fields) vs control (10 fields)
Tag events with experiment details for A/B testing

Common Pitfalls

  • Tracking events at different times — if you track 'Signup Started' on the frontend but 'Email Verified' on the backend, clock skew can cause the funnel to misfire. Track all funnel events as close in time as possible to when they actually happen.
  • Forgetting to set user identity — use mixpanel.identify(user_id) before tracking events, or funnel steps won't connect to the same user. Without consistent user tracking, Mixpanel shows 0% conversion.
  • Using ambiguous event names like 'clicked' or 'loaded' — name events after what actually happened ('Checkout Started', not 'Button Click'). Ambiguous names make funnels hard to interpret and impossible to debug.
  • Adding too many steps at once — a 10-step funnel is hard to read and often includes journeys that aren't actual workflows. Start with 3–5 core steps, then add more if needed.

Wrapping Up

You now have a working funnel that shows where users convert and where they drop off. Use these insights to prioritize optimization — fix your biggest bottleneck first. If you want to track this automatically across 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