SaaS analytics can get complicated fast—especially when it comes to tracking revenue. If you’re running a subscription business and want to make sense of your numbers using Mixpanel, this guide is for you. I’ll walk you through what you actually need to set up, what to ignore, and a few traps to avoid. No buzzwords, just the steps that’ll get you real, actionable data.
Why bother tracking subscription revenue in Mixpanel?
You probably already have a billing platform (like Stripe or Chargebee). So why bother tracking revenue in Mixpanel too? Simple: your billing system tells you what happened, but Mixpanel can tell you why. By tying revenue events to user actions, you can answer questions like:
- Which features drive upgrades or churn?
- What behaviors predict a high-LTV customer?
- Where are users dropping off before converting?
If you rely only on your billing dashboard, you’re flying blind to what’s actually driving (or tanking) your subscription business. But don’t overthink it: you don’t need to replicate your entire accounting system in Mixpanel. Just track enough to connect dollars to user behavior.
Step 1: Decide what revenue metrics matter (and ignore the rest)
Before you start wiring up events, figure out what’s worth tracking. Here’s what actually matters for most SaaS companies:
- New subscriptions: Who started paying, and for what?
- Upgrades/downgrades: Who changed their plan?
- Cancellations/churn: Who stopped paying?
- Recurring revenue: How much are you making per month/quarter/year?
- One-off charges: If you have add-ons, track those too.
Ignore the “vanity metrics” (like total signups or pageviews) unless you have a rock-solid reason. Focus on what ties directly to revenue.
Pro tip: Don’t bother tracking every micro-event (like each invoice or payment retry). You’ll drown in noise and make analysis harder. Stick to the big moments.
Step 2: Map your subscription events to Mixpanel
Mixpanel tracks events (stuff users do) and properties (details about those events). To track revenue, you need to decide:
- Event names: Be specific and consistent (e.g.,
Subscription Started
,Subscription Upgraded
,Subscription Cancelled
). -
Event properties: Attach the right details to each event. The most useful are:
amount
: The revenue from this event (in cents or dollars—pick one and stick with it)currency
: Always include this, even if you think you’ll only ever use USDplan_name
: The subscription tier or planbilling_period
: Monthly, yearly, etc.user_id
oraccount_id
: To tie revenue back to a person or companysubscription_id
: If your billing system generates one
Don’t get too clever with event names or properties. The goal: make it obvious what each event means a year from now, when everyone’s forgotten the details.
Example event mapping
| Event Name | Properties | |----------------------------|-----------------------------------------------| | Subscription Started | amount, currency, plan_name, billing_period, user_id, subscription_id | | Subscription Upgraded | amount, currency, old_plan, new_plan, user_id, subscription_id | | Subscription Cancelled | user_id, subscription_id, cancel_reason | | One-off Charge | amount, currency, description, user_id |
Step 3: Connect your billing system to Mixpanel
This is where most teams get stuck. Here are your real options:
Option 1: Use a billing integration
Some billing platforms (like Stripe or Paddle) have plug-and-play Mixpanel integrations. If yours does, use it—but check what data actually comes through. Many of these only send basic payment events, and miss plan changes or cancellations. If you try this route:
- Test with real events. Don’t assume the integration covers all your use cases.
- Check if you can customize what gets sent to Mixpanel.
- Watch out for duplicate events (especially if you’re also tracking revenue elsewhere).
Option 2: Send events from your backend
This is the most reliable way, but requires dev work. When your billing system gets a webhook (e.g., “invoice paid,” “subscription cancelled”), have your backend send the corresponding Mixpanel event with all the properties you mapped out. This keeps your analytics tied to the source of truth.
Key advice: - Don’t send revenue events from the frontend—it’s insecure and unreliable. - Always deduplicate events. Billing systems love to retry webhooks. - Log what you send, so you can debug when numbers don’t match up.
Option 3: Manual CSV imports (for historical data)
If you want to backfill old revenue data, you can import CSVs into Mixpanel. But don’t try to run this as a regular process. It’s a pain and easy to mess up.
Step 4: Set up Mixpanel to report on real SaaS revenue metrics
Once events are flowing, you need to actually use Mixpanel to answer questions. Here’s how:
Tracking MRR (Monthly Recurring Revenue)
Mixpanel doesn’t have a built-in “MRR” metric, so you’ll need to piece it together:
- Filter for
Subscription Started
andSubscription Upgraded
events. - Use the
amount
property. - Normalize all amounts to monthly. If someone pays $120/year, count that as $10/month.
- Ignore one-off charges (unless you want to track Total Revenue instead of MRR).
You can use Mixpanel’s formulas or breakdowns to sum up revenue per month.
Pro tip: Don’t stress about getting MRR to the penny in Mixpanel. Use your billing system for the official numbers—Mixpanel is for trends and patterns.
Tracking churn and expansion
- Use
Subscription Cancelled
events to measure churn. Plot them over time, and break down by plan or cohort. - Use upgrade/downgrade events to see expansion or contraction revenue.
Cohort analysis: Who sticks around?
Mixpanel shines at cohort analysis. Group users by the month they started paying, and see how their revenue changes over time. This is gold for spotting retention issues or figuring out which customers are your best bets.
Funnels: What drives upgrades?
Set up funnels from trial → paid → upgraded. Mixpanel lets you break down funnels by user property (like company size or signup source) to see what’s actually converting.
Step 5: Keep your data clean (or it’ll all fall apart)
Analytics is only as good as your data hygiene. Here’s what to watch out for:
- Consistent event names: Don’t change
Subscription Started
toSub Started
halfway through the year. - Accurate properties: If your
amount
field sometimes includes tax and sometimes doesn’t, your numbers will be useless. - Deduplication: Billing systems retry webhooks. Make sure you’re not double-counting revenue.
- Currency handling: If you operate globally, always record the currency. Don’t mix dollars, euros, and yen in the same bucket.
What not to worry about: Don’t try to track every invoice or payment failure unless you’re running a billing ops team. For most SaaS companies, big-picture revenue events are enough.
Step 6: Actually use the data (and don’t obsess over perfection)
Set up a handful of reports that answer key questions:
- What’s my MRR, and how is it trending?
- Where are users upgrading/downgrading?
- What features or behaviors predict retention?
- Where are people falling out of the funnel?
Share these with your team, but don’t let dashboards become a substitute for talking to customers. Use Mixpanel to spot patterns, not as the single source of financial truth.
The honest take: What works, what doesn’t, what to skip
- Works: Tracking major revenue events tied to user actions. Using Mixpanel for trends, not accounting.
- Doesn’t work: Trying to mirror your entire billing ledger in Mixpanel. Getting lost in minor events. Obsessing over reconciling every cent.
- Skip: Tracking every refund, payment failure, or dunning email. Unless you’re at huge scale, the value isn’t there.
Wrapping up: Start simple, iterate as you go
Don’t let perfect be the enemy of good. Start by tracking just new subscriptions, upgrades, and cancellations with the right properties. Once you have clean, useful data flowing into Mixpanel, you can always add more detail later. Most teams overcomplicate this stuff and end up trusting their analytics less, not more.
Keep it simple, check your numbers against your billing system now and then, and make sure your events actually help you answer real questions. That’s how you get value out of Mixpanel without drowning in noise.