Conversion rate is everything — but you can't optimize what you can't see. Mixpanel's Funnel tool lets you visualize exactly where users drop off between any two events. Whether you're measuring signups, feature adoption, or purchases, this guide shows you how to set it up and interpret the data.
Setting up Events to Measure Conversions
Before you can visualize a conversion rate, you need two events: a starting point and a goal. Track both using Mixpanel's JavaScript SDK.
Track your starting event
When a user begins the conversion journey (e.g., landing on a signup page), fire a Start Signup event. Use mixpanel.track() with clear properties so you can segment later.
mixpanel.track('Start Signup', {
'signup_page': 'homepage',
'referrer': document.referrer,
'user_segment': 'free_trial'
});Track your conversion event
Fire a second event when the user completes the goal. Include the same identifying properties so Mixpanel can connect the funnel steps.
mixpanel.track('Signup Completed', {
'signup_page': 'homepage',
'referrer': document.referrer,
'user_segment': 'free_trial',
'signup_duration_seconds': 240
});Identify your users consistently
If you want to track individual user funnels, call mixpanel.identify() early. This ensures Mixpanel associates both events with the same person.
mixpanel.identify('user_' + userId);
mixpanel.people.set({
'email': userEmail,
'plan': 'trial',
'signup_date': new Date()
});Start Signup and start signup won't match.Building Your Funnel in Mixpanel
Once events flow in, create a Funnel analysis to see your conversion rate and drop-off points.
Open the Funnel analysis tool
In Mixpanel, navigate to Reports > Funnel. Select your time range (e.g., last 7 days) from the date picker.
// Query funnel data via Mixpanel Data API
fetch('https://data.mixpanel.com/api/2.0/funnels', {
'method': 'POST',
'headers': {
'Authorization': 'Bearer ' + SERVICE_ACCOUNT_TOKEN,
'Content-Type': 'application/json'
},
'body': JSON.stringify({
'funnel_events': ['Start Signup', 'Signup Completed'],
'funnel_window_days': 7,
'interval': 1
})
}).then(r => r.json())
.then(data => console.log('Funnel data:', data));Add your funnel steps
Click Add Step and select your starting event (Start Signup). Then add the conversion event (Signup Completed). Mixpanel calculates drop-off and conversion rate automatically.
// Calculate conversion rate from funnel response
const conversionRate = (funnelData['Signup Completed'] / funnelData['Start Signup']) * 100;
console.log('Conversion rate: ' + conversionRate.toFixed(2) + '%');
console.log('Drop-off: ' + (100 - conversionRate).toFixed(2) + '%');Segment your funnel
Click By Group or By Property to break down conversion by device, traffic source, or user segment. This reveals where you're converting well and where you're losing users.
// Include segmentation in your tracking
mixpanel.track('Start Signup', {
'device': 'mobile', // Later filter by this
'source': 'organic', // Or this
'user_segment': 'enterprise'
});
// Then use Mixpanel UI "By Property" filter to segment funnel by 'device'Interpreting Trends and Setting Alerts
A single snapshot tells you where you stand today. Trends tell you if you're improving.
Compare time periods
Use the date picker to compare this week's conversion to last week's. Look for sudden drops (bugs or changes) or steady climbs (optimization working).
// Compare conversion across two weeks
const getFunnelForPeriod = (fromDate, toDate) => {
return fetch(`https://data.mixpanel.com/api/2.0/funnels?from_date=${fromDate}&to_date=${toDate}`, {
'headers': { 'Authorization': 'Bearer ' + TOKEN }
}).then(r => r.json());
};
Promise.all([
getFunnelForPeriod('2026-03-19', '2026-03-26'),
getFunnelForPeriod('2026-03-12', '2026-03-19')
]).then(([thisWeek, lastWeek]) => {
const thisWeekRate = (thisWeek['Signup Completed'] / thisWeek['Start Signup']) * 100;
const lastWeekRate = (lastWeek['Signup Completed'] / lastWeek['Start Signup']) * 100;
console.log('Change: ' + (thisWeekRate - lastWeekRate).toFixed(2) + '%');
});Identify drop-off bottlenecks
Mixpanel shows you not just the final conversion rate, but drop-off at each step. If Start Signup → Email Verified loses 40% of users, that's your biggest friction point. Focus optimization there.
// Add more granular funnel steps
mixpanel.track('Email Verified', {
'verification_method': 'link_click',
'time_to_verify_hours': 0.5
});
mixpanel.track('Onboarding Started', {
'onboarding_step': 'select_company_size'
});
// Funnel: Start Signup → Email Verified → Onboarding Started → Signup CompletedCommon Pitfalls
- Not tracking both events with the same user ID — Mixpanel can't connect steps if it doesn't know they're the same person.
- Using inconsistent event names —
Start Signupwon't matchstart signup. Case and spacing matter. - Expecting retroactive conversions — Mixpanel only counts events after the funnel is created. Historical data won't backfill.
- Too many funnel steps — more than 5–6 steps dilutes data and makes actionable insights harder to extract.
Wrapping Up
You now have a live window into your conversion funnel. Watch it weekly, segment by traffic source and user type, and catch drops before they compound. If you want to visualize conversion metrics across all your tools in one place, Product Analyst can help.