How do I measure active users over time?

  • 16 March 2021
  • 7 replies

Badge +4
  • Community Champion
  • 15 replies

This seems like it should be simple — but I’m having some trouble getting it. 

A user on our platform can be either “active” or “inactive” (if, for example, their account expired, they were removed from their account by an administrator, etc). 

When a user is added to our platform, we add “status: active” to their profile. When they’re deleted/removed/etc their profile is updated so that “status: inactive”. 

The problem: how do I show the number of active users at some point in the past? I’d like to be able to graph historical event activity against historical active users on our platform. Is this even possible? I note that according to this article on the knowledge base “Because user profile properties only store the most recent value, cohorts involving user profile properties will use the current value for those properties (even if the value changed over time).”

Is there another way that I’m missing? 


Best answer by Muffaddal Qutbuddin 19 March 2021, 06:25

View original

7 replies

Userlevel 4
Badge +2

Hello @aaron ,

We can’t monitor users activities against historic user property values. Mixpanel only stores current user property value.

What you can do for future such analysis is add a user status as event super property. Doing so you can graph users activities as they change overtime and compare it with their current status.

So user properties holds their current status while event property keeps user history.

Badge +4

@Muffaddal Qutbuddin thanks for your suggestion. As I understand it, setting super properties would work if we were exclusively using Mixpanel’s JS libraries. However most of the reporting we do to Mixpanel comes through our server side (and much of our user interaction occurs on platforms that don’t support super properties). 

Is there another way you would suggest? 

Userlevel 4
Badge +2

@aaron  Super properties are just properties you send with every event, so you can easily mimic this behavior for server side event as well. Just send the user status with every server side event will do that trick. 


Badge +4

This is interesting, but I’m still having a hard time following. Could you give an example?

Userlevel 4
Badge +2

so it is very simple. Say you are sending 3 events from server side A, B and C. Just send the ‘user_status’ event property with all three events.


And since all the server side events (three in this case) have the user_status event property then it, by definition, becomes a super property sent for server side.




Badge +4

@Muffaddal Qutbuddin Adding a common property called `user_status` to each event makes sense, but how would I use that property to measure the proportion of behaviourally-active users (ie, users who are doing something on the platform) against all system-active users (users whose status is active simply because they haven’t been deleted or suspended)? Thanks for all your helpful suggestions. 

Here’s the kind of analysis I’d like to be able to pull: 


  • On January 1, there were 100 users with `user_status = active` on the system, and another 50 with `user_status = inactive`. Also on January 1, 25 users took some action on our platform. Therefore, on Jan 1, the total users on the platform (active and inactive) was 150, and the ratio of behaviourally-active to potentially-active users was 0.25 (25/100)
  • On February 1, there were 200 users with `user_status = active` on the system, and another 100 with `user_status = inactive`. Also on February 1, 50 users took some action on our platform. Therefore, on Feb 1, the total users on the platform (active and inactive) was 300, and the ratio of behaviourally-active to potentially-active users was 0.25 (50/200)


The goal is to be able to measure the number of potentially-active users and dedicate our customer success efforts toward them, and measure the performance of those efforts by controlling against the number of users constantly being added and removed from our platform. 

Userlevel 4
Badge +2

Let’s say we are assessing the users status against an event Z. Z is a general event triggered by all the users.

Now a breakdown of unique event z with user_status will get you active and inactive user counts. And simply divide them.


Now apply filter on event level and then get a trend line for all the months using formula. So select Z and other event. for the Z apply filter to select only active user. Then simple apply formula B/A to get the ratio for that month.