TemperStack
Intermediate8 min readUpdated Mar 18, 2026

How to track users across products on PostHog

Quick Answer

Track users across products in PostHog by using consistent user identification with the same distinct_id across all products and enabling cross-domain tracking. Set up shared user properties and configure proper alias events to merge user journeys.

Prerequisites

  1. PostHog account with multiple products
  2. Admin access to PostHog projects
  3. Understanding of user identification concepts
  4. Access to product codebases for SDK implementation
1

Configure Cross-Domain Tracking

Navigate to Project SettingsWebsite & App in your PostHog dashboard. Enable Cross-domain tracking and add all your product domains to the Authorized domains list. This ensures PostHog can track users as they move between different product websites.
Tip
Include all subdomains and different top-level domains where your products are hosted
2

Implement Consistent User Identification

In each product's PostHog SDK implementation, use the same distinct_id for the same user. Call posthog.identify('user_123') with identical user IDs across all products. Use a shared user identifier like email address, database ID, or UUID that exists across your product ecosystem.

posthog.identify('user@example.com', {
  email: 'user@example.com',
  product_suite: 'enterprise'
})
Tip
Hash sensitive identifiers like email addresses for privacy while maintaining consistency
3

Set Up Shared User Properties

Define consistent user properties across all products in Data ManagementProperties. Create shared properties like user_tier, signup_date, and company_id. Ensure all products send the same property names and value formats when identifying users.
Tip
Create a centralized user properties schema document to maintain consistency across development teams
4

Configure Product-Specific Events

Create events that include a product_name or source_product property to distinguish which product generated each event. In each product, add this context to all events:

posthog.capture('button_clicked', {
  button_name: 'signup',
  product_name: 'product_a',
  page_url: window.location.href
})
5

Set Up User Aliases for Account Merging

When users sign up or log in across different products, use posthog.alias() to connect anonymous sessions with identified users. Call posthog.alias('new_distinct_id') before posthog.identify() to merge user timelines from different products into a single user journey.
Tip
Only call alias() once per user to avoid creating duplicate profiles
6

Create Cross-Product Funnels and Insights

In Insights, create funnels that span multiple products by filtering events with product_name properties. Use Cohorts to segment users who have used multiple products. Set up retention analysis to see how users move between products over time.
Tip
Use the 'All Events' view with product filters to visualize complete user journeys
7

Monitor Data Quality with Person Profiles

Go to Persons in your PostHog dashboard to verify user tracking is working correctly. Check individual person profiles to ensure events from all products appear under single user profiles. Look for proper event attribution and consistent user properties across products.
Tip
Set up alerts for duplicate user profiles which may indicate identification issues

Troubleshooting

Users appear as separate profiles across products
Check that you're using identical distinct_id values across products. Verify posthog.identify() is called with the same identifier in all product implementations. Use posthog.alias() to merge existing duplicate profiles.
Cross-domain tracking not working
Ensure all domains are added to Authorized domains in Project Settings. Verify PostHog SDK is initialized with the same project API key across all products. Check that third-party cookie blocking isn't preventing cross-domain functionality.
Events missing product context
Add product_name or similar properties to all events in each product. Review your event tracking implementation to ensure consistent property naming. Use PostHog's Live Events view to verify properties are being sent correctly.
User properties not syncing between products
Call posthog.identify() with complete user properties in each product, not just the user ID. Ensure property names and formats are identical across products. Check that user property updates in one product include calls to PostHog to sync the changes.

Related Guides

More PostHog Tutorials

Other Tool Tutorials

Ready to get started with PostHog?

Put this tutorial into practice. Visit PostHog and follow the steps above.

Visit PostHog