Identify Your Users: Traits and User Profiles in Vexo
Attach a real user — email plus attributes — to a device, so replays and sessions read as who the user is, not an anonymous id
August 21, 2026
Jump to section
TL;DR
identifyDevice(email, traits): attach a user's email plus any attributes you have — name, plan, company — to the device.- Traits are persisted: the values you send are stored against the device, not just held for one session.
- Shown on the device detail: the email and every trait render right on the device's profile, next to its model, country, and version.
- Also exposed as
identify: the same call under a shorter name.
Vexo captures screens, taps, custom events, and session replays out of the box, all keyed to a device. That answers what happened, but it leaves a gap: the device is an anonymous id. When a replay shows a user stuck at checkout, you can watch every tap and still not know who it was — whether they're on your free tier or your biggest paying account, whether it's the customer who just emailed support. Identify closes that gap by attaching a real user to the device.
identifyDevice: attach an email and traits
When your app knows who the user is — after they sign in, for example — call identifyDevice with their email and a plain object of traits. A trait is any attribute you already have about the user: their name, their plan, the company they belong to, whatever identifies them in your own systems.
import { identifyDevice } from 'vexo-analytics';
// after the user signs in
identifyDevice(user.email, { plan: 'pro' });The first argument is the user's email; the second is the traits object. Traits are just string, number, or boolean values under keys you choose, so you can send as few or as many as you have:
identifyDevice(user.email, {
name: 'Ada Lovelace',
plan: 'pro',
company: 'Analytical Engines',
});The same call is also exported as identify if you prefer the shorter name — they do the same thing. Vexo sends the email and traits to the backend, which persists them against the device, so the identity sticks to it rather than living for a single session.
Traits on the device detail
Open any device in Vexo and its detail panel already shows the basics it captures automatically — the model, the country, the app version. Once you've identified that device, its traits render right there alongside them. Each trait shows as its own line: the key, then the value. So a device that used to read as a bare id now reads as a person on a plan, at a company, with whatever else you sent.
The common keys are ordered so identified users read consistently across your device list: name, then email, then plan come first, and any other traits you send follow. And because the device is now tied to the user's email, the profile leads with the email rather than the anonymous device id.
Why it matters
The point of identify isn't the traits themselves — it's that everything Vexo already records now hangs off a known user. The session replay you open is a named customer's session. The events on the device belong to someone whose plan and company you can see. When support forwards you an email address, you have a person to look up instead of a hunt through anonymous ids. You attach the identity once, at sign-in, and it carries through the device's profile and history.
Getting started
If you already run vexo() in your app, adding identify is one call. Place it wherever your app first knows who the user is — right after login, or as soon as you load their profile:
import { identifyDevice } from 'vexo-analytics';
identifyDevice(user.email, { plan: user.plan });Then open the device in your dashboard and you'll see the email and traits on its detail. New to Vexo? Create a free account, or see the integration docs for the full setup. Already tracking custom events by user? Identify makes those users first-class everywhere they show up.
Frequently asked questions
What can I put in traits?
Any attributes you have about the user, as string, number, or boolean values under keys you choose — for example name, plan, or company. Send as few or as many as you like; Vexo persists whatever you pass.
When should I call identifyDevice?
As soon as your app knows who the user is — typically right after sign-in, or when you load their profile. The identity is persisted against the device, so you don't need to call it on every session.
Where do the traits show up?
On the device detail, next to the model, country, and version Vexo captures automatically. Each trait renders as its own line — the key and its value — with name, email, and plan ordered first.
Is identify the same as identifyDevice?
Yes. identify is an alias for identifyDevice — same arguments, same behavior. Use whichever name you prefer.
Questions or feedback? Reach out at hello@vexo.co or join our Discord.