+80 XP

Omnichannel attribution: real-world application

A Beauty Insider member opens the Sephora app on a Tuesday night, tries three foundation shades in Virtual Artist, buys nothing. On Saturday she walks into a store, gets a Color IQ scan, leaves with a foundation, a cleanser and a mascara, and gives the phone number attached to her loyalty account at the register. Three weeks later she reorders the same foundation on sephora.com.

Which touch caused the in-store basket? In click-based reporting, none of them. The sale never happened in a browser, the app session and the store transaction live in different systems, and nothing links them. The only thing that makes that basket attributable is the loyalty ID, volunteered at the till in exchange for points. Sephora is the clearest case of a retailer treating that ID as the spine of measurement rather than as a CRM field, so this lesson stays with it: what the join produced, where it broke, and what changed once the answer landed.

Beauty Insider, launched in 2007 and now counting tens of millions of members in North America, works as an identity spine for a reason that has little to do with technology. The tier structure (Insider, VIB, Rouge) gives customers a motive to identify themselves on every transaction, including cash ones. Points, birthday gifts and status buy something no probabilistic match can produce: a deterministic link between the person standing in the store and the profile behind the app login. Assume the persistent profile the foundations lesson describes; the interesting question here is how much of the business that profile actually covers.

Run the arithmetic on your own file before you trust a single model output. Suppose 80% of store transactions carry a loyalty ID and 55% of web and app sessions are logged in. The share of paths where both the digital touch and the store purchase are joined is 0.80 × 0.55, about 44%. Fewer than half your cross-channel conversions are visible as cross-channel conversions, and the invisible half is not a random sample. It skews toward first-time visitors, gift buyers, tourists, people paying cash and anyone who declines to give a phone number to a cashier with a queue behind them. Weighting will not repair a hole shaped like that. The practical consequence: identity capture rate by store, by shift and by associate is a marketing metric, and it caps everything the analytics team can do downstream. Sephora's investment in app features designed to be used inside the store (shade scanning, review lookup, points balance) is partly a measurement investment, because every in-store app open is another confirmed link.

Two failure modes show up fast in beauty specifically. The first is gifting. In the weeks before Christmas a large share of units leave the store as presents, and the joined profile records a fragrance or a palette under the buyer's ID as though she chose it for herself. Propensity models trained on that data recommend the wrong products in January, and repeat-purchase rate, which is often used to sanity-check the credit model, collapses for Q4 cohorts for reasons that have nothing to do with media. The fix is unglamorous: flag gift-wrap SKUs, gift receipts and gift-card redemptions, and exclude those baskets from the training set.

The second is legal. In August 2022 the California Attorney General announced a $1.2 million settlement with Sephora over CCPA violations, including failure to honour Global Privacy Control browser signals. Whatever the specifics, the lesson for attribution is structural: an opt-out does not just remove a row from a table, it removes a person from the joined view, and opt-outs are not evenly distributed across age, geography or spend. The identified panel drifts away from the actual customer base month by month, so any lift you measure on it generalises less than it did last quarter. Anyone building an identity spine should be reviewing consent propagation into the identity graph with legal, not with the media agency.

One more trap: store-visit conversions reported by ad platforms are modelled from location panels, while a loyalty scan at the register is deterministic. Put both in the same report and you count the same Saturday trip twice.

How Data-Driven Attribution Works in Google Analytics 4

Watch on YouTube

What Sephora did with the answer is the part most teams skip. Once store sales can be traced back to app and web touches, the finding is that the app is a store driver, and that finding is unusable if digital and stores are separate businesses with separate P&Ls and separate bonus schemes. Sephora restructured, merging its digital and physical retail teams into a single omni-retail organisation in 2015 and standing up an innovation lab to build the in-store digital features. The company has said repeatedly that customers who shop both channels are worth roughly twice a store-only customer, which is the kind of number that only exists once the identities are joined, and which then justifies funding the app out of the store budget rather than the ecommerce budget.

Two second-order effects follow. Store staff now have a commercial reason to push app adoption at the register, which raises capture rate, which improves the measurement, which strengthens the case for more in-store digital. And partner channels start to look expensive in a new way: a purchase made in a Sephora at Kohl's shop-in-shop runs through Kohl's tills and Kohl's systems, so unless the partner agreement passes identified transaction data back, the identity spine simply stops at the door of hundreds of locations. Expansion into partner retail is a measurement decision as much as a distribution one.

Marketing Mix Modeling vs Multi-Touch Attribution

Watch on YouTube

If you are running this play, here is the sequence that works:

  • Measure identity capture rate before you touch the model. Break it out by store, by daypart and by tender type. A model built on 44% joined coverage is a statement about 44% of your business, and you should say so on the slide.
  • Publish coverage next to every attribution result, permanently. The number moves, and when it drops the answers change without anyone touching the algorithm.
  • Move the budget line for in-store digital features to whoever owns store revenue. If the measurement says the app sells foundation in stores, the funding should follow, otherwise the analysis dies in a deck.
  • Review the join with legal once a year: opt-out propagation into the identity graph, retention on POS-to-profile matches, and what your partner contracts actually permit.

Common mistakes that kill results:

Applying your ecommerce attribution window to store paths. Shade matching, sampling and a 60 to 90 day replenishment cycle stretch the interval between the first digital touch and the physical purchase well past the windows the foundations lesson sets out, and a window chosen for a two-day online repurchase will quietly truncate most of your store evidence.

Treating unidentified transactions as noise. They are a population, and a distinctive one. Pull a week of unmatched baskets and compare average basket size and category mix against the matched set; if they differ, and they will, every conclusion drawn from the matched set needs a caveat attached to it.

Building the join and leaving the org alone. The output of a working identity spine is credit moving from the channel that closed the sale to the channel that started it, which means somebody's number goes down. Without a structure where the same leader owns both, the finding gets contested rather than acted on, and the join becomes an expensive reporting exercise that changes no budget at all.

Resources

Related articles

Recent articles from the blog that build on this lesson.