
How to settle an attribution argument by opening one order
Most arguments about channel performance aren't arguments about data. Identify the type first, because only one of the three is settled by opening a record.

A customer sees your Snapchat ad on their phone, thinks about it for a week, then searches your store name and buys on a laptop.
In most setups those are two separate records, which means two people. And every number you read afterwards rests on that: the source of the order, your repeat rate, customer value, exclusion audiences. So it's worth knowing what merges records in your setup and what doesn't.
Fourteen identifier types, in three groups.
Device and session. The first-party cookie, the user agent, the IP at the time of the event. These are the weakest, and none of them is enough to merge two records on its own.
Given by the customer. Email, phone, your store's own customer ID, the order ID. This is the strongest group, and most of it arrives with the order itself.
Given by the platform. Click identifiers that arrive inside the URL: fbclid, gclid, ttclid, sclid and the rest.
The third group is the one most setups drop, and it's the group that makes paid attribution possible at all. A click ID is the only identifier that you and the ad platform both recognise, so joining spend to orders on it is more reliable than joining on a UTM string somebody typed by hand.
A check you can run today: look at what your store actually sends with each order. If phone and customer ID aren't in there, you're building identity on one and a half groups out of three.
An anonymous visitor gets a profile on the first pageview. The moment they log in or buy, their whole prior history reattaches to the resolved profile, not just the events after they identified themselves.
Without that backfill, credit goes to the last device rather than the first source. Go back to the customer above: the Snapchat touch was recorded, but it sits on a profile nobody ever connected to anything, so the order gets written to brand search.
How to see this in your own data: open a first-touch report for a closed month and compare it with a last-touch report for the same month. If the two columns look similar, your profiles are probably fragmented and there are no connected journeys for the two models to disagree about.
Backfill works even for a customer who never logs in. The purchase alone is enough, because it carries an email, a phone and an order ID. Someone who never identifies themselves keeps an anonymous profile with its own history, and if they buy two months later, that history reattaches on the day they do.
An illustrative store with 4,832 orders in a month:
| Customer records | Orders per customer | |
|---|---|---|
| Before resolution | 4,100 | 1.18 |
| After resolution | 2,900 | 1.67 |
Same orders, same revenue, 1,200 duplicate records gone. The repeat rate moves from a number that suggests nobody comes back to one that makes you re-open your acquisition budget.
Those 1,200 records were people you were paying acquisition ads to reach, and they were already your customers. The decision that falls out of the table: before you raise an acquisition budget, check how much of your target audience is genuinely excluded because it bought from you before.
Once resolution is switched on, watch two numbers for a month. Customer record count should drop once and then settle. Exclusion audience size should grow in step. If record count falls and the audience doesn't move, you're building audiences from a different source and that's worth reviewing.
Apple's Hide My Email and similar services hand your store a different address for the same person. Identity keyed on email alone treats each address as a new customer.
The fix isn't to guess around it. The fix is to stop treating email as the primary key. With phone, customer ID, order ID and click identifiers all in the profile, a relay address becomes one weak signal among stronger ones, and known relay patterns aren't used as identity keys at all.
Guest checkout breaks identity the same way. Someone buys with one email, comes back a month later and buys with another email and the same phone number. If the phone reaches you with the order, the two records join. If it doesn't, they stay apart however long you wait.
In Flowfy, identity resolution across the fourteen identifier types and history backfill on identification are live today, and the order-level source, the customer journey and segments are all built on them.
One part of it stays on your side. Check what your store sends with every order: email, phone, customer ID, order ID. If any of those is missing, fix that first, because every attribution improvement after it stands on that.
And after resolution, don't read the new repeat rate as a performance gain. It's the same store with the duplicates removed, not the result of a campaign.

Most arguments about channel performance aren't arguments about data. Identify the type first, because only one of the three is settled by opening a record.

An 890 SAR order credited to a channel you didn't spend on this month. If you can't explain why, that number dies and takes every other figure from the same source with it.

No attribution model answers this question. The only method is a holdout, and it costs real money. Here's how to design one and which channel deserves it.