How a unified profile works
Before someone signs in, an analytics SDK can only see an anonymous identifier — a device or browser. Events accrue
to that anonymous ID. When the person identifies themselves (signs up or logs in), you call something like
identify(userId), and the tool merges the anonymous history into a single profile for
that person. From then on, activity across sessions and devices lands on one timeline.
Traits
A profile also holds traits — attributes like plan, email, company, or signup date. Traits let you filter and segment every analysis by who the person is, not just what they did: retention of paid users, funnels for a specific plan, flows for a given cohort.
Why it matters
Without identity, analytics is a pile of disconnected sessions, and the same person looks like several users across devices. A unified profile is what makes retention, funnels, and per-person analysis meaningful — and what turns product analytics into something closer to a customer view.
A worked example
Someone reads your blog on their phone (anonymous ID a1), returns on a laptop and signs up (anonymous
b2, then identify('user_42')), and comes back a week later on the phone. Without identity
resolution that’s three “users”. With it, identify('user_42') merges a1 and b2
into one profile — so the blog read, the signup, and the return all sit on one person’s timeline, and
a funnel from “read blog” to “signed up” actually works.
How Pug does unified profiles
In Pug, anonymous events merge into one person on identify(), across devices — web today, native apps
by launch. Traits live on the profile and filter every insight. It’s the backbone of Pug’s
user analytics: one identity, every event, queryable everywhere.