# Table of Contents - [Documentation - PostHog](#documentation-posthog) - [Product analytics - Documentation - PostHog](#product-analytics-documentation-posthog) - [Web analytics - Docs - PostHog](#web-analytics-docs-posthog) - [Session replay - Docs - PostHog](#session-replay-docs-posthog) - [Experiments - Docs - PostHog](#experiments-docs-posthog) - [Product OS - Docs - PostHog](#product-os-docs-posthog) - [Surveys - Docs - PostHog](#surveys-docs-posthog) - [Feature flags - Docs - PostHog](#feature-flags-docs-posthog) - [Data pipelines: CDP integrations - Docs - PostHog](#data-pipelines-cdp-integrations-docs-posthog) - [LLM observability - Documentation - PostHog](#llm-observability-documentation-posthog) - [Error tracking - Docs - PostHog](#error-tracking-docs-posthog) - [Identifying users - Docs - PostHog](#identifying-users-docs-posthog) - [Data warehouse - Docs - PostHog](#data-warehouse-docs-posthog) - [How to watch recordings - Docs - PostHog](#how-to-watch-recordings-docs-posthog) - [Creating insights - Docs - PostHog](#creating-insights-docs-posthog) --- # Documentation - PostHog Overview New to PostHog? --------------- The getting started guide covers adding PostHog to your app or site, sending events, identifying users, creating actions and insights, and assigning properties to users and users to groups. [Get started](/docs/getting-started/install) **Tip:** Chat with Max AI for quick answers to questions. Open by typing ? or search with /. #### Product documentation Search docs... * [**Product analytics**](/docs/product-analytics) Funnels, graphs, user paths, correlation analysis, retention, stickiness, lifecycle, SQL [Installation](/docs/product-analytics/installation) [Setting person properties](/docs/product-analytics/person-properties) [Tutorials and guides](/docs/product-analytics/tutorials) * [**Web analytics**](/docs/web-analytics) Monitor your website traffic. Built for people who really liked GA3... [Overview](/docs/web-analytics) [FAQ](/docs/web-analytics/faq) * [**Session replay**](/docs/session-replay) Watch how users interact with your app in a DVR-like playback experience [Installation](/docs/session-replay/installation) [Watching recordings](/docs/session-replay/how-to-watch-recordings) [Tutorials and guides](/docs/session-replay/tutorials) * [**Feature flags**](/docs/feature-flags) Safely roll out features to specific users or groups [Installation](/docs/feature-flags/installation) [Creating feature flags](/docs/feature-flags/creating-feature-flags) [Testing your flag](/docs/feature-flags/testing) [Tutorials and guides](/docs/feature-flags/tutorials) * [**Experiments**](/docs/experiments) Test changes with statistical significance with multivariate tests and robust targeting [Installation](/docs/experiments/installation) [Creating an experiment](/docs/experiments/creating-an-experiment) [Creating a no-code experiment](/docs/experiments/no-code-web-experiments) [Testing and launching](/docs/experiments/testing-and-launching) [Troubleshooting and FAQs](/docs/experiments/common-questions) * [**Surveys**](/docs/surveys) In-app popups with a library of response templates, plus an API [Installation](/docs/surveys/installation) [Creating a survey](/docs/surveys/creating-surveys) [Tutorials and guides](/docs/surveys/tutorials) [Conditional questions](/docs/surveys/conditional-questions) * [**Data pipelines**](/docs/cdp) Collect, enrich, and send data to your destinations [Sources](/docs/cdp/sources) [Realtime destinations](/docs/cdp/destinations) [Batch exports](/docs/cdp/batch-exports) [Transformations](/docs/cdp/geoip-enrichment) [Troubleshooting and FAQs](/docs/cdp/common-questions) * [**Data warehouse**](/docs/data-warehouse) Unify and query data from any source and analyze it alongside your product data [Joining data](/docs/data-warehouse/join) [Save views](/docs/data-warehouse/views) [Under the hood](/docs/data-warehouse/under-the-hood) [Tutorials and guides](/docs/data-warehouse/tutorials) * [**LLM observability**](/docs/ai-engineering) Insights for building your AI and LLM products [Installation](/docs/ai-engineering/observability) [Tutorials and guides](/docs/ai-engineering/tutorials) [Observability integrations](/docs/ai-engineering/llm-insights) * [**Error tracking**](/docs/error-tracking) Track and monitor errors and exceptions in your code. [Installation](/docs/error-tracking/installation) [Monitor errors](/docs/error-tracking/monitoring) [Troubleshooting and FAQs](/docs/error-tracking/common-questions) * [**Product OS**](/docs/product-os) The PostHog platform for building and improving your product ### Data Learn how to manage events and customer data for use with all PostHog products. [Explore](/docs/data) ### Templates Instantly analyze data and collect feedback with dashboard and survey templates. [Browse templates](/templates) ### API Push or pull data to build custom functionality or create bespoke views for your business needs. [Explore](/docs/api) * [Product OS](/docs/product-os) * [Product analytics](/docs/product-analytics) * [Web analytics](/docs/web-analytics) * [Session replay](/docs/session-replay) * [Feature flags](/docs/feature-flags) * [Experiments](/docs/experiments) * [Surveys](/docs/surveys) * [Data pipelines](/docs/cdp) * [Data warehouse](/docs/data-warehouse) * [LLM observability](/docs/ai-engineering) * [Error tracking](/docs/error-tracking) * [Why PostHog?](/why) * [Products](/products) * [Pricing](/pricing) * [Docs](/docs) * [Community](/community) * [Company](/about) --- # Product analytics - Documentation - PostHog Overview Getting started Product analytics ================= ### Learn how to use product analytics to understand your users. [Installation guide](/docs/product-analytics/installation) ![](https://res.cloudinary.com/dmukukwp6/image/upload/q_100/v1/posthog.com/src/components/Home/Slider/images/product-analytics-hog) ### Questions? Ask Max AI. It's easier than reading through **592 docs articles**. Chat with Max AI ### Resources Real-world use cases to get you started * [###### Guide\ \ #### The complete guide to event tracking\ \ Set up your analytics foundation](/tutorials/event-tracking-guide) * [###### Guide\ \ #### Track performance marketing\ \ Optimize ads and marketing channels](/tutorials/performance-marketing) * [###### Guide\ \ #### Reduce churn\ \ The bread and butter of long-term growth](/tutorials/churn-rate) * [###### Guide\ \ #### Track new and returning users\ \ Build cohorts and compare users](/tutorials/track-new-returning-users) * [###### Guide\ \ #### Identify and analyze power users\ \ Find and understand your most engaged users](/tutorials/power-users) * [###### Guide\ \ #### Calculate DAU/MAU ratio\ \ Popular engagement metrics that measure stickiness](/tutorials/dau-mau-ratio) [Explore guides](/docs/product-analytics/tutorials) ### Dashboard templates Choose from a variety of pre-built templates for your stage of growth. * [#### Product analytics\ \ Active users, feature flags, growth accounting, traffic sources\ \ ![](https://res.cloudinary.com/dmukukwp6/image/upload/q_100/v1/posthog.com/src/pages/docs/images/template-product-analytics)](/templates/product-analytics) * [#### Website traffic\ \ User, sessions, content performance\ \ ![](https://res.cloudinary.com/dmukukwp6/image/upload/q_100/v1/posthog.com/src/pages/docs/images/template-website-traffic)](/templates/website-dashboard) * [#### Realtime analytics\ \ Live users, sessions, traffic, sources\ \ ![](https://res.cloudinary.com/dmukukwp6/image/upload/q_100/v1/posthog.com/src/pages/docs/images/template-realtime-analytics)](/templates/real-time-dashboard) [Browse templates](/templates) * [Product OS](/docs/product-os) * [Product analytics](/docs/product-analytics) * [Web analytics](/docs/web-analytics) * [Session replay](/docs/session-replay) * [Feature flags](/docs/feature-flags) * [Experiments](/docs/experiments) * [Surveys](/docs/surveys) * [Data pipelines](/docs/cdp) * [Data warehouse](/docs/data-warehouse) * [LLM observability](/docs/ai-engineering) * [Error tracking](/docs/error-tracking) * [Why PostHog?](/why) * [Products](/products) * [Pricing](/pricing) * [Docs](/docs) * [Community](/community) * [Company](/about) --- # Web analytics - Docs - PostHog Overview Getting started Web analytics ============= ### Track and monitor many of the most important metrics for your website. [Installation guide](/docs/web-analytics/installation) ![](https://res.cloudinary.com/dmukukwp6/image/upload/q_100/web_analytics_hog_f6db3a01c9) ### Questions? Ask Max AI. It's easier than reading through **592 docs articles**. Chat with Max AI ### FAQ [What's the difference between web and product analytics?](/docs/web-analytics/web-vs-product-analytics) ### Resources Real-world use cases to get you started * [###### Guide\ \ #### Calculating session-based metrics\ \ Give an overview, then dive deeper into metrics like average session duration and time on site.](/tutorials/session-metrics) * [###### Guide\ \ #### How to set up cross-domain tracking\ \ Track users accurately across multiple websites and domains.](/tutorials/cross-domain-tracking) * [###### Guide\ \ #### How to do cookieless tracking\ \ Track users without cookies for compliance and privacy.](/tutorials/cookieless-tracking) * [Product OS](/docs/product-os) * [Product analytics](/docs/product-analytics) * [Web analytics](/docs/web-analytics) * [Session replay](/docs/session-replay) * [Feature flags](/docs/feature-flags) * [Experiments](/docs/experiments) * [Surveys](/docs/surveys) * [Data pipelines](/docs/cdp) * [Data warehouse](/docs/data-warehouse) * [LLM observability](/docs/ai-engineering) * [Error tracking](/docs/error-tracking) * [Why PostHog?](/why) * [Products](/products) * [Pricing](/pricing) * [Docs](/docs) * [Community](/community) * [Company](/about) --- # Session replay - Docs - PostHog Overview Getting started Session replay ============== ### Play back sessions to diagnose UI issues, improve support, and get context for nuanced user behavior. [Record your first session](/docs/session-replay/installation) ![](https://res.cloudinary.com/dmukukwp6/image/upload/q_100/v1/posthog.com/src/components/Home/Slider/images/session-recording-hog) ### Questions? Ask Max AI. It's easier than reading through **592 docs articles**. Chat with Max AI ### Resources Real-world use cases to get you started * [###### Guide\ \ #### Only record sessions you want\ \ Control cost by reducing volume](/tutorials/limit-session-recordings) * [###### Guide\ \ #### Discover user friction with replays\ \ Pinpoint issues with filters and replays](/tutorials/filter-session-recordings) * [###### Guide\ \ #### Analyze power users\ \ Define a cohort and watch those sessions](/tutorials/power-users) * [###### Guide\ \ #### Improve web app performance\ \ Network monitoring in session replays](/tutorials/performance-metrics) * [###### Guide\ \ #### Session replays in customer support\ \ Rageclicks, sharing recordings, error monitoring](/tutorials/session-recordings-for-support) * [###### Guide\ \ #### Replay users in a funnel\ \ Learn from users who do (or don't) convert](/tutorials/explore-insights-session-recordings) [Explore guides](/docs/session-replay/tutorials) [Visit the manual](/docs/session-replay/manual) * [Product OS](/docs/product-os) * [Product analytics](/docs/product-analytics) * [Web analytics](/docs/web-analytics) * [Session replay](/docs/session-replay) * [Feature flags](/docs/feature-flags) * [Experiments](/docs/experiments) * [Surveys](/docs/surveys) * [Data pipelines](/docs/cdp) * [Data warehouse](/docs/data-warehouse) * [LLM observability](/docs/ai-engineering) * [Error tracking](/docs/error-tracking) * [Why PostHog?](/why) * [Products](/products) * [Pricing](/pricing) * [Docs](/docs) * [Community](/community) * [Company](/about) --- # Experiments - Docs - PostHog Overview Getting started Experiments =========== ### Test different variations of your product and measure the impact. [Roll out your first experiment](/docs/experiments/installation) ![](https://res.cloudinary.com/dmukukwp6/image/upload/q_100/v1/posthog.com/src/components/Home/Slider/images/ab-testing-hog) ### Questions? Ask Max AI. It's easier than reading through **592 docs articles**. Chat with Max AI ### Resources Real-world use cases to get you started * [###### Guide\ \ #### Running experiments on new users\ \ Test changes to signup and onboarding flows](/tutorials/new-user-experiments) * [###### Guide\ \ #### Run A/B tests in Webflow\ \ A guide to low-code experimentation](/tutorials/webflow-ab-tests) * [###### Guide\ \ #### Run experiments without feature flags\ \ Useful if you don't use PostHog feature flags](/docs/experiments/running-experiments-without-feature-flags) [Explore guides](/docs/experiments/tutorials) [Visit the manual](/docs/experiments/installation) * [Product OS](/docs/product-os) * [Product analytics](/docs/product-analytics) * [Web analytics](/docs/web-analytics) * [Session replay](/docs/session-replay) * [Feature flags](/docs/feature-flags) * [Experiments](/docs/experiments) * [Surveys](/docs/surveys) * [Data pipelines](/docs/cdp) * [Data warehouse](/docs/data-warehouse) * [LLM observability](/docs/ai-engineering) * [Error tracking](/docs/error-tracking) * [Why PostHog?](/why) * [Products](/products) * [Pricing](/pricing) * [Docs](/docs) * [Community](/community) * [Company](/about) --- # Product OS - Docs - PostHog What is Product OS? Product OS ========== Last updated: Feb 14, 2025 |[Edit this page](https://github.com/PostHog/posthog.com/tree/master/contents/docs/product-os/index.md) On this page * Product OS features PostHog is a platform of many products: * [Product analytics](/docs/product-analytics) to help you quantitatively understand how users behave * [Web analytics](/docs/web-analytics) for tracking behavior on your marketing websites * [Session replay](/docs/session-replay) for diagnosing issues and seeing how users use your product * [Feature flags](/docs/feature-flags) for testing new features and safely rolling them out * [A/B testing](/docs/experiments) for scientifically verifying changes to improve conversion * [Surveys](/docs/surveys) for collecting qualitative feedback running satisfaction surveys * [Data warehouse](/docs/data-warehouse) for importing data from external sources and querying it alongside your data in PostHog. PostHog's Product OS is the foundation on which they're built. It ties all your user and product data together, so you can focus on improving your product instead of engineering your data. Product OS features ------------------- Product OS comprises things like: * Our easy to implement [client and server SDKs](/docs/getting-started/install?tab=sdks) like `posthog-js` client library, which [autocaptures](/docs/product-analytics/autocapture) frontend events, so you don't have to waste time manually instrumenting every button and simple interaction * Our [APIs](/docs/api) , which enable you to capture, evaluate, create, update, and delete nearly all of your information in PostHog, and [pull information into your app](/tutorials/customer-facing-analytics) * Collaboration features like [notebooks](/docs/notebooks) , which enable you to analyze data from all PostHog products in a single document you can share and collaborate on with teammates * Built-in [data management tools](/docs/data) , where you can define and organize events, person properties, data tables, and audit changes made by colleagues * [Data pipelines](/docs/cdp) , which enable you to transform your PostHog data and send it to other tools for monitoring, marketing automation, sales, and support * [SQL](/docs/sql) , which grants you unrestricted access to your data via custom SQL queries for advanced, custom analysis * [Our infrastructure](/docs/how-posthog-works) , which is built upon [ClickHouse](/handbook/engineering/clickhouse) , an ultra-fast open-source database system built specifically for real-time data analysis * The [toolbar](/docs/toolbar) , which lets you easily toggle feature flags, access [heatmaps](/docs/toolbar/heatmaps) , inspect elements, create [actions](/docs/data/actions) , and see where users click ### Questions? Ask Max AI. It's easier than reading through **592 docs articles**. Chat with Max AI ### Community questions Ask a questionLogin ### Was this page useful? HelpfulCould be better * [Product OS](/docs/product-os) * [Product analytics](/docs/product-analytics) * [Web analytics](/docs/web-analytics) * [Session replay](/docs/session-replay) * [Feature flags](/docs/feature-flags) * [Experiments](/docs/experiments) * [Surveys](/docs/surveys) * [Data pipelines](/docs/cdp) * [Data warehouse](/docs/data-warehouse) * [LLM observability](/docs/ai-engineering) * [Error tracking](/docs/error-tracking) * [Why PostHog?](/why) * [Products](/products) * [Pricing](/pricing) * [Docs](/docs) * [Community](/community) * [Company](/about) --- # Surveys - Docs - PostHog Overview Getting started Surveys ======= ### Collect feedback from your users. [Create your first survey](/docs/surveys/installation) ![](https://res.cloudinary.com/dmukukwp6/image/upload/q_100/v1/posthog.com/src/components/Home/Slider/images/surveys-hog) ### Questions? Ask Max AI. It's easier than reading through **592 docs articles**. Chat with Max AI ### Resources Real-world use cases to get you started * [###### Guide\ \ #### Get feedback and book user interviews with surveys\ \ Automate the process of finding the right users and booking interviews](/tutorials/feedback-interviews-site-apps) * [###### Guide\ \ #### How to create custom surveys\ \ Customize the look and feel of your surveys](/tutorials/survey) ### Survey templates Choose from many common survey types and launch them in a few clicks! * [#### Net Promoter Score (NPS)\ \ The benchmark for judging what users think of you\ \ ![](https://res.cloudinary.com/dmukukwp6/image/upload/q_100/v1/posthog.com/src/pages/docs/images/nps-survey)](/templates/nps-survey) * [#### Customer Satisfaction (CSAT)\ \ Get a vibe check on your product\ \ ![](https://res.cloudinary.com/dmukukwp6/image/upload/q_100/v1/posthog.com/src/pages/docs/images/csat-survey)](/templates/csat-survey) * [#### Customer Churn Rate (CCR)\ \ Find out why your users are saying goodbye\ \ ![](https://res.cloudinary.com/dmukukwp6/image/upload/q_100/v1/posthog.com/src/pages/docs/images/ccr-survey)](/templates/churn-survey) [Browse templates](/templates?filter=type&value=survey) * [Product OS](/docs/product-os) * [Product analytics](/docs/product-analytics) * [Web analytics](/docs/web-analytics) * [Session replay](/docs/session-replay) * [Feature flags](/docs/feature-flags) * [Experiments](/docs/experiments) * [Surveys](/docs/surveys) * [Data pipelines](/docs/cdp) * [Data warehouse](/docs/data-warehouse) * [LLM observability](/docs/ai-engineering) * [Error tracking](/docs/error-tracking) * [Why PostHog?](/why) * [Products](/products) * [Pricing](/pricing) * [Docs](/docs) * [Community](/community) * [Company](/about) --- # Feature flags - Docs - PostHog Overview Getting started Feature flags ============= ### Toggle features for cohorts or individuals to test the impact before rolling out to everyone. [Create your first feature flag](/docs/feature-flags/installation) ![](https://res.cloudinary.com/dmukukwp6/image/upload/q_100/v1/posthog.com/src/components/Home/Slider/images/feature-flags-hog) ### Questions? Ask Max AI. It's easier than reading through **592 docs articles**. Chat with Max AI ### Resources Real-world use cases to get you started * [###### Guide\ \ #### Best practices for feature flags\ \ Contains 9 examples](/docs/feature-flags/best-practices) * [###### Guide\ \ #### Feature flags API\ \ Evaluate and update with the /decide/ endpoint](/tutorials/api-feature-flags) * [###### Guide\ \ #### Canary releases\ \ Gradual rollouts to a subset of users](/tutorials/canary-release) * [###### Guide\ \ #### Bootstrapping feature flags in React\ \ Available at client-side load time](/tutorials/bootstrap-feature-flags-react) * [###### Guide\ \ #### How to set up one-time feature flags\ \ Show a component or content just once](/tutorials/one-time-feature-flags) * [###### Guide\ \ #### Cookie-based feature flags\ \ Storing feature flag values locally](/tutorials/one-time-feature-flags) [Explore guides](/docs/feature-flags/tutorials) ### Nifty things you can do with feature flags Some use cases you may not have thought of * [#### Add popups to a React app\ \ Using payloads to send arbitrary data to your frontend](/tutorials/react-popups) * [#### Location-based site banner\ \ Regional announcements or country-based alerts](/tutorials/location-based-banner) * [#### Sampling with feature flags and local evaluation\ \ Use flags to capture a subset of events for analysis](/tutorials/track-high-volume-apis) [Visit the manual](/docs/feature-flags/manual) * [Product OS](/docs/product-os) * [Product analytics](/docs/product-analytics) * [Web analytics](/docs/web-analytics) * [Session replay](/docs/session-replay) * [Feature flags](/docs/feature-flags) * [Experiments](/docs/experiments) * [Surveys](/docs/surveys) * [Data pipelines](/docs/cdp) * [Data warehouse](/docs/data-warehouse) * [LLM observability](/docs/ai-engineering) * [Error tracking](/docs/error-tracking) * [Why PostHog?](/why) * [Products](/products) * [Pricing](/pricing) * [Docs](/docs) * [Community](/community) * [Company](/about) --- # Data pipelines: CDP integrations - Docs - PostHog Overview Data pipelines: CDP integrations ================================ Last updated: Dec 03, 2024 |[Edit this page](https://github.com/PostHog/posthog.com/tree/master/contents/docs/cdp/index.md) On this page * Use cases Data pipeline provides a full-featured customer data platform (CDP) in PostHog, with full-service integrations for ingesting, transforming, and sending data to destinations: * **Transformations** extend PostHog's functionality by filtering and transforming analytics data. * **Sources** let you [ingest data](/docs/cdp/sources) from your existing systems, and join them to existing person and event data using [data warehouse](/docs/data-warehouse) . * **Destinations** send PostHog data to other sources in [realtime](/docs/cdp/destinations) or as [batch exports](/docs/cdp/batch-exports) which reliably send data to a destination on a schedule. Destinations require the data pipeline add-on in [your billing settings](https://us.posthog.com/organization/billing) . Use cases --------- Pipelines can be used for a wide variety of use cases, such as: * **Send event data to a data warehouse.** If you have a data lake or data warehouse, you can use destinations to send PostHog event data there, while ensuring you still have that data in PostHog to perform your analytics processes. * **Send event data via webhooks.** You can use our realtime destinations to send event data to external services through [webhooks](/docs/cdp/destinations/webhook) . This is useful when you want to push event data to tools like [Slack](/docs/cdp/destinations/slack) , [Hubspot](/docs/cdp/destinations/hubspot) , or [Intercom](/docs/cdp/destinations/intercom) . * **Enforce event schemas.** By default, PostHog does not enforce schemas on events it receives. However, a transformation could do so, preventing ingestion of events that do not match the specified schema in order to keep your data clean and following specific guidelines you need it to follow. * **Label events.** To facilitate sorting through your events, you can use transformations to determine arbitrary logic to label an event (e.g. by setting a `label` property). This can help you tailor your metrics in PostHog, as well as facilitate data ordering if you ever use PostHog data elsewhere. For a full list of transformations and destinations currently available, see the [destinations](https://us.posthog.com/pipeline/destinations) and [transformations](https://us.posthog.com/pipeline/transformations) tabs under data pipeline in-app. ### Questions? Ask Max AI. It's easier than reading through **592 docs articles**. Chat with Max AI ### Community questions Ask a questionLogin ### Was this page useful? HelpfulCould be better Next article ### Link a source PostHog enables you to link your most important data from sources like your CRM, payment processor, or database. Once linked, you can combine this data with the product analytics data already in PostHog and query across all of it. To link a source, go to the Integrations tab, and click the Sources tab. On that page, you have an option to create a managed source such as: Stripe Hubspot Zendesk Postgres MySQL Azure SQL Server Snowflake Vitally Chargebee The other option is a self-managed source… [Read next article](/docs/cdp/sources) * [Product OS](/docs/product-os) * [Product analytics](/docs/product-analytics) * [Web analytics](/docs/web-analytics) * [Session replay](/docs/session-replay) * [Feature flags](/docs/feature-flags) * [Experiments](/docs/experiments) * [Surveys](/docs/surveys) * [Data pipelines](/docs/cdp) * [Data warehouse](/docs/data-warehouse) * [LLM observability](/docs/ai-engineering) * [Error tracking](/docs/error-tracking) * [Why PostHog?](/why) * [Products](/products) * [Pricing](/pricing) * [Docs](/docs) * [Community](/community) * [Company](/about) --- # LLM observability - Documentation - PostHog Overview Getting started LLM observability ================= ### Gather data for your AI and LLM products usage and performance. [Start capturing LLM data](/docs/ai-engineering/observability) ![](https://res.cloudinary.com/dmukukwp6/image/upload/q_100/robot_960530c306) ### Resources Real-world use cases to get you started * [###### Guide\ \ #### How to set up LLM analytics for ChatGPT\ \ Track API usage, cost, and latency.](/tutorials/chatgpt-analytics) * [###### Guide\ \ #### How to set up LLM analytics for Cohere\ \ Track your Cohere usage, costs, and latency.](/tutorials/cohere-analytics) * [###### Guide\ \ #### How to set up LLM analytics for Anthropic's Claude\ \ Monitor costs per model, user, and more.](/tutorials/anthropic-analytics) [Explore guides](/docs/ai-engineering/tutorials) * [Product OS](/docs/product-os) * [Product analytics](/docs/product-analytics) * [Web analytics](/docs/web-analytics) * [Session replay](/docs/session-replay) * [Feature flags](/docs/feature-flags) * [Experiments](/docs/experiments) * [Surveys](/docs/surveys) * [Data pipelines](/docs/cdp) * [Data warehouse](/docs/data-warehouse) * [LLM observability](/docs/ai-engineering) * [Error tracking](/docs/error-tracking) * [Why PostHog?](/why) * [Products](/products) * [Pricing](/pricing) * [Docs](/docs) * [Community](/community) * [Company](/about) --- # Error tracking - Docs - PostHog Overview Getting started Error tracking ============== ### Track and monitor errors and exceptions in your code. [Installation guide](/docs/error-tracking/installation) ![](https://res.cloudinary.com/dmukukwp6/image/upload/q_100/error_f2df714c47) ### Questions? Ask Max AI. It's easier than reading through **592 docs articles**. Chat with Max AI ### Resources Real-world use cases to get you started * [###### Guide\ \ #### How to correlate errors with product performance using Sentry\ \ Learn how to combine Sentry errors with PostHog data](/tutorials/sentry-plugin-tutorial) * [###### Article\ \ #### In-depth: PostHog vs Sentry\ \ Get a full overview of how PostHog and Sentry compare](/blog/posthog-vs-sentry) * [###### Article\ \ #### What is real user monitoring (and how to set it up)\ \ How to set up RUM to get more context on errors](/product-engineers/real-user-monitoring) [Visit the manual](/docs/error-tracking/installation) * [Product OS](/docs/product-os) * [Product analytics](/docs/product-analytics) * [Web analytics](/docs/web-analytics) * [Session replay](/docs/session-replay) * [Feature flags](/docs/feature-flags) * [Experiments](/docs/experiments) * [Surveys](/docs/surveys) * [Data pipelines](/docs/cdp) * [Data warehouse](/docs/data-warehouse) * [LLM observability](/docs/ai-engineering) * [Error tracking](/docs/error-tracking) * [Why PostHog?](/why) * [Products](/products) * [Pricing](/pricing) * [Docs](/docs) * [Community](/community) * [Company](/about) --- # Identifying users - Docs - PostHog Identifying users Identifying users ================= Last updated: Feb 21, 2025 |[Edit this page](https://github.com/PostHog/posthog.com/tree/master/contents/docs/product-analytics/identify.mdx) On this page * How identify works * Best practices when using identify * 1\. Call identify as soon as you're able to * 2\. Use unique strings for distinct IDs * 3\. Set up person profiles and properties * Get the current user's distinct ID * Reset * Alias: Assigning multiple distinct IDs to the same user * Troubleshooting and FAQs * What happens if you call identify or alias with invalid inputs? * How to merge users * How to split a merged user back into separate users * How are properties managed when merging users? * How are properties managed when identifying anonymous users? Linking events to specific users enables you to build a full picture of how they're using your product across different sessions, devices, and platforms. This is straightforward to do when [capturing backend events](/docs/product-analytics/capture-events?tab=Node.js) , as you associate events to a specific user using `distinct_id`, which is a required argument. However, on the [frontend](/docs/getting-started/send-events#sending-custom-properties-on-an-event) , a `distinct_id` is not a required argument and you can capture events anonymously. To link events to specific users, call `identify`: WebAndroidiOSReact NativeFlutter ` posthog.identify( 'distinct_id', // Replace 'distinct_id' with your user's unique identifier { email: 'max@hedgehogmail.com', name: 'Max Hedgehog' } // optional: set additional person properties ); ` Events captured after calling `identify` are identified events and this creates a person profile if one doesn't exist already. Under our current [pricing](/pricing) , anonymous events can be up to 4x cheaper than identified events (due to the cost of processing them), so it's recommended you only capture identified events when needed. How identify works ------------------ When a user starts browsing your website or app, PostHog automatically assigns them an **anonymous ID**, which is stored locally. This enables us to track anonymous users – even across different sessions. > **Note:** depending on your [persistence configuration](/docs/libraries/js#persistence) > , the anonymous ID may not be stored, and thus regenerated across sessions. By calling `identify` with a `distinct_id` of your choice (usually the user's ID in your database, or their email), you link the anonymous ID and distinct ID together. Thus all past and future events made with that anonymous ID are now associated with the distinct ID. This enables you to do things like associate events with a user from before they log in for the first time, or associate their events across different devices or platforms. > **Using `identify` in the backend:** > > Although it is technically possible to call `identify` using our backend SDKs, it is typically most useful in frontends. This is because there is no concept of anonymous sessions in the backend SDKs. Best practices when using identify ---------------------------------- ### 1\. Call `identify` as soon as you're able to In your frontend, you should call `identify` as soon as you're able to. Typically, this is every time your app loads for the first time, and directly after your users log in. This ensures that events sent during your users' sessions are correctly associated with them. You only need to call `identify` once per session, and you should avoid calling it multiple times unnecessarily. If you call `identify` multiple times with the same data without reloading the page in between, PostHog will ignore the subsequent calls. ### 2\. Use unique strings for distinct IDs If two users have the same distinct ID, their data is merged and they are considered one user in PostHog. Two common ways this can happen are: * Your logic for generating IDs does not generate sufficiently strong IDs and you can end up with a clash where 2 users have the same ID. * There's a bug, typo, or mistake in your code leading to most or all users being identified with generic IDs like `null`, `true`, or `distinctId`. PostHog also has built-in protections to stop the most common distinct ID mistakes. See the [FAQ](/docs/data/identify#what-happens-if-you-call-identify-or-alias-with-invalid-inputs) at the end of this page for more details. ### 3\. Set up person profiles and properties You'll notice that one of the parameters in the `identify` method is a `properties` object. This enables you to set [person properties](/docs/getting-started/person-properties) . Whenever possible, we recommend passing in all person properties you have available each time you call identify, as this ensures their person profile on PostHog is up to date. Person properties can also be set using a `capture` and not only with `identify`. See our [person properties docs](/docs/getting-started/person-properties) for more details on how to work with them and best practices. Get the current user's distinct ID ---------------------------------- You may find it helpful to get the current user's distinct ID. For example, to check whether you've already called `identify` for a user or not. To do this, call the following: WebiOSAndroidReact NativeFlutter ` posthog.get_distinct_id() ` The ID returned is either the ID automatically generated by PostHog or the ID that has been passed by a call to `identify()`. Reset ----- If a user logs out on your frontend, you should call `reset()` to unlink any future events made on that device with that user. This is important if your users are sharing a computer, as otherwise all of those users are grouped together into a single user due to shared cookies between sessions. **We strongly recommend you call `reset` on logout even if you don't expect users to share a computer.** You can do that like so: WebiOSAndroid ` posthog.reset() ` If you _also_ want to reset the `device_id` so that the device will be considered a new device in future events, you can pass `true` as an argument: Web ` posthog.reset(true) ` Alias: Assigning multiple distinct IDs to the same user ------------------------------------------------------- Sometimes, you want to assign multiple distinct IDs to a single user. For example, if a distinct ID which is typically used on the frontend is not available in certain parts of your backend code, you can use `alias` to connect the frontend distinct ID to one accessible on the backend. This will merge all past and future events into the same user. In the below example, we assign the user with `distinct_id` another ID: `alias_id`. This means that any events submitted using either `distinct_id` or `alias_id` will be associated with the same user. Node.jsWebPythonPHPRubyGoJava Terminal ` client.alias({ distinctId: 'distinct_id', alias: 'alias_id', }) ` There are two requirements when assigning an `alias_id`: 1. It cannot be associated with more than one `distinct_id`. 2. The `alias_id` **must not** have been previously used as the `distinct_id` argument of an `identify()` or `alias()` call. For example: Assume we previously called `posthog.identify('distinct_id_one')`. It is not possible to use `distinct_id_one` as an alias ID: Node.jsWebPythonPHPRubyGoJava ` // Assume we previously identified a user with 'distinct_id_one' using posthog.identify('distinct_id_one') // ❌ The following is not possible: // You cannot use distinct_id_one as an alias for any_other_id client.alias({ distinctId: 'any_other_id', alias: 'distinct_id_one', }) ` You can view whether a user can be merged into another user using `alias` when [viewing their properties](/docs/data/user-properties#how-to-view-user-properties) in the PostHog app: Under their ID, you'll see `Merge restrictions`. This will indicate whether there are merge restrictions or not – i.e., whether you can use their ID as an `alias_id` or not. ![Merge restrictions tooltipl](https://res.cloudinary.com/dmukukwp6/image/upload/v1710055416/posthog.com/contents/images/docs/data/identify/merge-restrictions-tooltip-light-mode.png)![Merge restrictions tooltipl](https://res.cloudinary.com/dmukukwp6/image/upload/v1710055416/posthog.com/contents/images/docs/data/identify/merge-restrictions-tooltip-dark-mode.png) > **Note:** When calling `alias` in the frontend SDKs, if you have set any properties onto the anonymous user, they are merged into the user with `distinct_id`. For more details, see the FAQ on [how properties are managed when identifying anonymous users](/docs/data/identify#how-are-properties-managed-when-identifying-anonymous-users) > . Troubleshooting and FAQs ------------------------ ### What happens if you call `identify` or `alias` with invalid inputs? When calling either of these with invalid inputs (such as in the examples described in this doc e.g., using null strings with `identify`, or by trying to use a distinct ID of another user as an alias ID), the following will happen: 1. We process the event normally (it will be ingested and show up in the UI). 2. Merging users will be refused and an ingestion warning will be logged (see [ingestion warnings](/manual/data-management#ingestion-warnings) for more details). 3. The event will be only be tied to the user associated with `distinct_id`. PostHog also has built-in protections to stop the most common distinct ID mistakes. See the FAQ at the end of this page for more details. * We do not allow identifying users with empty space strings of any length – e.g.,`' '`, `' '`, etc. * We do not allow identifying users with the following strings (case insensitive): * `anonymous` * `guest` * `distinctid` * `distinct_id` * `id` * `not_authenticated` * `email` * `undefined` * `true` * `false` * We do not allow identifying users with the following strings (case sensitive): * `[object Object]` * `NaN` * `None` * `none` * `null` * `0` * We do not allow identifying a user that has already been identified with a different distinct ID. For example: WebAndroidiOS ` posthog.identify( 'distinct_id_one', {} {}, ); posthog.identify( 'distinct_id_two', {} {}, ); // ❌ Not possible, since we already identified this user with "distinct_id_one" // so we cannot identify them again with a different distinct ID "distinct_id_two" ` ### How to merge users It may happen that, due to implementation issues, the same user in your product has multiple users in PostHog associated with them. In these cases, you can use `$merge_dangerously` to merge multiple PostHog users into a single user. > **⚠️ Warnings:** > > 1. Merging users with `$merge_dangerously` is irreversible and has no safeguards! Be careful not to merge users who should not be merged together. Due to the dangers, we don't recommend you merge users frequently, but rather as a one-off for recovering from implementation problems. > 2. Before using `$merge_dangerously`, first check if [alias](/docs/product-analytics/identify#alias-assigning-multiple-distinct-ids-to-the-same-user) > would better suit your needs. Merging users is done by sending a `$merge_dangerously` event: Node.jsWebpyGoRuby Terminal ` client.capture({ distinctId: 'distinct_id_of_user_to_merge_into', event: '$merge_dangerously', properties: { alias: 'distinct_id_of_user_to_be_merged', }, }) ` ### How to split a merged user back into separate users If you've accidentally linked distinct IDs together that represent different users, or you've made a mistake when merging users, it's possible to split their combined user back into separate users. You can do this in the PostHog app by navigating to the user you'd like split, and then clicking "Split IDs" in the top right corner. > **Warning:** This will treat the distinct IDs as separate users for future events. However, there is no guarantee as to how past events will be treated – they may be be considered separate users, or be considered a single user for some or all events. ### How are properties managed when merging users? When a `User B` is merged into another `User A`, all the properties of the `User B` are added to `User A`. If there is a conflict, the properties of `User A` are prioritized over `User B`. For example: Node.js ` /* Assume User A has the properties: { name: 'User A', location: 'London', } */ /* Assume User B has the properties: { name: 'User B', location: 'Rome', phone: '0800-POSTHOG', } */ client.capture({ distinctId: 'distinct_id_of_user_A', event: '$merge_dangerously', properties: { alias: 'distinct_id_of_user_B', }, }) /* User B has merged into User A. The resulting user will now have properties: { name: 'User A', location: 'London', phone: '0800-POSTHOG', } */ ` ### How are properties managed when identifying anonymous users? When an anonymous user is identified as `User A`, all the properties of the anonymous user are added to `User A`. If there is a conflict, the properties of `User A` are prioritized over the anonymous user. For example: Web ` /* Assume existing User A has the properties: { name: 'User A', location: 'London', timezone: 'GMT', } */ /* Assume User A uses your app on a new device, but has not yet logged in and so identify has not been called. They are still an "anonymous user" New properties are set for this "anonymous user" */ posthog.capture( 'event_name', { $set: { name: 'Anonymous User', phone: '0800-POSTHOG', }, } ) // After log in, we identify the user as User A client.identify({ distinctId: 'user_A', properties: { timezone: 'GMT+8', }, }) /* User A will now have properties: { name: 'User A', location: 'London', phone: '0800-POSTHOG', timezone: 'GMT+8' } */ ` ### Questions? Ask Max AI. It's easier than reading through **592 docs articles**. Chat with Max AI ### Community questions Ask a questionLogin ### Was this page useful? HelpfulCould be better Next article ### Person properties Person properties enable you to capture, manage, and analyze specific data about a user. You can use them to create filters or cohorts , which can then be used in insights , feature flags , surveys , and more. Person properties are stored on person profiles . When setting properties, a person profile is created if it doesn't already exist. How to set person properties What is the difference between set and set\_once ? How to remove person properties Similarly to how you set properties… [Read next article](/docs/product-analytics/person-properties) * [Product OS](/docs/product-os) * [Product analytics](/docs/product-analytics) * [Web analytics](/docs/web-analytics) * [Session replay](/docs/session-replay) * [Feature flags](/docs/feature-flags) * [Experiments](/docs/experiments) * [Surveys](/docs/surveys) * [Data pipelines](/docs/cdp) * [Data warehouse](/docs/data-warehouse) * [LLM observability](/docs/ai-engineering) * [Error tracking](/docs/error-tracking) * [Why PostHog?](/why) * [Products](/products) * [Pricing](/pricing) * [Docs](/docs) * [Community](/community) * [Company](/about) --- # Data warehouse - Docs - PostHog Overview Getting started Data warehouse ============== ### A single source for all your important data. [Link your first source](/docs/cdp/sources) ![](https://res.cloudinary.com/dmukukwp6/image/upload/q_100/v1/posthog.com/contents/images/products/data-warehouse/warehouse-hog) ### Questions? Ask Max AI. It's easier than reading through **592 docs articles**. Chat with Max AI ### Resources Real-world use cases to get you started * [###### Guide\ \ #### How to set up Stripe reports\ \ Connect your revenue data from Stripe to PostHog](/tutorials/stripe-reports) * [###### Guide\ \ #### How to set up Hubspot reports\ \ Connect your sales data from Hubspot to PostHog](/tutorials/hubspot-reports) * [###### Guide\ \ #### The power of SQL's sum() aggregation\ \ Unlock a new level of aggregation customization](/tutorials/hogql-sum-aggregation) [Visit the manual](/docs/data-warehouse/query) * [Product OS](/docs/product-os) * [Product analytics](/docs/product-analytics) * [Web analytics](/docs/web-analytics) * [Session replay](/docs/session-replay) * [Feature flags](/docs/feature-flags) * [Experiments](/docs/experiments) * [Surveys](/docs/surveys) * [Data pipelines](/docs/cdp) * [Data warehouse](/docs/data-warehouse) * [LLM observability](/docs/ai-engineering) * [Error tracking](/docs/error-tracking) * [Why PostHog?](/why) * [Products](/products) * [Pricing](/pricing) * [Docs](/docs) * [Community](/community) * [Company](/about) --- # How to watch recordings - Docs - PostHog Watching recordings How to watch recordings ======================= Last updated: Jan 05, 2025 |[Edit this page](https://github.com/PostHog/posthog.com/tree/master/contents/docs/session-replay/how-to-watch-recordings.mdx) On this page * How to create a playlist * Further reading To watch recordings, you can visit the [Replay](https://app.posthog.com/replay) page. When watching replays, you can change the playback speed, as well as select the option 'skip inactivity' - this skips parts of the recording where the user was inactive on the page. You can also watch recordings by clicking on any data point in an insight. This opens a list of persons and displays a "watch recording" button if available. This is especially useful in [funnels](/docs/product-analytics/funnels) , where you can drill down and watch recordings of users who converted or dropped off. You can also click into the "Recordings" tab for a person to view all their recordings. How to create a playlist ------------------------ It's possible to create dynamic playlists of replays that you're interested in. To do so, go to the [Playlists tab](https://app.posthog.com/replay/playlists) and click "New playlist". You'll then have the option to apply filters to specify the criteria videos in the playlist should meet, for example: * Recording time and duration. * Event and [action](/docs/data/actions) filters. * Person and [cohort](/docs/data/cohorts) filters. These require capturing identified events. * Console log level filters: Log, warn, and error. Further reading --------------- * [How to use session replays to get a deeper understanding of user behavior](/tutorials/explore-insights-session-recordings) ### Questions? Ask Max AI. It's easier than reading through **592 docs articles**. Chat with Max AI ### Community questions Ask a questionLogin ### Was this page useful? HelpfulCould be better Next article ### How to control which sessions you record There are several ways to control which sessions you record: Programmatically start and stop recordings Ensure your domain is added to the authorized domains list . Set disable\_session\_recording: true in your config . Manually start recording by calling posthog.startSessionRecording() . Similarly, you can stop the recording at any point by calling posthog.stopSessionRecording() . By default, startSessionRecording obeys any ingestion controls you've set - so you might call start and not… [Read next article](/docs/session-replay/how-to-control-which-sessions-you-record) * [Product OS](/docs/product-os) * [Product analytics](/docs/product-analytics) * [Web analytics](/docs/web-analytics) * [Session replay](/docs/session-replay) * [Feature flags](/docs/feature-flags) * [Experiments](/docs/experiments) * [Surveys](/docs/surveys) * [Data pipelines](/docs/cdp) * [Data warehouse](/docs/data-warehouse) * [LLM observability](/docs/ai-engineering) * [Error tracking](/docs/error-tracking) * [Why PostHog?](/why) * [Products](/products) * [Pricing](/pricing) * [Docs](/docs) * [Community](/community) * [Company](/about) --- # Creating insights - Docs - PostHog Creating insights Creating insights ================= Last updated: Mar 19, 2024 |[Edit this page](https://github.com/PostHog/posthog.com/tree/master/contents/docs/product-analytics/insights.mdx) On this page * Types of insight * Trends * Funnels * Retention * User Paths * Stickiness * Lifecycle * SQL (beta) * How to create an insight * Other ways to create new insights Insights are the main building blocks of product analytics. They enable you visualize your [events](/docs/data/events) and [actions](/docs/data/actions) and analyze how people use your products. Types of insight ---------------- ### Trends ![Trends insight](https://res.cloudinary.com/dmukukwp6/image/upload/posthog.com/contents/images/docs/product-analytics/trends-light.png)![Trends insight](https://res.cloudinary.com/dmukukwp6/image/upload/posthog.com/contents/images/docs/product-analytics/trends-dark.png) [Trends](/docs/product-analytics/trends) enable you to track how metrics change over time and use formulas to create custom metrics. ### Funnels ![Funnels insight](https://res.cloudinary.com/dmukukwp6/image/upload/posthog.com/contents/images/docs/product-analytics/funnel-light.png)![Funnels insight](https://res.cloudinary.com/dmukukwp6/image/upload/posthog.com/contents/images/docs/product-analytics/funnel-dark.png) Use [funnels](/docs/user-guides/funnels) to understand conversion between steps, identify possible causes of success or failure, and track how conversion changes over time. ### Retention ![Retention insight](https://res.cloudinary.com/dmukukwp6/image/upload/posthog.com/contents/images/docs/product-analytics/retention-light.png)![Retention insight](https://res.cloudinary.com/dmukukwp6/image/upload/posthog.com/contents/images/docs/product-analytics/retention-dark.png) [Retention](/docs/user-guides/retention) insights enable you to see how often users return and compare retention for between [cohorts](/docs/data/cohorts) . ### User Paths ![User paths insight](https://res.cloudinary.com/dmukukwp6/image/upload/posthog.com/contents/images/docs/product-analytics/user-paths-light.png)![User paths insight](https://res.cloudinary.com/dmukukwp6/image/upload/posthog.com/contents/images/docs/product-analytics/user-paths-dark.png) [Users paths](/docs/user-guides/paths) help you understand how users navigate your app or website, where they get stuck, or why they aren't discovering new features. ### Stickiness ![Stickiness insight](https://res.cloudinary.com/dmukukwp6/image/upload/posthog.com/contents/images/docs/product-analytics/stickiness-light.png)![Stickiness insight](https://res.cloudinary.com/dmukukwp6/image/upload/posthog.com/contents/images/docs/product-analytics/stickiness-dark.png) Use [stickiness](/docs/product-analytics/stickiness) insights to analyze how deeply users are engaging with your product, identify your most engaged users, and which features drive the most engagement. ### Lifecycle ![Lifecycle insight](https://res.cloudinary.com/dmukukwp6/image/upload/posthog.com/contents/images/docs/product-analytics/lifecycle-light.png)![Lifecycle insight](https://res.cloudinary.com/dmukukwp6/image/upload/posthog.com/contents/images/docs/product-analytics/lifecycle-dark.png) [Lifecycle](/docs/user-guides/lifecycle) insights are helpful for checking your product's health by breaking users down by new, returning, resurrecting, and dormant. ### SQL (beta) ![SQL insight](https://res.cloudinary.com/dmukukwp6/image/upload/posthog.com/contents/images/docs/product-analytics/sql-light.png)![SQL insight](https://res.cloudinary.com/dmukukwp6/image/upload/posthog.com/contents/images/docs/product-analytics/sql-dark.png) Use [SQL](/docs/product-analytics/sql) insights to create custom tables based on your data using SQL. How to create an insight ------------------------ To create a new insight, navigate to the [product analytics tab](https://us.posthog.com/insights) and click on `New insight`. You can also select the type of insight you'd like to create from the dropdown. You can then customize the insight and save it. You can change the type of insight you're creating by clicking on the tabs at the top. ### Other ways to create new insights 1. By clicking the "+" symbol next to "Product analytics" in the sidebar. 2. By clicking "Add insight" in the top right of any [dashboard](/docs/product-analytics/dashboards) . Insights you create this way are automatically added to the dashboard. 3. Inside any notebook. Insights created in a Notebook aren't saved to 'Your Insights' automatically – see our Notebook docs for more. ### Questions? Ask Max AI. It's easier than reading through **592 docs articles**. Chat with Max AI ### Community questions Ask a questionLogin ### Was this page useful? HelpfulCould be better Next article ### Identifying users How identify works Best practices when using identify 1. Call identify as soon as you're able to 2. Use unique strings for distinct IDs 3. Set up person profiles and properties Get the current user's distinct ID You may find it helpful to get the current user's distinct ID. For example, to check whether you've already called identify for a user or not. To do this, call the following: The ID returned is either the ID automatically generated by PostHog or the ID that has been passed by a call… [Read next article](/docs/product-analytics/identify) * [Product OS](/docs/product-os) * [Product analytics](/docs/product-analytics) * [Web analytics](/docs/web-analytics) * [Session replay](/docs/session-replay) * [Feature flags](/docs/feature-flags) * [Experiments](/docs/experiments) * [Surveys](/docs/surveys) * [Data pipelines](/docs/cdp) * [Data warehouse](/docs/data-warehouse) * [LLM observability](/docs/ai-engineering) * [Error tracking](/docs/error-tracking) * [Why PostHog?](/why) * [Products](/products) * [Pricing](/pricing) * [Docs](/docs) * [Community](/community) * [Company](/about) ---