Available on Growth and Scale
The Users tab and per-user history are included on the Growth and Scale plans. On Free and Starter, issues still show how many users they affected. See Plans & features.How it works
There's nothing extra to turn on. The SDK already attaches two things to every event:
- An install ID: a random ID created the first time the SDK runs in an app install or browser. It isn't tied to hardware, advertising IDs or the user. On Android it's stored encrypted on the device; on the web it's kept in
localStoragewith a first-party cookie as a fallback. - Your user ID, from the moment you call
identify(userId)until you callreset().
Codeskop counts a user as your user ID when there is one, and otherwise the install. One customer signed in on a phone and a laptop counts once; an anonymous visitor counts once per browser or install.
Sessions
While your app is in the foreground (or your web page is visible), the SDK sends a small heartbeat at a regular interval (every 30 seconds on the web) with a session ID. A session starts when the app opens or the tab becomes visible, and ends when it goes to the background. Sessions are how Codeskop tells an active user from one who only crashed once.
Heartbeats are free: they never count toward your monthly events.
Identify your users
Call identify after login and on startup when a user is already signed in (the SDK doesn't remember the user between launches). Call reset on logout.
// After login, and on launch when a user is already signed inCodeskop.identify(userId = user.id, traits = mapOf("plan" to user.plan)) // On logoutCodeskop.reset()await Codeskop.identify(user.id, traits: {'plan': user.plan});await Codeskop.reset();import { identify, reset } from "@codeskop/tracker"; identify(user.id, { plan: user.plan });reset();const { identify, reset } = useCodeskop(); useEffect(() => { if (user) identify(user.id); else reset();}, [user, identify, reset]);- Use your own stable ID: a database ID, not an email, phone number or name.
- Traits are optional and should be non-personal (plan, tier, cohort). They travel with events but aren't shown in the Users tab.
- Earlier anonymous events from the same install aren't merged into the user after
identify.
Platform details: Android, Flutter, web and React.
The Users tab
Users in the dashboard covers the last 30 days of the environment you have selected (Production or Test).
Headline numbers
| Option | Type | Description |
|---|---|---|
| Active users | n/a | Distinct users and anonymous installs that sent anything in the period, with the change from the previous period. |
| New users | n/a | Users seen for the first time in the period. |
| Users affected by crashes | n/a | Distinct users who had at least one crash, native crash or ANR. |
| Crash-free users | n/a | The share of active users who didn't crash. The number to watch after a release. |
| Daily active users | n/a | A chart of distinct users per day. |
The user list
The 500 most recently active users, each with: user ID (or Anonymous install), platform, device, OS, country (from the device or browser locale), app version, sessions, crashes, issues and when they were first and last seen. Search by user ID, device, OS, country or app version, and filter by project or by users with and without crashes.
For web users, the device is the browser and computer, read from the user agent (for example Chrome 129 on Mac or Safari 17 on iPhone), and the OS is macOS, Windows, iOS 17.5 and so on. The app version is the release you pass to init; use your package.json version.
One user's history
Select a user to see the journey of their latest session (crashes, errors and failed API calls in order), their last 10 sessions (start time, length, app version, and whether the session ended in a crash) and the issues they hit, each linking to the issue.
Supporting a customer
When a customer reports a problem, search the Users tab for their user ID to see exactly what happened in their recent sessions.Privacy
- Codeskop never needs names, emails or phone numbers, only the ID you choose.
- Country comes from the locale setting (for example
en-KE), not from IP geolocation or GPS. reset()stops attributing events to the user; the install ID stays so anonymous counts remain right.- User data follows your plan's retention, like all events. More in Privacy & Security.
Current limitations
- 30-day window: the Users tab looks back 30 days and lists up to 500 users.
- Custom events, screens and funnels are part of product analytics, with each user's traits and full timeline.
User tracking is an area we're actively building on. Changes appear in the release notes.