Visitors

Everyone who used your product, and everything one person did.

Every visitor starts anonymous. The moment your app calls identifyUser, that row becomes a person with a name — and keeps the history it built before you knew who they were.

Visitors table
One row per person, with the properties you sent on identify.

From a list to one person

The table is for finding someone; the detail view is for understanding them. Open a row and you get that person's history — the sessions they ran, the events they fired, the errors they hit — in order.

This is the view to open when support forwards a complaint. Instead of asking the customer what they clicked, read what they clicked, then watch it.

Properties are what make it searchable

Anything you pass to identifyUser becomes an attribute on the person: plan, company, role, signup date. Those attributes are what turn "a user complained" into "every user on the trial plan hits this", which is a different and much more useful sentence.

Send the properties you will want to filter by later. Adding one now costs a line of code; adding it after the incident costs the incident. See Identify.

One person, many devices

Identify links a browser to a person. Someone who uses your product on a laptop and a phone shows up as one person with sessions from both, as long as both sessions called identify.

Call logout() on sign-out. Without it, the next person to use that browser is merged into the account that just left.