JavaScript API Integration

Installing the library

To start tracking with the Mixpanel JavaScript library, just paste the following code into the page you want to track inside the <head> and </head> tags. Make sure to change 'YOUR_TOKEN' to your project token. You can find your project token in the settings dialog in the Mixpanel web application.

The snippet will load our library onto the page asynchronously to keep your website loading quickly even if placed in the <head> of the page.

The snippet provides a global variable named mixpanel that you can use to send data to the Mixpanel API.

Sending events

Once you have the snippet in your page, you can track an event by calling mixpanel.track with the event name and properties.

// Send a "Clicked Ad" event to Mixpanel
// with a property "Banner Color"
mixpanel.track(
    "Clicked Ad",
    { "Banner Color": "Blue" }
);

Tracking website links

When tracking link clicks with mixpanel.track the page can change before the event is successfully sent, leading to inaccurate results.

To make this easier, we've built something called mixpanel.track_links. This function will allow you to bind an event to a link click with much greater accuracy.

Here's how it works:

<div id="nav">
    <a href="/">Home</a>
    <a href="/about">About</a>
    <a href="/pricing">Pricing</a>
</div>
<script type="text/javascript">
    mixpanel.track_links("#nav", "click nav link", {
        "referrer": document.referrer
    });
</script>

This will send a "click nav link" event (with a 'referrer' property) each time a user clicks on a navigation link. It's important to note that the links matched by the CSS selector must exist on the page at the time the mixpanel.track_links call is made, or it will not bind correctly.

Other tracking methods

There are other less common ways to send data to Mixpanel. To learn more, please follow the links to the full API documentation.

Super properties

It's very common to have certain properties that you want to include with each event you send. Generally, these are things you know about the user rather than about a specific event - for example, the user's age, gender, source, or initial referrer.

To make things easier, you can register these properties as super properties. If you tell us just once that these properties are important, we will automatically include them with all events sent. Super properties are stored in a browser cookie, and will persist between visits to your site.

To set super properties, call mixpanel.register.

<script type="text/javascript">
    mixpanel.register({
        "age": 28,
        "gender": "male",
        "source": "facebook"
    });
</script>

The next time you track an event, the super properties you just set will be included as properties. If you call

mixpanel.track("signup");

after making the previous call to mixpanel.register, it is just like adding the properties directly:

mixpanel.track("signup", {
    "age": 28,
    "gender": "male",
    "source": "facebook"
});

Setting super properties once and only once

If you want to store a super property only once (often for things like initial referrer, ad campaign, or source), you can use mixpanel.register_once. This function behaves like mixpanel.register and has the same interface, but it doesn't override super properties you've already saved.

<script type="text/javascript">
    mixpanel.register_once({
        "ad_campaign": "fb-01"
    });
</script>

This means that it's safe to call mixpanel.register_once with the same property on every page load, and it will only set it if the super property doesn't exist.

Managing user identity

The Mixpanel library will assign a default unique identifier (we call it "distinct_id") to each unique user who comes to your website. This distinct_id is saved as a cookie so that it will persist across sessions.

If you choose, you can assign your own user IDs. This is particularly useful if a user is using your app on multiple platforms (both web and mobile, for example). To assign your own distinct_ids, you can use mixpanel.identify.

// Associate all future events sent from
// the library with the distinct_id 13793
mixpanel.identify('13793');

In general, if you use mixpanel.identify, you should call it as soon as the user logs in to your application. This will track all of their actual application usage to the correct user ID.

Calling mixpanel.identify will change the ID being sent with your events. So, if you call mixpanel.identify in the middle of a funnel, the funnel will break - we won't be able to associate the old ID with the new.

Linking two user IDs

In situations where you want to link the two IDs (in practice, this really just means when the user signs up) you should use mixpanel.alias instead of mixpanel.identify. mixpanel.alias sends an update to our server linking the current ID with a new ID going forward (not retroactively) by means of a lookup and replacement table.

// This makes the current ID (an auto-generated GUID)
// and 'joe@example.com' interchangeable distinct ids.
mixpanel.alias('joe@example.com');

The recommended usage pattern is to call mixpanel.alias when the user signs up, and mixpanel.identify when they log in. This will keep your signup funnels working correctly. For more information, please see Using alias and identify.

If you use mixpanel.alias, you should only call it once during the lifetime of the user.

Storing user profiles

In addition to events, you can store user profiles in Mixpanel's People Analytics product. Profiles are persistent sets of properties that describe a user - things like name, email address, and signup date. You can use profiles to explore and segment users by who they are, rather than what they did. You can also use profiles to send notifications, such as emails, SMS, or push notifications.

In order to send profile updates, you must call mixpanel.identify. The Mixpanel library will not send updates with the automatically generated id, so you have to explicitly set your own. This ensures that you only have actual registered users saved in the system.

Setting profile properties

You can set properties on a user profile with mixpanel.people.set.

mixpanel.people.set({ "Plan": "Premium" });

// identify must be called along with people.set
mixpanel.identify("13793");

This will set a "Plan" property, with a value "Premium", on user 13793's profile. If there isn't a profile with distinct_id 13793 in Mixpanel already, a new profile will be created. If user 13793 already has a property named "Plan" in their profile, the old value will be overwritten with "Premium".

Incrementing numeric properties

You can use mixpanel.people.increment to change the current value of numeric properties. This is useful when you want to keep a running tally of things, such as games played, messages sent, or points earned.

// If no number is passed, the default is to increment by 1
mixpanel.people.increment("games played");

// You can also pass a number to increment
// Here we add 500 the user's point count
mixpanel.people.increment("points earned", 500);

// Pass an object to increment multiple properties
mixpanel.people.increment({
    "dollars spent": 17,
    // Subtract by passing a negative value
    "credits remaining": -34
});

Other types of profile updates

There are a few other types of profile updates. To learn more, please follow the links to the full API documentation.

Tracking revenue

Mixpanel makes it easy to analyze the revenue you make from individual customers. By associating charges with user profiles, you can compare revenue across different customer segments and calculate things like lifetime value.

You can track a single transaction with mixpanel.people.track_charge. This call will add transactions to the individual user profile, which will also be reflected in the Mixpanel Revenue report.

// Make sure identify has been called
// before making revenue updates
mixpanel.identify("13793");

// Tracks $100 in revenue for user 13793
mixpanel.people.track_charge(100);

// Refund this user 50 dollars
mixpanel.people.track_charge(-50);

// Tracks $25 in revenue for user 13793
// on the 2nd of January at 9:45pm
mixpanel.people.track_charge(
    25,
    { '$time': "2013-01-02T21:45:00" }
);
Document Sections
Learn more