Groups
Groups are non-user entities you want to analyse alongside users — typically a company, account, team, or organization. Where a user-level event answers “how many users did X?”, a group-level event answers “how many companies did X?”.
Groups are workspace-scoped. You define the group types (e.g. company, team) and TrackCrumb tracks unique keys within each type.
Linking events to a group
Use the SDK’s group() method before firing events. It attaches the group context to subsequent events from that user.
tracker.identify("user_42");
tracker.group("company", "acme-corp", {
name: "Acme Corporation",
plan: "enterprise",
seats: 120,
});
tracker.track("feature_used", { feature: "ai_chart" });The third argument is group properties — analogous to user properties, but attached to the group key, not the user.
Browsing groups
Open Groups in the sidebar (/groups). The page has a tab per group type.
| Column | What it shows |
|---|---|
| Type | The group type (e.g. company) |
| Key | The unique identifier you passed to group() |
| Properties | First three properties, truncated |
| Last updated | The most recent time a group() call updated this row |
Click a key to open the group profile, which lists the members (users currently associated with this group) and recent events from any of them.
Using groups in reports
In Trends, Funnels, Retention, and Cohorts, the Count by dropdown lets you switch the unit of measure:
- Users (default) — count distinct
distinct_id. - Groups — count distinct keys of a selected group type.
For example, a Trend on feature_used counted by company answers “how many companies used this feature each day?” instead of “how many users?”.
Reports counted by group only include events fired after a group() call, since earlier events have no group context attached.
Limits & gotchas
- Properties payload — same 32 KB per-event cap as user/event properties.
- One group per type per event — a user can be in many group types simultaneously (e.g.
company=acmeandteam=growth), but only one key per type. - No backfill — group context is attached at
track()time, so callinggroup()later does not retroactively tag older events.