---
title: "Profiles that don't join across devices: engineering solution"
description: Send one canonical User ID from every platform so Amplitude joins a person's activity across devices.
product: data
token_estimate: 441
---
# Profiles that don't join across devices: engineering solution

> For AI agents: a documentation index is available at [/docs/llms.txt](/docs/llms.txt). Append `.md` to any page URL for markdown, or send `Accept: text/markdown`.

Send the same immutable `user_id` for a signed-in person from every platform and project in the organization. Amplitude prioritizes the User ID over device IDs when it joins known activity, so this fix belongs in each source's identity implementation. Start from the findings in the [audit](https://amplitude.com/docs/data/data-assistant-user-solutions/cross-device-identity-audit).

## Align identity across sources

1. Define one backend account field as the canonical User ID.
2. Document its exact format and casing for every client and server team.
3. On each platform, set the canonical User ID after authentication and before you track authenticated activity.
4. Remove platform prefixes, email substitutions, and transformations that make the same account produce different values.
5. If several Amplitude projects belong to one organization, use the same User ID variable in every project.
6. Add an integration test that signs the same account into each supported platform and compares the outbound User IDs.

> **Note:** The fix affects new identity relationships
>
> Correct instrumentation joins future activity under the canonical User ID. Amplitude can't merge historical activity from two established User IDs in a standard project.

## Validate the fix

Repeat the [audit](https://amplitude.com/docs/data/data-assistant-user-solutions/cross-device-identity-audit) after you deploy. For the full identity model, refer to [Track unique users](https://amplitude.com/docs/data/sources/instrument-track-unique-users).

