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.
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.
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.
What people ask about user analytics
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.
Go beyond pageviews
Open source, self-hostable, and free during open beta. Unify your first profiles in minutes.
Questions? Email hello@pug.sh