Case study · Fashion & retail

How a fashion brand found the 16.5% of customers who bring 67% of its revenue

An apparel and accessories brand with an online store and its own shops started with a simple hypothesis: 57% of customers had bought only once, so growth had to come from second purchases. After the rollout, the merged online and offline history told a sharper story, and the brand rebuilt its analytics around it. Here is the whole path, step by step.

Prepared by the oneCDP implementation team · Published

Live · first-quarter scenarios running with control groups

The platform is live and the analytics model has been rebuilt on real data. Four scenarios run against 15% control groups; we will publish the measured effect after the quarter.

How a fashion brand found the 16.5% of customers who bring 67% of its revenue
Industry
Apparel & accessories
Channels
Online store + own shops
Existing stack
CRM, website builder, loyalty platform with Wallet cards, email, SMS
Customer model
6 RFM segments, thresholds validated on a holdout
Scenarios
12 lifecycle triggers + 4 segment scenarios with control groups
Rollout
4 months, then analytics rebuilt on real data

Starting point

Where we started: three years of CRM history

Before designing a single scenario, we analysed three years of orders from the brand's CRM. The shape of the base told us where to start.

Customers by number of purchases

Share of the customer base in the initial CRM export

1 purchase57%

Welcome and reactivation journeys

2 purchases17%

Retention, higher purchase frequency

3–5 purchases14%

Grow into loyal customers

6–10 purchases6%

Pre-VIP programme

11+ purchases5%

VIP segment, personal service

  • Repeat sales relied on manual mailings and a loyalty programme.
  • Customers rarely read email, so a single-channel trigger would underperform.
  • Wallet loyalty cards were installed by about 20% of customers.
  • Store receipts already flowed into the CRM alongside online orders.
  • Returns were modest: 3.4% of sales.

The first hypothesis was obvious: 57% of customers had bought only once, so the growth reserve looked like the second purchase. It shaped the first triggers. After launch, the full merged history showed where the money actually is.

Revenue by category

Tops & bottoms, spring–autumn34%
Summer collection20%
Accessories, incl. winter13%
Tops & bottoms, winter12%
Capsule knitwear9%

Seasonality is predictable, so scenarios switch content and recommendations with the season.

What the full history showed

One in six customers brings two thirds of revenue

After launch we merged online and in-store purchases over four and a half years and re-fitted the model on real data. Every threshold was validated on a holdout: customers as they were a year earlier, checked against what they actually bought over the next 12 months.

66.9%

of revenue comes from the core, just 16.5% of customers

16.8%

of revenue comes from the top 1% of profiles

41%

of the core would drop out of a 12-month window

⅓

of in-store purchases had no phone or email

The one-time buyers were still there, but most of them had bought long ago and rarely come back. The money sat in a small core of regulars at different stages of cooling off. So the model was rebuilt around protecting and winning back that core, while mass mechanics serve the rest of the base.

Goals

What the brand wanted from a CDP

01

More revenue from repeat purchases

Move customers towards regular buying and keep the most valuable ones from drifting away.

02

One customer profile

Online and offline activity stitched into a single customer card.

03

Lifecycle automation

Replace manual mailings with triggered, cascading scenarios.

04

Personal bonuses

Tie incentives to segment and lifecycle stage instead of one-off promotions.

05

Transparent analytics

See how much revenue each channel and scenario brings, and prove it against a control group.

Architecture

Six sources, one customer

The platform sits on top of the tools the brand already used. Nothing was replaced; everything was connected.

CRM

Customers, online and in-store orders, items, amounts, returns, order source. Two-way, near real time.

Website

Product and category views, cart, checkout, UTM tags, sessions, device. Tracking script on every page.

Loyalty platform

Bonus balance, accruals and redemptions, Wallet card status, tier. Two-way API, including triggering bonuses.

Email provider

Opens, clicks, unsubscribes, bounces and complaints via webhooks.

SMS gateway

Delivery statuses and replies via webhooks.

Stores

Receipts, items, staff member and store, synced through the CRM within a day.

Identity resolution

Records are stitched by phone number, then email, then CRM contact ID: a match on any one merges them. Profiles created from website visits merge with purchase-history profiles at the customer's first identified visit.

What each customer profile holds

  • Identifiers and consents per channel
  • Profile stage, scores and current segment
  • One timeline of online and in-store orders
  • Viewed products and abandoned carts
  • Bonus balance and loyalty tier
  • Every message sent, opened and clicked
  • Average order, average gap between purchases, omnichannel flag

Data rules agreed before modelling

  • Profile stages: anonymous → contact → buyer. Only buyers get scores, a segment and tags.
  • A purchase is an order that is shipped or paid with an amount above zero; a return is a separate negative event.
  • De-duplication by the order ID in its source: re-exports and status changes update a purchase, never double it.
  • The channel is defined by how the purchase happened, not by who entered it. A paid purchase in both channels makes a customer omnichannel.
  • Large orders stay in: the top 1% of profiles brings 16.8% of revenue, and they are real customers.

Segmentation

Three scores, six segments

Every buyer gets three independent scores from 1 to 3. The segment is set by recency and frequency; the average-order score doesn't change the segment but sets the level of the offer inside it. The generic built-in segmentation was switched off: these six segments are the only ones in use.

RFM is a customer scoring method that rates each buyer on three signals: how recently they bought (recency), how often (frequency) and how much they spend (monetary value). The scores group customers into segments you can act on.

R

Recency

Days since the last purchase: 3 = up to 150 · 2 = 151–540 · 1 = over 540

150 days sits between the in-store buying cycle (120 days) and the online one (180). The median gap between purchases is 56 days in store and 75 online.

Chance of buying in the next 12 months: 42.7% · 15.2% · 5.0%

F

Frequency

Purchases over the whole history: 3 = four or more · 2 = two or three · 1 = one

Clothing at this price level is a considered purchase: gaps are measured in months and relationships in years, so there is no 12-month window.

Return within 12 months: 50.2% · 16.8% · 6.5%

M

Average order

Three average-order bands fitted to the brand's base

Total revenue repeated what frequency already said (correlation 0.88). Average order is nearly independent of it (0.19).

Sets the offer level inside a segment, not the segment itself.

Why the whole history, not 12 months

With a 12-month window, 41% of the core would have dropped out, and customers with a purchase in the last year bring only 62.9% of revenue. The other 37.1% would belong to profiles the model simply wouldn't see. Recency already separates active customers from cooling ones; limiting frequency too would punish the same customer twice.

1.Core

Rule (R·F): R3·F3
Share of base5.9%
Share of revenue34.6%

Active regulars: four or more purchases, the last within 150 days. About two thirds of them buy both online and in the store.

2.Cooling core

Rule (R·F): R2·F3
Share of base6.1%
Share of revenue22.8%

Proven buyers past their usual cycle. Their chance of returning drops from 42.7% to 15.2%. The first target for reactivation: the most money per unit of effort.

3.Sleeping core

Rule (R·F): R1·F3
Share of base4.5%
Share of revenue9.5%

Former regulars, last purchase over 540 days ago. Their history and average order still justify a win-back.

4.Growing

Rule (R·F): R3·F2, R3·F1
Share of base10.2%
Share of revenue6.3%

Active customers early in their lifecycle. The job: bring them to the fourth purchase and into the core.

5.Fading

Rule (R·F): R2·F2, R2·F1, R1·F2
Share of base32.9%
Share of revenue17.8%

No stable buying habit and outside the active window. The largest working segment: mass mechanics, low return per customer, volume makes up for it.

6.Lost

Rule (R·F): R1·F1
Share of base40.5%
Share of revenue8.9%

One purchase long ago, return chance below 5%. Excluded from regular communication; used in rare broad campaigns and as a control group.

The first three segments are one core at different stages of cooling off: 16.5% of customers and 66.9% of revenue. Moves between them are the main signal for the CRM.

From segments to action

Tags in the CRM, tasks for managers

Segmentation only pays through communication. The platform turns the model into signals that marketing automation and managers can act on without opening the analytics.

Personal purchase cadence

For customers with three or more purchases, the platform calculates their own average gap between purchases; that covers 23% of the base, the rest use the channel median: 56 days in store, 75 online. When the time since the last purchase goes past it, the customer gets a “time to buy” tag, at most once every 30 days.

Priority score

A 0–100 score (recency 40%, frequency 40%, average order 20%) only sorts lists for managers, showing who to call first. It creates no tags and no scenarios. The top 10% of the base by score brings 53.9% of revenue.

Tags in the CRM card

The segment and modifiers are written to the contact card, so mailing scenarios are built on tags. Tags are set only automatically; managers use a separate namespace for manual labels.

One segment tag per buyer
RFM_CORERFM_CORE_COOLINGRFM_CORE_SLEEPINGRFM_GROWINGRFM_FADINGRFM_LOST
Modifiers on top
  • RFM_OMNIPurchases in both channels
  • RFM_HIGH_ORDERTop average-order band
  • RFM_TIME_TO_BUYPast the personal purchase cadence
  • RFM_DOWNGRADESegment got worse since the last calculation

Tasks for managers

The CDP writes tags; the CRM's own automation turns them into tasks. People step in only where there is a lot of money and few customers: the core and the cooling core, which make up 12% of customers and 57% of revenue.

Condition in the cardTaskDeadline
Dropped out of the coreContact the customer personally3 working days
Core customer, time to buy, high average orderA personal offer instead of an automatic push5 working days
Moved into the core from any segmentSay thank you, learn preferences7 working days

About 20–30 tasks a month across all managers. One open task per customer, none for the control group, closed automatically on purchase. The result goes back to the CDP as a “personal contact”, so manual work counts in attribution.

First quarter

Four scenarios, each with a control group

The first quarter launches four segment scenarios. Every tag and metric in the model serves one of them; anything without a scenario is not built.

ScenarioWho gets itTriggerWhat we measure
Win back the cooling coreCooling coreEntering the segmentShare who buy within 60 days
Time to buyCustomers past their personal cadenceRecency exceeds the average gapShare who buy within 30 days
Nudge the growingGrowing30 days after a purchaseShare with the next purchase within 90 days
Manager alertCustomers who dropped out of the coreNightly recency recalculationShare back in the core within 60 days

15% control group in every scenario

A random 15% of each segment receives nothing, fixed for the whole quarter. Without it you can't tell the effect of a message from a purchase that would have happened anyway. On a base this size it reveals differences like 15% versus 30%; smaller effects don't matter here.

Decision after the quarter

A scenario with a confirmed effect becomes permanent. One with no difference from control is switched off or rewritten. New tags and metrics are added only for scenarios that pass this test.

Lifecycle triggers

12 lifecycle triggers, each a three-channel cascade

Because email alone was read poorly, every trigger is a cascade: email → Wallet push → SMS. The cascade stops the moment the customer acts, timings are set per trigger, and a frequency cap keeps triggered messages ahead of mass ones.

TriggerWhen it firesCascadeLaunchRevenue priority
Abandoned cartItems in cart, no checkout for 1 hourEmail after 1 h → Wallet push after 6 h → SMS after 24 hMonth 1High
Welcome seriesSign-up or first identification, no purchaseBrand story → bestsellers after 2 days → Wallet push with a welcome bonus → SMS after 7 inactive daysMonth 1High
Second purchase14 days after the first orderEmail with personal picks and a bonus → Wallet push after 5 days → SMS after 10 daysMonth 2Very high
ReactivationNo purchase for 180 days“We miss you” email → email with a bonus after 3 days → Wallet push → SMS on day 10Month 2High
Birthday3 days before the dateEmail with a personal bonus → Wallet push on the day → SMS 2 days before the bonus expiresMonth 2Medium
Abandoned browseProduct viewed for 60+ seconds, not added to cart within 2 daysEmail with the product and 3 picks → Wallet push after 24 h → SMS after 3 daysMonth 3Medium
Abandoned category3+ products viewed in one category in a session, no purchaseEmail edit after 1 day → Wallet push after 2 days → SMS after 4 daysMonth 3Medium
Dormant customersNo purchase for 365 daysBigger bonus: email → Wallet push after 2 days → SMS after 5 days, SMS-led in case the email changedMonth 3Medium
Price dropA wishlisted or viewed item goes on saleWallet push instantly → email after 2 h → SMS after 24 h if the discount is over 20%Month 3Medium
ReturnA return is registeredEmail with an apology and a short survey → Wallet push with an alternative after 3 days, no SMSMonth 3Service
Post-purchase5 days after deliveryStyling picks and a review request → Wallet push with a review bonus after 7 daysMonth 3Medium
Seasonal windowStart of a season + last season's behaviourSegmented edit by email → Wallet push after 3 days → SMS on day 7 for the core and growing customersMonth 3High

Loyalty

Bonuses that follow the lifecycle, not the calendar

The platform reads bonus balances and tiers from the loyalty platform and triggers accruals itself. Incentives depend on the customer's stage, not on one-off promotions.

Second purchase → loyal

After the second purchase: +3% on the usual cashback rate for 30 days.

Slowing down

Purchase frequency drops: a welcome-back bonus on the next order.

Back from sleep

A long-inactive customer buys again: double bonus on the next order.

Core retention

The most loyal customers: a quarterly gift card or exclusive early access.

Before expiry

Bonuses expire after 14 days: automatic reminders 5, 2 and 1 day before.

Rollout

Four months, money first, then the model on real data

The rule was simple: launch the triggers that pay first, then build the rest of the foundation, then re-fit the analytics on what the data actually showed. What we deliberately postponed matters as much as what we launched.

  1. Weeks 1–2

    Preparation

    The blocking stage: without it nothing moves.

    • API access and test environments for the CRM and the loyalty platform
    • Email provider chosen, sending IP warmed up
    • Consents per channel, privacy policy, loyalty terms
    • Identity resolution rules and a master system for each data type
    • Minimal, extendable profile model; website tracking limits checked
    • Purchase history exported to build the first profiles
  2. Month 1

    MVP with a fast return

    Two triggers live and the first reports.

    • CRM connected in read mode, full website tracking, email live
    • Abandoned cart: one email after an hour
    • Welcome series: two to three emails
    • Dashboards: abandoned cart, welcome, base dynamics

    Deliberately postponed: Loyalty platform, SMS, Wallet push, RFM, the other 10 triggers, recommendations, offline.

  3. Month 2

    Cascades and loyalty

    Email triggers become three-channel cascades; retention triggers go live.

    • Loyalty platform, SMS gateway and Wallet push connected
    • Abandoned cart and welcome moved to email → Wallet → SMS with frequency caps
    • First RFM segments written back to the CRM, visual segment editor
    • Second purchase, reactivation after 180 days, birthday

    By the end of the month 5 of 12 triggers run: the five that earn the most.

  4. Month 3

    All triggers and offline

    The rest of the trigger library and in-store purchases in the profile.

    • Store receipts reach the profile within a day; segmentation counts offline purchases
    • Triggers fire regardless of where the purchase happened
    • The remaining seven triggers
    • Lifecycle bonus rules
    • Visual scenario editor with branches, A/B tests and time-outs
  5. Month 4

    Personalisation, Wallet adoption, reporting

    Full scope of the original brief.

    • Product recommendations based on purchases and views, on the website and in email
    • A journey that invites customers without a Wallet card to install one: from 20% towards 60%+ within a year
    • Full reporting set
  6. After launch

    Analytics rebuilt on real data

    The customer model re-fitted on the merged purchase history.

    • Online and in-store purchases merged over four and a half years
    • Recency and frequency thresholds validated on a holdout a year back
    • Six segments replace the generic built-in segmentation
    • Tags and manager tasks in the CRM
    • Four first-quarter scenarios with 15% control groups

What we measure

The dashboard the results will come from

Segments

Customers and share of revenue across the six segments. This is the main view. Active buyers are the core plus growing customers.

Migration

Moves between segments month to month. Downgrades are shown as a separate line, and a move down triggers reactivation.

Active customers

Identified customers who didn't buy this month but took a target action: a payment link, an add to cart, a conversation with a manager. Views and session time are noise and don't count.

Unaddressable demand

The share of target actions made by anonymous visitors: ready-to-buy demand the brand can't reach with communication yet.

New customers

First purchase across the merged history in the month, recalculated back in time when older purchases are matched.

Reactivations

Purchases by cooling core, sleeping core and fading customers within 30 days of a reactivation message, attributed to the last touch in the cascade.

Recalculation rhythm

Monthly

A full recalculation on the 1st: stitching, de-duplication, scores, segments, tags, migrations, dashboards. The fixed monthly snapshot is the baseline for reporting.

Nightly

Recency grows without any events, so recency, segment and the “time to buy” and “downgrade” tags are refreshed every night.

On purchase

A purchase recalculates the profile immediately, so a reactivation message never goes to someone who has just bought.

Lessons

What we would tell any fashion brand starting out

1

Design identity resolution before the first integration

Decide how records are stitched and which system is the master for contacts, orders and bonuses. Skip it, and you rebuild in month two or three.

2

Launch the money first

Two email triggers in month one, abandoned cart and welcome, earn while cascades, segmentation and loyalty are still being connected.

3

If email is weak, cascade

Wallet push and SMS pick up what email misses. The cascade stops on purchase, and a frequency cap protects the customer from overload.

4

Content is the real bottleneck

Twelve triggers mean dozens of emails, push notifications and SMS texts. Plan copywriting and design as a separate resource, or months two and three stretch.

5

Fit the window to the purchase cycle

For considered purchases a 12-month window hides your best customers: here it would have dropped 41% of the core. Let recency separate active from cooling, and count frequency over the whole history.

6

Average order, not total revenue

Total revenue mostly repeats frequency. Average order adds new information and tells you what level of offer a customer expects.

7

Identify the buyer at the till

A third of in-store purchases had no phone or email and never reached the model. It was the single biggest distortion of every metric.

8

No scenario, no feature; no control group, no conclusion

Every tag and metric exists because a scenario uses it, and every scenario is judged against customers who got nothing.

In Europe

The same project for an EU fashion brand

The architecture and the model carry over one-to-one. A few things change.

Consent per channel

Email, SMS and push consents are collected separately under the GDPR and stored in the profile.

Data stays in the EU

Profiles, media and backups are hosted in the European Union, under a Data Processing Agreement.

WhatsApp in the cascade

In most EU markets WhatsApp can take the place of SMS or join it as the next step.

Your e-commerce platform

Shopify, WooCommerce or a custom store instead of a site builder; POS and loyalty over API.

Questions

Questions about this case

What is a customer core?

The core is the small group of regular customers who bring most of the revenue. In this case it is customers with four or more purchases: 16.5% of buyers who bring 66.9% of revenue, split into active, cooling and sleeping stages.

Why is the recency threshold 150 days?

It sits between the brand's in-store buying cycle (about 120 days) and its online cycle (about 180 days). On a holdout, 42.7% of customers under 150 days bought again within 12 months, against 15.2% between 151 and 540 days and 5.0% after that.

Why does every scenario have a control group?

Without customers who receive nothing, you can't separate the effect of a message from purchases that would have happened anyway. Here a random 15% of each segment is held out for the quarter, and a scenario stays only if it beats that group.

Can a European fashion brand run the same model?

Yes. The architecture and segmentation carry over. What changes is GDPR consent per channel, EU data residency, WhatsApp as a cascade channel and connectors for platforms like Shopify or WooCommerce.

Find your own core

We'll analyse your customer base the same way: how much revenue your most loyal customers bring, who is cooling off, and which scenarios will pay off first.