How product analytics works

What you need to know and do to run product analytics

Updated over a week ago

A good tracking plan is the first step toward getting the most out of your data. It’s the backbone of every visualization/dashboard you’ll use to steer your company.

A good tracking plan has the following characteristics:

  • It is simple and informative, yet not exhaustive

  • It is KPI oriented

The first point refers to the fact that tracking every single action users can do in your app is counterproductive. To get started just limit yourself to the most important actions and the main workflows. The second point is partially related to the first one: just track what is useful for you to move your KPI. For example, if your goal is now to improve your onboarding flow - just go deep into that, don’t spend energy in other places.

To run your analytics, you’ll use the following API calls to build your tracking plan:

  1. Identify call: this call lets you tie a user to their actions and record traits about them. It includes a unique User ID and any optional traits you know about the user, like their email, name, and more.

  2. Group call (optional): this is how you associate an individual user with a group—be it a company, organization, account, project, or team. It includes a unique Group ID and any optional traits you know about the group, like the plan they are on, name, members etc.

  3. Track event: this is how you record any actions your users perform, along with any properties that describe the action.

How and when to use these calls

Identify users first

The first thing you should do is to identify your users. You’ll do this every time a user comes to your app, from the sign-up onwards.

The first identify call should be triggered just after the sign-up action. This will create a unique User ID associated with that particular user which will be used to “recognize” that particular user.

Every other time a user connects to your app make sure to fire an identify call. This will make sure that the user is known and that all the actions performed will be assigned to that particular User ID. If you don’t do this, you’ll not be able to know who did “X”.

In the identify call you can include some additional information which are known as traits.

As a general rule, you should attach as traits all the information that are useful to classify and segment your users. Here’s an in-depth article about traits.

Here's the documentation for the following sources: Segment, June SDK, Rudderstack

Identify companies (recommended for B2B if auto-generated companies don't fit your case)

If you’re selling to companies then probably you should be organizing users into companies (accounts, workspaces). Learn how and when it makes sense

This will enable you to check what’s the global behavior of a group of users. For example, you’ll be able to measure retention at an account level or the number of Active Companies in a given week.

Similar to what happens at a user level, you can add some additional information to the group in the form of traits. Typically information such as the technical setup, plan and number of users are recorded as group traits. If you wish to know more about traits, have a look at this article.


Here’s an in-depth article about how to do it and here the documentation for the following sources: Segment, June SDK, Rudderstack

Track events

Now that you know who your users and companies are, you should start to track their behavior.

Specific actions that users perform can be tracked using track events. Additional information about that particular action can be attached as an event property. Here’s an in-depth article about how and when to use event properties.

As a general rule, you should track only the actions around your main workflows and the ones that are part of the onboarding process.

Make sure to name the events in a human-readable way. Here’s how we do it.

To get started, try not to track more than 15-20 events and make sure that the most important ones are tracked in the back end. In this way, ad blockers will not prevent the actions to be tracked.

Here's the documentation for the following sources: Segment, June SDK, Rudderstack

If you're not really sure which source to use read this article

Here’s how our own tracking plan looks like

Identify calls and user traits

When people sign-up we ask them a couple of questions to get to know them better.

These information (role, industry, source of the sign up etc) are attached as traits in the identify call and then displayed in the user profile in June

Having these information (traits) allows us to run analytics on groups of users that have traits in common to answer questions like:

  • Are product managers more likely to retain compared to founders?

  • Where are most of my sign-ups coming from? Are Social medias bringing more traffic than word of mouth?

  • How many of my paying customers are from a B2B company? How many from a B2C?

After the first session, we keep sending identify calls every time someone comes to June to make sure that all the events performed are assigned to the right user.


Group calls and company traits

We’re selling product analytics to other companies so for us, company-level metrics are more important than user-level ones. When someone signs up we first check if the someone else with the same domain already signed up. If not we create a new workspace and relative group ID for that company.

As group traits, we attach all the details relative to the data setup and the billing deatils so that we can create different reports on the basis of these data points.

In this way we can answer questions like:

  • How many companies are over the MAU limit of 1K?

  • What’s the retention of companies that do not track groups compared to the ones that do?

  • Which paying companies opened less than 20 reports in the last 30 days?

  • Which are the most popular features among paying companies vs free companies?

Event tracking plan

General interactions

To capture the initials interactions with the product we track the following events:

  • signed_up: this event is triggered just after the first identify call

    • properties:

      • the source of the sign up (invited vs not invited) is passed as a property of this event

      • The authentication method (Google vs confirmation email) is passed as a property of this event

  • invited_a_temmate: this event is triggered when a user invites another one to its workspace

  • data_connected: this event is triggered when a user connects a data source to June

    • Property: the source is specified (Segment vs SDK vs Rudderstack vs Freshpaint) as a property. This information is also passed as a company trait by triggering a group call.

  • slack_connected: this event is triggered when a user connects Slack to June to receive updates and metrics. This information is also passed as a company trait by triggering a group call

  • hubspot_connected: this event is triggered when a user connects HubSpot to June to push traits and usage from June to HubSpot

  • plan_upgraded: this event is triggered when a user decides to upgrade the plan. This information is also passed as a company trait by triggering a group call.

    • property: the type of plan (Growth vs Scale) is specified as a property

Main workflow

The main value of June is around creating and opening reports about your main metrics.

For this reason, we track the following events:

  • report_created: triggered when a user creates a new report

    1. property: the type of report (Active Users, Retention etc) is passed as a property here

  • report_loaded: triggered when a user opens/reloads a report that was already created

    1. property: the type of report (Active Users, Retention etc) is passed as a property here

  • user_trait_filter_added: triggered when a user changes the setup of a report by adding some user traits filters

  • group_trait_filter_added: triggered when a user changes the setup of a report by adding some group traits filters

  • event_filter_added: triggered when a user changes the setup of a report by adding some user event filters

Feature usage

Even if creating and opening reports is the main workflow in June, we still track a couple of other events to see how users interact with the rest of the product. Here’s what we look at:

  • contacts_opened: event triggered when users open the user list page

  • groups_opened: event triggered when users open the company list page

  • events_opened: event triggered when users open the event list page

  • audiences_opened: event triggered when users open the audience list page

Did this answer your question?