Time to convert measures how long it takes a user to move from an initial action to a conversion event. In Mixpanel, this typically means tracking the elapsed time between a trigger event—like a signup or free trial start—and a desired outcome like a paid upgrade or feature activation. Understanding this metric helps you identify friction in your conversion funnel and spot where users get stuck. It's the difference between knowing your conversion rate and knowing how long users actually spend before they buy.
What Time To Convert Measures
Time to convert is straightforward: it's the clock time between when a user takes a starting action and when they complete your target conversion. Unlike session duration or time on page, time-to-convert spans days or weeks, capturing the full journey from first interest to purchase.
Define Your Start and End Events
Pick your starting event (e.g., sign_up, free_trial_started, or onboarding_completed) and your conversion event (e.g., subscription_purchased or feature_activated). Both events need to be tracked in Mixpanel with accurate timestamps. Mixpanel automatically captures event timing, so as long as you're sending these events consistently, you have the raw data you need to calculate conversion speed.
// Track the starting event
mixpanel.track('sign_up', {
'email': '[email protected]',
'source': 'organic',
'plan_interest': 'pro'
});
// Track the conversion event later (could be days later)
mixpanel.track('subscription_purchased', {
'plan': 'pro',
'amount': 99,
'upgrade_source': 'email_campaign'
});Use Mixpanel's Funnels Report
In the Mixpanel dashboard, navigate to Funnels and create a new funnel with your start event as step 1 and your conversion event as step 2. Mixpanel calculates the median and mean time between steps automatically. The funnel report shows not only how many users converted, but also how long the conversion took on average. This is where you'll see time-to-convert expressed in days, hours, or seconds.
// Initialize Mixpanel with your token
mixpanel.init('YOUR_PROJECT_TOKEN');
// Track step 1: Start of funnel
mixpanel.track('sign_up', {
'distinct_id': user_id,
'funnel_id': 'trial_to_paid',
'user_segment': 'free_tier',
'source': 'landing_page'
});
// Track step 2: Conversion (Mixpanel auto-timestamps both)
mixpanel.track('subscription_purchased', {
'distinct_id': user_id,
'funnel_id': 'trial_to_paid',
'conversion_source': 'in_app_upgrade'
});Calculating Time To Convert with Event Properties
For more granular analysis, you can store conversion-related properties directly on your events and use Mixpanel's segmentation tools to slice time-to-convert by user attributes, channels, or plans.
Store Conversion Timing as Event Properties
When a user converts, calculate the time difference between their signup and conversion events, then include it as a property on the conversion event. This lets you filter and segment by conversion speed in Mixpanel's reports without needing external tools.
// Calculate time-to-convert on your backend
const signupTimestamp = user.created_at; // Unix timestamp from DB
const conversionTimestamp = new Date().getTime();
const secondsToConvert = (conversionTimestamp - signupTimestamp) / 1000;
const daysToConvert = Math.floor(secondsToConvert / 86400);
// Track the conversion with timing data
mixpanel.track('subscription_purchased', {
'distinct_id': user_id,
'plan': 'pro',
'amount': 99,
'seconds_to_convert': secondsToConvert,
'days_to_convert': daysToConvert,
'conversion_speed': daysToConvert <= 1 ? 'same_day' : 'multi_day'
});Segment By Conversion Speed in Mixpanel
Once you have conversion speed as an event property, use Mixpanel's Segmentation or Retention reports to compare user cohorts. For example, segment by conversion_speed to see if same-day converters have higher lifetime value than multi-day converters, or check whether they churn at different rates.
// Store user-level conversion data
mixpanel.people.set({
'distinct_id': user_id,
'last_conversion_speed': daysToConvert,
'is_quick_converter': daysToConvert <= 1,
'signup_date': new Date().toISOString()
});
// Track cumulative user metrics
mixpanel.people.increment('total_purchases', 1);
mixpanel.people.set('lifetime_value', userLTV);Common Patterns and Gotchas
Time-to-convert analysis reveals insights about your funnel, but there are a few traps to watch for.
Remember: Funnels Only Show Completers
Mixpanel's Funnels report only includes users who completed all steps. Users who signed up but never converted don't appear in the time-to-convert calculation. This is why funnel conversion rates look so different from your actual user base. If you want to understand why users didn't convert, you'll need to segment non-converting users separately.
// Track non-conversion signals to understand drop-off
mixpanel.track('free_trial_ended', {
'distinct_id': user_id,
'trial_days': 14,
'converted': false,
'last_engagement': 'email_opened'
});
// Also track when users abandon signup
mixpanel.track('signup_abandoned', {
'distinct_id': user_id,
'stage': 'payment_info',
'reason': 'payment_failed'
});Common Pitfalls
- Ignoring timezone differences—if your start event is timestamped in EST and your conversion event in UTC, your time-to-convert will be off. Use UTC consistently.
- Mixing funnel time-to-convert with session-based metrics—time-to-convert spans days or weeks, not a single session. Don't confuse it with average session duration.
- Relying only on Mixpanel funnels for time-to-convert—funnels only show users who completed both steps. You're blind to users who dropped out before conversion.
- Forgetting that the time-to-convert median is more useful than the mean—if a few users take 6 months to convert, the mean will be misleading. Always check the median.
Wrapping Up
Time to convert is a vital metric for understanding how your funnel operates. By tracking start and conversion events in Mixpanel and analyzing time between them, you can spot friction points and optimize your onboarding. If you want to track conversion speed automatically across multiple tools and attribution models, Product Analyst can help.