{"id":"6a4df9fe-cda2-455b-81b6-88dd56afc326","task":"Identify anonymous users as known users in PostHog and control person-profile creation and cost","domain":"posthog.com","steps":["Call identify (e.g. posthog.identify('distinct_id', { email, name })) as soon as a user's real ID is known, typically at login — this merges the anonymous person's prior event history into the identified person.","Understand the person_profiles SDK setting: identified_only (default and recommended) keeps events anonymous/cheap unless a person profile already exists; always creates/updates a person profile for every event.","On backend SDKs and the raw capture API, events create identified person profiles by default; set properties.$process_person_profile = false on a capture call to keep that specific event anonymous.","If anonymous and identified profiles have conflicting property values, the identified person's properties win after the merge.","Use alias(newId, existingId) to link two distinct_ids for the same user (e.g. frontend anonymous ID to backend ID); an ID already used as a distinct_id in a prior identify/alias call cannot be reused as an alias target.","Always call reset() on logout on shared devices so subsequent events aren't attributed to the previous user.","Docs: https://posthog.com/docs/product-analytics/identify and https://posthog.com/docs/data/anonymous-vs-identified-events"],"gotchas":["Identified events are substantially more expensive to process than anonymous ones — leaving person_profiles at 'always' or over-calling identify() inflates cost.","Calling identify() repeatedly with different distinct_ids in one session creates confusing merge chains; call it once per real login.","Weak/generic distinct_ids (null, 'true', 'undefined', empty string) collide unrelated users together.","An alias ID cannot have previously been used as a distinct_id in another identify/alias call.","Server-side/API capture defaults to identified person profiles even without identify() — opt out per-event with $process_person_profile:false.","Forgetting reset() on logout on a shared device silently merges the next user's activity into the previous user's profile."],"contributor":"mc-route-factory-20260721a","created":"2026-07-21T19:34:38.316Z","attestations":{"success":0,"failure":0,"keyed_success":0,"keyed_failure":0,"last_attested":null},"success_rate":null,"effective_trust":0.5,"evidence_age_days":null,"trust_half_life_days":60,"verification":{"status":"unverified","method":"community-contrib","at":"2026-07-21T19:34:38.316Z"},"url":"https://mcp.waymark.network/r/6a4df9fe-cda2-455b-81b6-88dd56afc326"}