The RFM+BT Model

Five dimensions in, two decisions out

The engine deals in thirteen canonical states. Feed it a customer's signals and it returns a value tier and a behavioural state, live in the browser, with the rule that fired shown alongside.

R
Recency
Days since last purchase, read against the customer's own cadence, not an absolute. A weekly customer three days out is fine; a daily one ten days out is not.
F
Frequency
How often they purchase, as a rate over exposed time, so a consistent new customer scores like a consistent veteran.
M
Monetary
Typical spend per active occasion (the intensity), decoupled from frequency and robust to seasonal sale spikes.
B
Breadth
How many distinct products they use. Single-product customers are the biggest cross-sell pool, and the lever on complementary range take-up.
T
Tenure
How long they have been active. Tells us whether a quiet week means 'still forming' or 'starting to slip'.
No new tracking

Built from events you already have

The model reads the purchase and account events you already capture, and turns them into the five dimensions.

RF
Purchases
When and how often they purchase
M
Spend per purchase
Intensity per active occasion
B
Products used
Breadth across the catalogue
T
Registration date
Account age and lifecycle stage

A subscription routes auto-renewing customers onto their own track, and engagement events, logins, app opens and sessions, feed the wider catalogue models. Nothing here needs a new data source.

The handover

What Braze receives

The two decisions, a value tier and a behavioural state, land on every customer's Braze profile alongside five supporting attributes. Seven in all, and this is the whole contract: four core outputs to target on, one derived personalisation field, and two that answer questions and hold exclusions rather than build audiences. The letters on each card say which of the five dimensions it is built from.

value_tier
RM
Value tier

How much a customer is worth right now: total spend discounted by recency, so a big spender gone quiet slips down a tier. Platinum to Dormant.

In Braze: Split any target segment by intensity: contact caps, offer richness, budget. A Gold win-back leans harder than a Bronze one, from the same targeting.

behavioural_segment
RFMBT
Behavioural segment

Which of the thirteen states this customer is in, from a deterministic tree, first match wins.

In Braze: The primary targeting filter: the cross-sell audience, the win-back, the onboarding sequence are all built on this one attribute. The row of the matrix, as a segment.

subscription_flag
RF
Subscription flag

True when a standing order pins recency and frequency to the top of the scale by construction.

In Braze: Route subscription customers to their own track, and keep them out of win-backs and habit nudges they do not need.

lapse_risk
R
Lapse risk

Silence measured against the customer's own rhythm, not an absolute day count. Refreshed weekly.

In Braze: Trigger retention before they leave the active window, and gate any send that assumes the habit is still healthy.

cross_sell_target
B
Cross-sell target

The next product worth introducing, complementary range for the single-product cohort.

In Braze: Personalise the message through Liquid: which product it actually shows. Targeting stays on the segment; this never creates a new one.

matched_rule
The rule that fired

The number of the rule that produced the state: the recorded why, on the profile.

In Braze: Answer "why is this customer here" without leaving Braze, and trace any send back to the logic that caused it. Never targeted on.

in_holdout
Holdout flag

The control flag, assigned upstream on a stable hash of the customer id.

In Braze: Exclude from every send in the programme, so the lift read stays clean. The assignment logic never crosses.

The plan and the rest of it, the cohort definitions, the holdout assignment logic, the lift calculation, the test register, stay upstream. Plan the policy upstream, resolve the instance in Braze.

The decode

Thirteen states, one glance

Every state, the plain-English rule that produces it, the measure it moves, and the tiers it can occupy. This is the card a marketer works from. The rules stay upstream, versioned and tested; nobody is asked to memorise them.

Rules 1 to 2

Off the grid first

Two kinds of customer the grid cannot score. A subscription pins recency and frequency by construction, and someone who has never purchased has nothing to score yet. Each is routed to its own track before the matrix is even consulted.

Subscriber1

On a subscription, so recency and frequency are pinned by the standing order.

Protect the subscription. Cross-sell discretionary extras carefully.

Own trackmoves Active customers
Prospect2

Registered, never purchased.

Trigger the first purchase with a Day-0 activation.

Own trackmoves First-purchase conversion
Rules 3 to 7

The lifecycle comes before value

New, returning, slipping or long gone: each is caught before any value state, so a lapsing high-value customer is treated as at risk rather than mistaken for a healthy one. Retention first is a design decision, not an accident of ordering.

Onboarding3

First 90 days, so there is too little history to read.

Establish the first habit. Cross-sell only later.

Bronzemoves First-purchase conversion
Reactivated4

Came back after a long silence.

Rebuild the habit, then re-tier onto the main grid.

GoldSilverBronzemoves Active customers
At-Risk5

Gone quiet against their own rhythm, and was worth keeping.

Win them back before they lapse out of the active base.

PlatinumGoldSilvermoves Active customers
Hibernating6

Silent a long time, and was valuable once.

One strong reactivation attempt, then rest the contact.

SilverBronzeDormantmoves Active customers
One-and-done7

One lifetime purchase, then nothing.

A fast second-purchase incentive inside the lapse window.

Own trackmoves Active customers
Rule 8

Event-driven value

Real spend that arrives in spikes around the seasonal sale. A steady read would file them as lapsed, so they are activated on events rather than always-on, and their quiet weeks cost nothing.

Deal-Driven8

Only purchased around a seasonal sale, quiet in between.

Activate on seasonal sales only. Skip always-on spend prompts.

Own trackmoves Spend per active
Rules 9 to 12

The formed behaviours

Only with the exceptions out of the way does the tree read established behaviour: who is still forming a habit, who is broad and valuable, who is narrow, who is steady. The forming habit is checked first, so it is nurtured rather than cross-sold.

Rising Customer9

Still newish, but the purchase rate is climbing.

Nurture the forming habit. Do not cross-sell yet.

SilverBronzemoves Purchase frequency
Champion10

Established, top tier, and broad across products.

Recognise, protect and keep first-to-know. Low pressure, high value.

PlatinumGoldmoves Spend per active
Single-Category Loyalist11

Established and frequent, but has never tried complementary range.

Cross-sell into the complementary range without disturbing the core.

GoldSilverBronzemoves Category breadth
Loyal Habitual12

Established and frequent, steady spend, a product or two.

Sustain the habit and gently widen the basket.

PlatinumGoldSilverBronzemoves Purchase frequency
Rule 13

Everyone else

The honest default. Nothing fired, so keep them warm at low cost and promote them the moment they move. No overlaps, no gaps, nobody unclassified.

Casual / Low-engagement13

Nothing else fired, so keep them warm at low cost.

Efficient always-on contact. Upgrade on any positive signal.

BronzeDormantmoves Purchase frequency

First match wins, top to bottom, so every customer lands in exactly one state. Everything on this card is generated from the model's own definitions, so it cannot drift from the logic it describes. And when a definition changes, it ships as a reviewed change with the population impact stated, so a live audience never moves silently.

The output

The result is a coordinate system

Every customer lands on two axes. The segment is what you target, the tier dials how hard you lean in. Read the rows, not the cells: one row is one target segment at five intensities, which is why this is 13 segments to target rather than 23 audiences to build.

Platinum
Gold
Silver
Bronze
Dormant
intensity
leans hardestlightest touch
Championone segment, 2 cells
Jon
Loyal Habitualone segment, 4 cells
Annalize
Single-Category Loyalistone segment, 3 cells
Byron
Rising Customerone segment, 2 cells
Khaled
At-Riskone segment, 3 cells
Nadia
Hibernatingone segment, 3 cells
Manu
Reactivatedone segment, 3 cells
Irum
Onboardingone segment, 1 cell
Colleen
Casual / Low-engagementone segment, 2 cells
Brian
In the plan, intensity by columnNot planned forExample customer

9 segments on the grid cover 23 of the 45 positions, and 4 more sit off it on their own tracks: 13 in total. The rest are impossible or vanishingly rare, so nothing is targeted at them. The column dials the intensity of the same treatment, it does not change the targeting, which is why this is 13 segments to target rather than 23 audiences to build.

One cell of this grid, written out as a plan somebody owns, is on In Braze.

The tuner

Shape the distribution before you build

The cut points are not laws, they are the calibration a client owns. Move them and watch the base redistribute across the states: every bar is an audience size you could run. Settle the bands here, and the distribution becomes v1's baseline, the thing the weekly snapshot measures movement against.

Value cuts

Where each tier starts, on twelve-month spend decayed by recency.

Platinum from (£)1500
Gold from (£)700
Silver from (£)250
Bronze from (£)40
"Was valuable" floor (£)250

The prior value that makes a long-silent customer worth one strong reactivation.

Recency and frequency

Every cut below is in real units, and the whole base is re-scored against it. Illustrative until the client's own distribution is profiled.

Still engaged, bought within7 days

Above this gap a customer drops out of the cross-sell pool.

Long silent, beyond60 days

Past this, and previously valuable, they are hibernating rather than casual.

Frequent, active in50% of weeks

The habit floor for the formed-behaviour states.

Event-driven, at or under30% of weeks

With seasonal sale elasticity, this makes them event-only rather than habitual.

Monetary, breadth and tenure

The other three dimensions, and the tenure gate that keeps a forming habit out of cross-sell.

Steady spend, from (£)6 per active week

The intensity floor that separates a habitual from a casual.

Prior value high, from (£)12 per active week

Raises or lowers who is worth catching when they lapse.

Broad, from5 products

How many distinct lines it takes to count as broad, the Champion gate.

Formed behaviour needs365 days

How long someone must have been around before the cross-sell and loyalty states apply.

Where the base lands

A synthetic base of 5,000 customers, classified by the same 13-rule tree. Every bar is an audience you could target tomorrow.

Champion159 · 3.2%
Loyal Habitual135 · 2.7%
Single-Category Loyalist109 · 2.2%
Rising Customer529 · 10.6%
At-Risk243 · 4.9%
Hibernating86 · 1.7%
Reactivated99 · 2.0%
Onboarding585 · 11.7%
Casual / Low-engagement2,059 · 41.2%
Off the grid, own tracks
Subscriber344 · 6.9%
Prospect408 · 8.2%
One-and-done154 · 3.1%
Deal-Driven90 · 1.8%
Platinum2.6%Gold7.4%Silver17.6%Bronze40.5%Dormant31.9%

Illustrative and deterministic: the same synthetic base on every load, so only your cuts move the numbers. In the build, this exercise runs on your real base before anything ships, and the calibration you settle on becomes the baseline the weekly snapshot measures movement against.

That is RFM working on sample data. The service page has the rest: what it needs from you, how long it takes to build, what it pairs with, and how the lift gets proven.