Intermediate
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
- PostHog account with multiple products
- Admin access to PostHog projects
- Understanding of user identification concepts
- Access to product codebases for SDK implementation
1
Configure Cross-Domain Tracking
Navigate to Project Settings → Website & 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 Management → Properties. 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.Ready to get started with PostHog?
Put this tutorial into practice. Visit PostHog and follow the steps above.
Visit PostHog →