How to track users across products on PostHog
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
- PostHog account with multiple products
- Admin access to PostHog projects
- Understanding of user identification concepts
- Access to product codebases for SDK implementation
Step-by-Step Instructions
Configure Cross-Domain Tracking
Implement Consistent User Identification
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'
})Set Up Shared User Properties
user_tier, signup_date, and company_id. Ensure all products send the same property names and value formats when identifying users.Configure Product-Specific Events
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
})Set Up User Aliases for Account Merging
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.Create Cross-Product Funnels and Insights
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.Monitor Data Quality with Person Profiles
Common 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.