Identity & Accounts

Identify Users & Profiles

Turn anonymous visitors into known people — call identify(), stitch activity across devices, and explore per-person profiles, identities, and merge conflicts.

Logspot links anonymous browsing to the real people behind it. Once you tell Logspot who someone is, every event — before and after they signed in, on every device — rolls up into one profile. This page covers how to identify users and what you can do with the resulting identities.

New to the model? Read How Tracking & Identity Works first for the anonymous-ID / user-ID / session mental model. This page is the practical "how to use it" guide.

Identify a User

When a visitor tells you who they are (sign up, log in), call identify() with your stable user ID and any traits:

await Logspot.identify('user_123', {
  email: 'user@example.com',
  plan: 'pro',
  name: 'Jane Doe',
});

That's it. From then on, every track() carries the same user_id, and Logspot stamps the person's canonical identity onto their events at ingest. Activity from before they identified (still anonymous) stitches to the same profile via the anonymous ID.

You can also identify server-side — handy when the user ID lives in your backend.

Use a Stable ID

user_id is your system's stable identifier for the person — a database ID, or an email if that's what you key on. It's matched verbatim, so send the same value every time. Call reset() on logout so the next visitor on a shared device starts fresh.

Email & Other Traits

Traits describe the person (plan, name, company, anything). Two notes on email specifically:

  • Email is searchable but not a merge key. Whenever an identify carries an email — explicit email trait, or an email-shaped user_id — Logspot attaches a normalized (lower-cased) email alias to the identity. You can then search for that person by email, and it stays unique within your organization.
  • Resolution happens on user_id and anonymous_id only. Email is a property, not a stitch trigger — so two different people who happen to share an email are never silently merged.

The Person Profile

Open any user to see their profile — a single timeline of who they are and what they've done:

  • Headline stats — events, pageviews, sessions, avg events/session, avg session duration, bounce, active days, and revenue, for the selected range.
  • Profile card — primary email, traits, first/last seen, and their company.
  • Location & device, activity calendar, trend charts, top pages/referrers, and a sessions list.

It's the same view for a customer in your User list and for an admin opening an identity from Settings — only the scope differs.

Find & Manage Identities

Go to Settings → Identities to work with the canonical identities behind your data.

  • Identities — search by any alias (user_id, email, anonymous_id) within your organization, then open one for detail.
  • Identity detail — inspect a person's aliases, current traits, and recent org-wide events (across all your projects). You can attach an alias (e.g. add an email), mark one as the primary email, or unlink the identity (removes the canonical record; raw events keep their original IDs).

Merges & Conflicts

Cross-device stitching is automatic, but occasionally an identify ties together two people who had already become separate identities (e.g. a shared device). Logspot never auto-merges these — it records a conflict and leaves the call successful, so a high-volume mistake can't quietly fuse two customers.

Review them under Settings → Identities → Conflicts:

  • Merge — fold the two identities into one (use when it really is the same person).
  • Leave separate — mark triaged without merging (use when they're genuinely two people).

Toggle Open / Resolved to see history. A conflict clears only when you explicitly triage it.

Control How Identity Is Established

Per project, under Project Settings → Identity, two settings govern behavior:

Identity Resolution — how much a plain track event may establish identity:

ModeWhat a track event doesidentify()
Track & Identify (default)resolves, stamps, creates identities, and links an unclaimed alias on a matchfull
Identifyresolves + stamps only — never creates or linksestablishes identity
Secure Identifyresolves + stamps onlymust be cryptographically verified (JWKS)

Secure Identify is for when you need end-to-end proof a user_id claim came from your backend. Forward a signed token:

await Logspot.identify(
  'user_123',
  { email: 'user@example.com' },
  { identityVerification: { token: jwtFromYourBackend } },
);

Then set the issuer, audience, JWKS URL, and allowed algorithms in Project Settings.

Participationorganization (default; the project shares the org-wide identity graph) or project-only (resolution is constrained to aliases that originated in this project). Use project-only to isolate a project's identities from the rest of your org.

Log Out with reset()

Logspot.reset();

reset() clears the identified user and registered properties and rotates the anonymous ID locally (no network call). Call it on logout so a shared browser doesn't attribute the next person's activity to the previous user.

Privacy

Identity is built only from the IDs you provide plus a first-party anonymous cookie — no fingerprinting, no third-party cookies. Identification is consent-aware: events denied analytics consent are never counted, and a data-subject erasure request removes a person's identity and events.