Most teams trust their return-on-ad-spend number more than any other figure in the business. It decides which channels get more budget next month. So it is worth asking a slightly uncomfortable question: is the number actually counting people, or is it counting devices?
One shopper, three ghosts
Consider a single customer. She sees your brand on Meta while browsing on her laptop. Two days later she taps a TikTok ad on her iPhone. She finally converts a week after that inside your app on an Android tablet she shares with her family. To most analytics stacks, that is three anonymous identifiers with no obvious link between them.
The consequences compound quietly. The conversion is credited to whichever last touch the app happened to see. The earlier paid touches look like wasted spend. And because the same person can appear in more than one channel report, your blended acquisition counts are inflated while your per-channel efficiency is understated.
What an identity graph actually does
An identity graph is a transitive closure over every identifier you observe, including device advertising IDs, first-party login hashes, click IDs, and more. When two identifiers ever co-occur on the same event or resolve to the same logged-in customer, they fuse into one canonical person. Do that across every event and the three ghosts above collapse into a single customer with a single, ordered journey.
- Device IDs (IDFA, GPS ADID, IDFV, Android ID) tie app sessions together.
- First-party anchors, such as hashed email and phone captured at login, bridge web and app without ever touching plaintext PII.
- Click and browser IDs (gclid, fbclid, fbp) connect the ad click to the landing session.
Once the journey is whole, attribution has something honest to work with: a real sequence of touches leading to a real conversion, counted exactly once.
What happens to the number
Two things, usually. First, blended ROAS improves, not because you spent less, but because you stop double-counting the same person across channels. Second, the credit redistributes. Upper-funnel channels that seed demand finally get recognised for the conversions they started, and last-touch channels look a little less heroic. That redistribution is the point: it is the difference between optimising for what closes the sale and optimising for what actually drives it.
The identity graph alone paid for the platform. We were double-counting acquisitions across web and app and never knew it.
The catch
Identity resolution is only as good as its discipline. Canonical IDs must be recomputed as new edges arrive, historical events must be re-attributed when a previously anonymous user logs in, and the whole thing has to run without ever leaking one customer into another tenant. Done carelessly it produces confident nonsense. Done well, it is the single highest-leverage fix available to a performance-marketing team because every downstream number inherits its correctness.