Menu
B2B product analytics

How to Measure Product Usage by Company in B2B SaaS

A practical guide to the identity model, event context, product hierarchy, account metrics, and company overview needed to measure B2B SaaS usage reliably.

Which company entity should you measure?

In B2B SaaS, the buyer and the people doing the work live at different grains. Global user or event totals can hide whether activity is distributed across customers or concentrated in one account.

Choose the entity that owns the workflow and decision:

  • Commercial company or account for contract, renewal, expansion, and portfolio exposure.
  • Workspace, tenant, team, project, or location for the operating context where permissions, data, and work are isolated.
  • Both when one commercial account owns several independent operating groups.

Do not force a parent hierarchy into a simple one-workspace product. Conversely, “one of 12 workspaces was active” should not be presented as complete enterprise adoption. Document what signs and pays, where work occurs, whether ownership can change, and how parent-child rollups behave over time.

DecisionCommercial account viewOperating workspace view
Portfolio reachHow many buying relationships were active or adopted?How many independent work contexts were active?
Renewal exposureRoll up relevant workspaces under the contract entity.Preserve which workspaces contribute or remain inactive.
User penetrationUseful only with a defensible cross-workspace eligible population.Usually clearer when roles and permissions belong to the workspace.
Workflow ownershipCan show company-wide dependency.Reveals the specific team carrying the workflow.
Historical changeNeeds effective-dated parent ownership.Needs stable workspace identity through transfers or renames.

State the grain in every chart title and export. “Active customers,” “active workspaces,” and “active companies with at least one active workspace” answer different questions even when they use the same source events.

What data model keeps company usage traceable?

RecordGrainEssential context
EventOne observed actionID, name, time, user, active account, Visit, page or feature, properties
VisitOne use period by one user in one account contextID, user, account, start, end, ordered events or stays
UserOne durable person identityStable ID, display attributes, first seen, status
Account or workspaceOne durable operating groupStable ID, display name, optional commercial parent
MembershipOne user-account relationshipUser, account, role, valid_from, valid_to
Product mapOne mapping ruleRaw URL or event, normalized page, grouped feature, area, version
Account attributesCurrent or effective-dated profilePlan, size, lifecycle, onboarding, industry, region, use case

One event fact, resolved against durable entities

Event fact — one observed action

event_name
report_exported
event_timestamp
2026-07-15T14:32:18Z
user_id
usr_10482
account_id
wrk_7F3A
session_id
vis_01J7N3YB6P
normalized_page
/workspaces/:workspace_id/reports/:report_id/export

The account context is captured at event time. A current company field on the user cannot reconstruct it.

User durable person

Stable ID, first seen, status. Never rewritten when the person changes employer.

Visit one user, one account context

Documented start and end, ordered evidence, maintained engaged-time rule. Splits on an account switch.

Account or workspace operating group

Stable ID and display name, with an optional commercial parent.

Parent · acct_2C91 — contract, renewal, portfolio exposure

Product map versioned rules

raw URLnormalized pagegrouped pageproduct area

Thousands of record IDs collapse into Report export → Reporting instead of separate features.

Membership user × account

Role with valid_from and valid_to, so past activity keeps the role and company it actually had.

Preserve event-time workspace context and the user, Visit, page, and product area behind it.
{
  "event_id": "evt_01J7N4Q8K2",
  "event_name": "report_exported",
  "event_timestamp": "2026-07-15T14:32:18Z",
  "user_id": "usr_10482",
  "account_id": "wrk_7F3A",
  "commercial_account_id": "acct_2C91",
  "session_id": "vis_01J7N3YB6P",
  "normalized_page": "/workspaces/:workspace_id/reports/:report_id/export",
  "grouped_page": "Report export",
  "product_area": "Reporting",
  "properties": { "format": "csv", "user_role": "analyst" }
}

The active account_id is non-negotiable. A current company field on the user cannot reconstruct activity for consultants, agencies, multi-workspace users, or people who change employers. Keep one stable person, explicit memberships, and event-time account context.

Define a deterministic attribution order rather than filling missing accounts opportunistically:

Available evidenceTreatmentAudit field
Trusted event-time account and valid membershipUse the event context.attribution_source=event
Event account missing; trusted Visit contains one contextEnrich under a documented rule.attribution_source=visit
Event account missing; one valid effective-dated membershipOptionally enrich when product behavior makes the context unambiguous.attribution_source=membership
Several valid memberships and no active contextLeave unknown or quarantine.attribution_source=unresolved
Only current profile, email domain, or IP suggests an accountDo not silently assign historical activity.Retain the candidate mapping for review only.

Measure the share of valid customer events by attribution source. A rising visit-derived or unresolved share can reveal a tracker regression even when aggregate company totals still look plausible.

How should product structure and Visits be organized?

raw URL or event
→ normalized page
→ grouped page or feature
→ product area

For example, record-specific task URLs normalize to /workspaces/:workspace_id/projects/:project_id/tasks/:task_id, group into Task details, and roll into Project management. This prevents thousands of IDs from masquerading as separate features.

How do behavior and Visits complete the map?

Page discovery, filtering, saving, exporting, and scheduling represent different stages. Define the smallest behavior that matches the question; do not label every click or page open as feature adoption. The feature adoption rate guide covers thresholds and denominators, while account versus user adoption covers analytical grain.

Events say that an action happened. A Visit supplies order, account-switch boundaries, elapsed and observed active-time context, and a direct path to the session worth inspecting. A Visit should have one user, one active account context, a documented start and end, ordered evidence, and a maintained engaged-time rule.

How do you implement company-level analytics?

  1. Define the account entity. Record the commercial and operating grains and their rollups.
  2. Establish stable IDs. Document users, accounts, anonymous identity, memberships, merges, splits, logout, and shared-device behavior.
  3. Attach event-time account context. Add a Visit ID, timestamp, and optional commercial parent.
  4. Normalize the product map. Version raw-to-normalized-to-grouped-to-area rules.
  5. Define meaningful events. Prefer clear outcomes such as project_created, report_saved, or integration_connected.
  6. Build Visits. Use a supplied ID or documented boundary, and split account switches.
  7. Aggregate multiple grains. Maintain account, account-user, account-feature, account-area, period, and Visit summaries.
  8. Add effective-dated attributes. Join plan, size, lifecycle, onboarding, region, and use case.
  9. Validate against raw evidence. Trace sample summaries to events, membership, pages, sequence, and available replay.
  10. Exclude invalid actors and environments. Make staff, support, demo, bot, service, staging, and test rules visible.
  11. Monitor quality. Alert on missing IDs, impossible memberships, unsplit switches, unknown pages, duplicates, late events, and internal leakage.

A maintained pipeline, not one group-by query

1

Raw events

2

Identity and membership

3

Product map

4

Visits

5

Period aggregation

6

Company overview

Watched at every stage

null accountunknown pageunsplit account switchduplicate or late eventexcluded actorreconciliation residual

Each stage stamps its rule version on what it writes, so a later mapping or identity change cannot silently rewrite last quarter’s numbers.

Company reporting is a maintained processing pipeline, not one group-by query.
ControlExpected resultProblem caught
Switch workspace during one browser session.Subsequent events use the new account and the Visit splits when required.Cross-account blending
Move a user to a new employer.Earlier activity remains with the old company.Current-profile rewriting
Open two record-specific URLs.Raw URLs differ while normalized page and grouped feature align.Artificial product breadth
Impersonate a customer for support.The event stays auditable but does not count as customer usage.Internal activity leakage
Query overlapping daily active companies.The complete-period distinct total deduplicates the overlap.Summed-unique inflation
Send a duplicate or late event.The correction and cutoff policy produces a reproducible aggregate.Unstable published totals

Run these controls after identity, router, account-switching, product-map, and tracker releases. For production monitoring, publish null-account rate, unknown-page rate, duplicate rate, late-arrival rate, excluded-actor share, and the count of impossible membership joins.

Which company-usage metrics should you report?

MetricDefinition or formulaInterpretation limit
Active companiesCOUNT(DISTINCT account_id) with a valid Visit in the periodPresence, not meaningful adoption.
Active users per companyDistinct valid users grouped by accountNeeds role and eligibility context.
VisitsCOUNT(DISTINCT session_id)Depends on sessionization.
Engaged timeSum valid observed active intervalsDocument idle handling and caps; not proof of value.
Meaningful actionsCount vetted events in the documented taxonomyDifferent actions need coherent meaning.
Adoption breadthAdopted relevant areas, optionally divided by eligible areasRaw page coverage inflates it.
Feature adoptionAdopting eligible companies / eligible active companiesNeeds behavior, denominator, and window.
User penetrationAdopting users / eligible active users in the accountLow penetration can be correct for specialists.
ConsistencyActive days / possible days or expected opportunitiesCadence determines the denominator.
RecencyPeriod end or current time minus latest valid activityLow-frequency workflows require longer expectations.
Period changeAbsolute or (current - previous) / previousHandle zero baseline and equal periods explicitly.
Top-user concentrationLargest user action, Visit, or time total / account totalThe metric and role model determine meaning.
New / dropped areasCurrent set minus prior / prior set minus currentTaxonomy and eligibility changes can create false movement.

No one metric is customer health. Pair totals with distribution, recurrence, completion, account lifecycle, and evidence outside product analytics.

LayerMinimum fieldsDecision supported
PortfolioEligible and active companies, adoption distribution, peer cohorts, and trendWhere is reach or movement concentrated?
Company overviewUsers, Visits, active days, areas, meaningful actions, time, concentration, and comparisonWhich dimension changed for this account?
Area or workflowThreshold, adopters, completions, recurrence, contributors, and failure statesWhat work is adopted, shallow, blocked, or dropped?
User distributionRoles, eligibility, active periods, meaningful actions, and account shareWho carries or consumes the workflow?
Visit evidenceOrdered pages, actions, outcomes, errors, and maintained time measuresWhich sessions can explain the aggregate pattern?

Each layer should link downward. A portfolio flag with no company list, or a company score with no people, areas, and Visits behind it, turns analytics into an opaque label.

What does the worked portfolio example reveal?

All companies and numbers are fictional. Both portfolios contain four companies, 40 users, 400 Visits, 1,200 meaningful actions, 60 engaged hours, and four global product areas.

Portfolio A companyUsers / Visits / actions / hoursDaysAreasTop user
Oakstone10 / 100 / 300 / 1526Core, Projects, Reporting, Integrations22%
Blue Harbor10 / 100 / 300 / 1524All four24%
Cedarline10 / 100 / 300 / 1523Core, Projects, Reporting25%
Northstar10 / 100 / 300 / 1525Core, Projects, Integrations23%
Portfolio B companyUsers / Visits / actions / hoursDaysAreasTop user
TitanWorks28 / 310 / 930 / 4530All four18%
BrightPath7 / 55 / 165 / 912Core, Projects, Reporting52%
Pine Labs4 / 30 / 90 / 57Core, Projects74%
DeltaOps1 / 5 / 15 / 13Core100%

Portfolio A distributes work evenly. Portfolio B's global totals describe TitanWorks far more than a typical company; smaller accounts are narrower, less consistent, and more concentrated. Neither table proves value or churn, but the company grain reveals where to investigate.

Portfolio B makes the distortion concrete. TitanWorks contributes 77.5% of Visits and actions, 75% of engaged hours, and 70% of active users. A global increase caused by TitanWorks can coexist with deterioration in BrightPath, Pine Labs, and DeltaOps. Unweighted account distributions and named company rows prevent the largest customer from speaking for the portfolio.

Illustrative: Pine Labs is active in aggregate, narrow underneath

Pine Labs

Growth plan · 14 months tenure · 30-day period vs equal prior period

4

active users

30

Visits

90

meaningful actions

5h

engaged time

Active days 7 of 30

Intermittent, not weekly. Ask whether the cadence matches the workflow before calling it decline.

Adopted areas 2 of 4 eligible

CoreProjectsReportingIntegrations

Two areas never observed. Separate “not eligible” from “not adopted” before acting.

Who did the 90 actions top user 74%

Lead operator admin

67

Operator 2 member

11

Operator 3 member

8

Viewer read-only

4

One person carries the account. Specialist ownership may be correct — continuity still needs a named backup.

Next question is not whether 90 actions is good. Check which two areas qualified, whether seven active days match this customer’s cadence, whether the other three users did role-appropriate work, then compare an equal prior period and relevant peers.

Pine Labs looks active in aggregate while remaining narrow, intermittent, and concentrated.

A company overview should show the selected period and comparison, account attributes, active users, Visits, active days, meaningful actions, engaged time, adopted areas, feature status, concentration, user distribution, recent movement, and links to source users, pages, and Visits.

For Pine Labs, the next question is not whether 90 actions are “good.” Inspect which two areas qualified, whether seven active days match its cadence, whether the top user completed 66 or 67 of the 90 actions implied by a rounded 74% share, and whether the other three users completed role-appropriate work. Then compare an equal prior period and relevant peers.

CompanyInitial patternInspect next
TitanWorksHigh scale, broad use, low leading-user shareRole distribution, completion, outcomes, and whether volume reflects workload
BrightPathModerate activity with 52% concentrationSecond contributor, expected roles, and period trend
Pine LabsNarrow, intermittent, and 74% concentratedLifecycle, eligible areas, cadence, ownership, and blocked attempts
DeltaOpsOne user, one area, three active daysSpecialist fit, onboarding, eligibility, and whether more participants are expected

How do you compare periods and protect data quality?

Compare accounts with relevant plan, size, lifecycle, use case, region, account age, and opportunity. A universal benchmark can punish onboarding, specialist, or low-frequency customers.

  • Calculate complete-period distinct users and companies; do not sum daily uniques.
  • Use equal completed periods and report percentage-point change for rates.
  • Handle a zero prior baseline as new activity, not infinite growth.
  • Match the window to expected cadence and expose timezone and period boundaries.
  • Version product mappings, eligibility rules, and identity corrections.
  • Monitor excluded traffic and null context so filters do not hide real customers.

Which data-quality controls belong in every review?

  • Change control: log identity rules, hierarchy, product mappings, meaningful-event taxonomy, session boundaries, eligibility, exclusions, peer cohorts, and privacy processing. Store the rule version on derived tables.
  • Reconciliation: trace valid events to Visits, users, accounts, grouped pages, areas, account-user totals, company totals, and portfolio totals. Resolve unexplained residuals before publication.
  • Data minimization: prefer stable pseudonymous IDs, controlled event properties, retention limits, access controls, and explicit redaction or masking. Exclude sensitive values, tokens, secrets, and unnecessary content.

How does Hymetry support company investigation?

Hymetry connects Companies, Pages, Users, and Visits. Start with an account summary, isolate the changed product area or grouped page, inspect the contributing people and concentration, then open relevant session evidence.

How should you use the company drill-down?

Grouped pages provide a stable analytical level while normalized raw pages retain exact evidence. Aggregate signals should select the Visits worth reviewing instead of encouraging random replay browsing. Hymetry does not automatically know intent or causality and does not guarantee churn prediction.

The implementation foundation is covered in the company and user modeling guide and the broader B2B product analytics guide.

  • Begin with the question. Reach starts with eligible and adopting companies; health investigation starts with completion, recurrence, distribution, and trend; rollout starts with workspaces, roles, and penetration.
  • End with a falsifiable next step. Validate instrumentation or eligibility, inspect the changed workflow, confirm ownership, improve onboarding, or monitor the next expected cycle. Record what would overturn the explanation.
  • Make operational triggers reproducible. Store the metric version, account grain, peer cohort, period, component reasons, and source links so later rule changes do not rewrite earlier decisions.
  • Close the evidence loop. After the next expected workflow cycle, compare the observed result with the recorded explanation. Keep confirmed, overturned, and still-unknown outcomes so recurring review rules improve instead of repeating the same unsupported assumption. Make that follow-up visible to later reviewers.

Frequently asked questions

What is account-level product usage?

Valid product behavior aggregated by a stable company or operating group while preserving users, Visits, features, and areas behind the total.

Should account ID live on the user or event?

Use an explicit membership plus event-time account context; a current user profile alone is insufficient.

How should one user in several companies work?

Maintain many-to-many memberships and attach the active account to every event, splitting Visit attribution on context change.

What counts as an active company?

A defensible baseline is an eligible company with at least one valid product Visit during the selected period.

Do company analytics require sessions?

Not for basic counts, but Visits add sequence, context boundaries, time evidence, and a path to investigation.

What is a good top-user concentration?

No universal threshold exists; interpret company size, roles, eligible users, history, peers, and the underlying activity metric.

Does more engaged time mean more value?

No. It is observed active product time and needs outcomes, breadth, participation, cadence, and session context.

Sources

Methodology and limitations

First-party documentation supports identity, groups, sessions, account reporting, and tracking design. The processing framework, fictional portfolio, calculations, and visuals are original. Company usage is behavioral evidence, not automatic customer intent or value.

Source directory

About Hymetry

Hymetry is account-centric product intelligence for B2B SaaS. It helps teams understand how customer companies and the users inside them adopt and use their product.