One timeline per person
User analytics is about people, not pageviews — every session, event, and trait for one person in a single view, and cohorts built from them. Pug unifies anonymous and identified activity automatically, open source and self-hostable.
What user analytics means
Behaviour attributed to a person over time, not aggregate counts.
Web analytics tells you how many sessions hit a page. User analytics tells you who did what, in order, across devices — so you can follow a single person from their first anonymous visit through sign-up and beyond. It’s the per-person foundation that product analytics builds funnels, retention, and segments on top of.
Anonymous activity becomes one person
No identity stitching to maintain — Pug merges it for you, the moment you identify a user.
- Before sign-in, events accrue to an anonymous ID
- identify(userId) merges that history into one profile
- Works across devices: web today, app tomorrow — same person
- Traits (plan, email, anything) live on the profile and filter every insight
- app_close 4d ago
- scroll 4d ago 72%
- page_view 4d ago
- app_open 4d ago
- checkout_started 4d ago USD 416.21
- add_to_cart 4d ago prod-0198
- search 4d ago shirt
One profile, not one per session
Events fired before sign-in don’t vanish. On identify(), the anonymous timeline joins everything after it — so the first touch and the upgrade live on the same person.
- Pre-signup history merges into the identified profile
- The same person across web, mobile, and server
- Traits set on identify filter every downstream insight
- page_view anon
- scroll anon
- add_to_cart anon
-
identify('user_123')history joins - signup
- order_completed
What user-level data unlocks
Once every event ties to a person, the aggregate questions get answers the per-page view never could.
Per-person timelines
Every session, event, and trait for one person in a single searchable view — not a row in an aggregate table.
Cohorts & retention
Group users by when they joined or what they did, then watch each cohort come back week over week with retention.
Traits & segments
Plan, country, email, or any custom trait lives on the profile and filters every insight — define a segment once, apply it anywhere.
Profiles that stay on your servers
User-level data is the most sensitive data you hold. Self-hosting Pug keeps every profile inside your own infrastructure — no third-party sharing — under AGPL-3.0.
User analytics, answered.
What is user analytics?
User analytics measures behaviour at the level of an individual person and cohort, rather than aggregate page totals. It ties every event to a profile, so you can answer questions like “what did this user do before they upgraded?” or “do users from this cohort stick around?” It’s the per-person side of product analytics.
How is user analytics different from web analytics?
Web analytics counts traffic — sessions, pageviews, sources — usually anonymised and aggregated. User analytics attributes behaviour to a person over time and across devices, which is what funnels, retention, and profiles need.
How does identity resolution work?
Before sign-in, events accrue to an anonymous ID. When you call identify(userId), that anonymous history merges into one profile — so a user’s pre-signup activity isn’t lost. The same person stays unified across web, mobile, and server.
Does user-level tracking work with privacy and GDPR?
Self-hosting keeps every profile on your own servers, which simplifies data residency and GDPR questions, and there’s no ad-network data sharing. It isn’t automatic compliance, but it removes the third-party sharing that complicates most setups. See privacy-first analytics.
Can I self-host user analytics?
Yes. Pug runs as a single Go binary backed by PostgreSQL, ClickHouse, and NATS, so every profile and event stays inside your infrastructure. See self-hosted analytics.
Understand users, not just pageviews.
Open source, self-hostable, and free during open beta. Unify your first profiles in minutes.