Person properties
Store what you know about each person, such as their plan or company, and use it to filter, break down and build cohorts.
Person properties describe a person rather than a single event: their plan, their company, the date they signed up. They are stored on the person's profile and updated as you send new values, so you can filter any insight to "people on the growth plan" or build a cohort of them.
Event properties, by contrast, describe one occurrence and never change after the event is recorded.
Set properties when you identify
The usual place to set person properties is the identify call you make when a user signs in:
myjourney.identify(
"user_123",
{ email: "[email protected]", plan: "growth" }, // set: overwrites earlier values
{ signup_date: "2026-03-14" }, // set once: kept if already set
);See Identifying users.
Update properties later
To change properties without identifying again:
myjourney.setPersonProperties(
{ plan: "scale" }, // set
{ first_paid_plan: "growth" }, // set once
);To remove properties:
myjourney.unsetPersonProperties(["trial_ends_at"]);You can also update the person from a capture call, which keeps the event and the change together:
myjourney.capture(
"plan_upgraded",
{ to_plan: "scale" },
{ $set: { plan: "scale" } },
);Set and set once
| Kind | Use it for |
|---|---|
| Set | Values that change: plan, number of seats, last order date. Each new value replaces the old one. |
| Set once | Values that should never change: signup date, first plan, how they first heard of you. Ignored if the person already has the property. |
Properties added for you
When a person profile is created or updated, a few properties are copied from their events automatically, including the browser, operating system, device type, screen size, current page and referrer, and any UTM campaign parameters.
Each of these is also kept once with an $initial_ prefix, such as $initial_referring_domain and $initial_utm_source, so you always know where a person first came from.
Person profiles and anonymous visitors
With the snippet's default person_profiles: 'identified_only' setting, a person profile is only created once you identify the visitor or set properties on them. So setting person properties on an anonymous visitor creates a profile for them. See Anonymous and identified events.
See and use person properties
- See them: open Activity, then the Persons tab, and open a person. The properties are listed on their profile.
- Filter and break down: in any insight, choose a person property in a filter or breakdown.
- Group people: build a cohort from person properties.
- Name people: in Settings → Project → Product analytics, Person display name chooses which properties, such as
emailorname, are shown as a person's name across the app.
Good practice
- Keep property names consistent, in one case style, across your site and server.
- Send numbers as numbers and dates in a consistent format, so filters work as expected.
- Store only what you need. Personal information you send becomes data you are responsible for under privacy law.
- Very large person properties are trimmed or rejected; if this happens, it appears in Event ingestion warnings.
Related
Can't find what you need? Contact support