Chapter 146 · Integration Sveltekit
Subchapter 146.6
references/identify-users.mdMarkdown8 KBView on GitHub
Linking events to specific users enables you to build a full picture of how they’re using your product across different sessions, devices, and platforms.
This is straightforward to do when capturing backend events, as you associate events to a specific user using a , which is a required argument.
distinct_idHowever, in the frontend of a web (opens in a new tab) or mobile app (opens in a new tab), a distinct_id is not a required argument — PostHog’s SDKs will generate an anonymous distinct_id for you automatically and you can capture events anonymously, provided you use the appropriate configuration (opens in a new tab).
To link events to specific users, call identify:
PostHog AI
posthog.identify(
'distinct_id', // Replace 'distinct_id' with your user's unique identifier
{ email: 'max@hedgehogmail.com', name: 'Max Hedgehog' } // optional: set additional person properties
);PostHog.identify(
distinctId = distinctID, // Replace 'distinctID' with your user's unique identifier
// optional: set additional person properties
userProperties = mapOf(
"name" to "Max Hedgehog",
"email" to "max@hedgehogmail.com"
)
)PostHogSDK.shared.identify("distinct_id", // Replace "distinct_id" with your user's unique identifier
userProperties: ["name": "Max Hedgehog", "email": "max@hedgehogmail.com"]) // optional: set additional person propertiesposthog.identify('distinct_id', { // Replace "distinct_id" with your user's unique identifier
email: 'max@hedgehogmail.com', // optional: set additional person properties
name: 'Max Hedgehog'
})await Posthog().identify(
userId: 'distinct_id', // Replace "distinct_id" with your user's unique identifier
userProperties: {
email: "max@hedgehogmail.com", // optional: set additional person properties
name: "Max Hedgehog"
});Events captured after calling identify are identified events and this creates a person profile if one doesn’t exist already.
Due to the cost of processing them, anonymous events can be up to 4x cheaper than identified events, so it’s recommended you only capture identified events when needed.
When a user starts browsing your website or app, PostHog automatically assigns them an anonymous ID, which is stored locally.
Provided you’ve configured persistence (opens in a new tab) to use cookies or localStorage, this enables us to track anonymous users – even across different sessions.
By calling identify with a distinct_id of your choice (usually the user’s ID in your database, or their email), you link the anonymous ID and distinct ID together.
Thus, all past and future events made with that anonymous ID are now associated with the distinct ID.
This enables you to do things like associate events with a user from before they log in for the first time, or associate their events across different devices or platforms.
Using identify in the backend
Although you can call identify using our backend SDKs, it is used most in frontends. This is because there is no concept of anonymous sessions in the backend SDKs, so calling identify only updates person profiles.
In your frontend, you should call identify as soon as you’re able to.
Typically, this is every time your app loads for the first time, and directly after your users log in.
This ensures that events sent during your users’ sessions are correctly associated with them.
You only need to call identify once per session, and you should avoid calling it multiple times unnecessarily.
If you call identify multiple times with the same data without reloading the page in between, PostHog will ignore the subsequent calls.
If two users have the same distinct ID, their data is merged and they are considered one user in PostHog. Two common ways this can happen are:
null, true, or distinctId.PostHog also has built-in protections to stop the most common distinct ID mistakes.
If a user logs out on your frontend, you should call reset() to unlink any future events made on that device with that user.
This is important if your users are sharing a computer, as otherwise all of those users are grouped together into a single user due to shared cookies between sessions.
We strongly recommend you call reset on logout even if you don’t expect users to share a computer.
You can do that like so:
PostHog AI
posthog.reset()PostHogSDK.shared.reset()PostHog.reset()posthog.reset()Posthog().reset()If you also want to reset the device_id so that the device will be considered a new device in future events, you can pass true as an argument:
Web
PostHog AI
posthog.reset(true)You’ll notice that one of the parameters in the identify method is a properties object.
This enables you to set person properties (opens in a new tab).
Whenever possible, we recommend passing in all person properties you have available each time you call identify, as this ensures their person profile on PostHog is up to date.
Person properties can also be set being adding a $set property to a event capture call.
See our person properties docs (opens in a new tab) for more details on how to work with them and best practices.
We recommend you call identify as soon as you’re able, typically when a user signs up or logs in.
This doesn’t work if one or both platforms are unauthenticated. Some examples of such cases are:
In these cases, you can use a deep link (opens in a new tab) on Android and universal links (opens in a new tab) on iOS to identify users.
posthog.get_distinct_id() to get the current distinct ID. Even if you cannot call identify because the user is unauthenticated, this will return an anonymous distinct ID generated by PostHog.posthog.alias() (opens in a new tab) with the distinct ID from the web. This associates the two distinct IDs as a single person.posthog.identify() (opens in a new tab) with the distinct ID from the web. Events will be associated with this distinct ID.As long as you associate the distinct IDs with posthog.identify() or posthog.alias(), you can track events generated across platforms.
Ask a question
HelpfulCould be better