Skip to main content

Custom dimensions or properties are used for audience segmentation

ab-001707 · marketing-analytics.event-conversion-tracking.custom-dimensions-segmentation
Severity: infoactive

Why it matters

Without user properties, every analytics report averages free users, paid users, enterprise accounts, and trial signups into a single number that describes no actual cohort. You cannot compare activation between plans, cannot isolate power-user behavior, cannot segment by signup date to measure cohort quality, and cannot feed PLG motion with account-level data. Anonymous event streams produce vanity metrics; identified event streams produce business intelligence.

Severity rationale

Info because segmentation enables advanced analysis but the core event pipeline functions without it.

Remediation

After authentication succeeds, identify the user with stable properties in lib/auth.ts:

analytics.identify(user.id, {
  plan: user.plan,
  created_at: user.createdAt,
  company_size: user.companySize,
})

Use opaque database IDs, never email addresses or names, to stay within PII boundaries. Set properties for plan changes and churn events so cohort reports reflect the current state, not the signup state.

Detection

  • ID: marketing-analytics.event-conversion-tracking.custom-dimensions-segmentation

  • Severity: info

  • What to look for: Custom dimensions (GA4), user properties (PostHog, Mixpanel, Amplitude), or traits (Segment) allow you to segment analytics data by user or session attributes. Look for:

    • gtag('set', 'user_properties', {...}) calls
    • posthog.identify(userId, { plan: 'pro', ... }) calls
    • mixpanel.people.set(...) calls
    • analytics.identify(userId, traits) calls
    • Any analytics calls that include user-level attributes beyond basic event properties
  • Pass criteria: The analytics implementation includes at least 1 user identification call with at least 2 meaningful user properties (plan type, account type, cohort, etc.) beyond just the user ID. Count the total custom properties set.

  • Fail criteria: No user identification or custom dimension setting found — analytics data cannot be segmented by user attributes.

  • Skip (N/A) when: No analytics is present. Skip for non-authenticated projects (no user accounts) where segmentation by user attributes is not applicable.

  • Detail on fail: "No analytics.identify() or user property setting calls found. All analytics data is anonymous page/event data with no user-level segmentation — cannot compare behavior between free and paid users, or by signup cohort."

  • Remediation: After a user signs in, identify them to your analytics SDK:

    // Call after successful authentication
    analytics.identify(user.id, {
      plan: user.plan,           // 'free' | 'pro' | 'enterprise'
      created_at: user.createdAt,
      company_size: user.companySize,
    })
    

    Use opaque user IDs (database IDs, UUIDs) — never email addresses or names. This enables segmenting your analytics data by user attributes in your dashboard.


Taxons

History