6 min read

How to Track Time To Convert in Mixpanel

Knowing how long it takes users to convert is critical for understanding your funnel velocity and product stickiness. Mixpanel doesn't automatically calculate this for you—you need to instrument your events properly and then use its analysis tools to extract the time delta between signup and conversion.

Instrument Your Signup and Conversion Events

The foundation of tracking time-to-convert is firing two distinct events: your entry point (usually a signup or first action) and your conversion (purchase, subscription, or whatever defines success for your product).

Fire the Signup Event with User Identification

When a user signs up, call mixpanel.identify() to set the user context, then mixpanel.track() to log the Signup event. Mixpanel automatically timestamps every event when it's received, so you don't need to manually add a timestamp. The key is including a stable user identifier so you can match this signup to the same user's later conversion event.

javascript
mixpanel.identify(userId);
mixpanel.track('Signup', {
  'email': userEmail,
  'signup_source': 'landing_page',
  'plan_type': 'free',
  'region': 'US'
});
Call identify() to set the user context, then track() to log the event

Fire the Conversion Event

Whenever a user converts (upgrades to paid, makes a purchase, etc.), fire a separate Purchase or Converted event. Include business context like revenue, plan tier, and conversion type so you can later segment your time-to-convert analysis by these dimensions. This event will also be automatically timestamped.

javascript
mixpanel.identify(userId);
mixpanel.track('Purchase', {
  'revenue': 99.99,
  'plan': 'professional',
  'conversion_source': 'in_app_upgrade',
  'days_since_signup': 14
});
Track revenue and plan details so you can segment conversions later

Set User Properties at Signup

Use mixpanel.people.set() to store persistent user properties. These become available as segmentation dimensions in Mixpanel's analysis tools, letting you later ask 'What's the time-to-convert for users from different sources?' Set these properties at signup, not with every event.

javascript
mixpanel.people.set({
  'first_name': userFirstName,
  'email': userEmail,
  'signup_date': new Date().toISOString(),
  'trial_eligible': true,
  'utm_source': urlParams.get('utm_source')
});
User properties persist and become segmentation filters in Insights
Tip: Always call mixpanel.identify(userId) before tracking events if you want to match a user across sessions. Without identify(), Mixpanel can't reliably connect signup → conversion for the same user.

Measure Time-to-Convert with Mixpanel Funnels

Mixpanel's Funnel analysis calculates time deltas automatically. You'll see the median time between your signup and conversion events, segmented by any user property you tracked.

Create a Funnel in Insights

Go to Insights > Funnels and add Signup as step 1 and Purchase as step 2. Set the funnel window to at least 90 days to capture your full conversion lifecycle. Mixpanel will display the conversion rate and the median/average time between steps automatically.

javascript
// In Mixpanel UI: Insights > Funnels
// Step 1: Signup
// Step 2: Purchase
// Funnel window: 90 days
// Result: median time-to-convert calculated automatically
Funnel analysis in Mixpanel shows time-to-convert without custom calculations

Segment by Signup Source to Spot Velocity Differences

In the Funnel view, click Segmentation and choose signup_source. Now you'll see separate time-to-convert metrics for organic vs. paid vs. referral signups. This reveals whether your acquisition channel correlates with conversion speed—high-intent channels typically convert faster.

javascript
// Already tracked in your signup event:
mixpanel.track('Signup', {
  'signup_source': 'organic'  // or 'paid', 'referral', etc.
});

// In Funnel UI: Segmentation → signup_source
// Mixpanel breaks down time-to-convert by each source
Segment funnels by any property you tracked at signup

Add Filters to Isolate Specific Cohorts

Use Filters in the Funnel view to narrow analysis to specific user groups. Filter to only trial-eligible users, or only users from a specific region. This helps you answer questions like 'Do trial users convert faster than freemium users?' Filters + Segmentation together give you detailed velocity breakdowns.

javascript
// Track user properties to enable filtering:
mixpanel.people.set({
  'plan_type': 'trial',  // or 'freemium', 'enterprise'
  'region': 'US'
});

// In Funnel UI: Add Filter → plan_type = trial
// View only trial users' time-to-convert
Filters let you isolate behavior to specific user cohorts
Watch out: Mixpanel's Funnel only includes users who complete all steps. If a user signs up but never converts, they don't appear in the second step. This is correct behavior—they haven't converted yet. To track churn or abandonment separately, use Retention analysis.

Export Raw Data for Custom Analysis

If you need individual user-level time-to-convert values (not just medians), export funnel data or use Mixpanel's Data Export API to pull raw events.

Export Funnel Data as CSV

In your Funnel view, click the Export button to download results as CSV. The export includes user-level data and event timestamps, so you can calculate exact time deltas in a spreadsheet or warehouse for deeper analysis.

javascript
// Export from Mixpanel UI:
// Insights > Funnels > [Your Funnel] > Export (top-right)
// CSV includes: user_id, timestamp per step, properties

// In your warehouse:
// SELECT user_id,
//        (purchase_timestamp - signup_timestamp) AS time_ms
// FROM exported_data
Exported CSV can be re-imported into spreadsheets or warehouses

Use Data Export API for Programmatic Access

For recurring analysis, use Mixpanel's Data Export API to fetch raw event data. Query all Signup and Purchase events for a date range, parse by user_id, and calculate time deltas yourself. This scales better than manual exports for large datasets.

javascript
// Fetch events using Data Export API
const url = 'https://data.mixpanel.com/api/2.0/export';
const params = {
  'from_date': '2024-01-01',
  'to_date': '2024-12-31',
  'event': ['Signup', 'Purchase'],
  'key': YOUR_SERVICE_ACCOUNT_TOKEN
};

// Returns NDJSON (newline-delimited JSON)
// Parse and match by user_id to calculate time deltas
Data Export API requires a service account token with read permissions
Tip: If you export regularly, consider Mixpanel's Data Warehouse integration (enterprise plans) to query events directly in your own warehouse without manual exports.

Common Pitfalls

  • Forgetting to call mixpanel.identify() before tracking—without a consistent user ID, Mixpanel can't match signup → conversion for the same user
  • Setting a too-short funnel window—if your sales cycle is 60+ days but you set the window to 30 days, you'll miss conversions and underestimate velocity
  • Treating conversion as a property instead of a separate event—Mixpanel timestamps events, not properties, so you need distinct events to calculate time deltas
  • Not segmenting your funnel—you'll miss the insight that organic users convert 3x faster than paid ad users, or that conversion velocity differs by region or plan type

Wrapping Up

You now have time-to-convert tracked and measurable in Mixpanel. Use Funnels to monitor median velocity, segment by signup source and user properties to spot performance differences across cohorts, and export raw data for deeper analysis in your warehouse. If you want to automate this tracking and correlation across your entire toolchain, Product Analyst can help.

Track these metrics automatically

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

Try Product Analyst — Free