RFM segmentation scores every customer on recency (days since last order), frequency (number of orders) and monetary value (total spend), then groups them into segments such as champions, at-risk and lapsed. Each segment gets its own message, offer and send frequency. That replaces the default habit of sending the same promotion to the whole list, which teaches your best customers to wait for codes and your lapsed ones to stop opening.
What recency, frequency and monetary value tell you
Each dimension answers a different question about a customer:
- Recency: are they still with us? Days since the last order is usually the strongest single signal of whether someone will buy again. A customer who ordered three weeks ago and one who ordered a year ago need completely different emails.
- Frequency: is buying from you a habit? Order count separates one-time buyers from repeat customers. In most stores, the step from one order to two is where the relationship changes.
- Monetary: how much are they worth keeping? Total net spend tells you how much effort and incentive a customer justifies. If margins vary a lot across your catalog, use gross margin instead of revenue.
RFM is descriptive, not predictive. It sorts customers by what they have already done, using rules anyone on the team can read. That’s its strength: when a segment underperforms, you can see exactly why someone is in it.
Calculating RFM scores from order data
You need one row per order with a customer ID or email, order date and net order value. Then:
- Clean the export. Remove canceled, fully refunded, test and staff orders. If wholesale orders run through the same store, remove those too, or they will dominate the monetary scores.
- Set a snapshot date and lookback window. Score everyone as of the same day. A 24-month lookback suits most stores; lengthen it if customers typically go more than a year between orders. Anyone outside the window is lost regardless of score.
- Aggregate per customer. Days since last order, number of orders, total net spend.
- Score each dimension 1 to 5, where 5 is best.
Don’t use quintiles for everything. Most ecommerce customers have exactly one order, so frequency quintiles collapse: the bottom three groups would all be “one order.” Use fixed thresholds for frequency, and anchor recency to your repurchase cycle, measured as the median number of days between a customer’s first and second order.
Here’s a hypothetical scoring table for a store whose median time to second order is about 45 days:
| Score | Recency (days since last order) | Frequency (orders) | Monetary (total net spend) |
|---|---|---|---|
| 5 | 0-45 | 6+ | Top 20% |
| 4 | 46-90 | 4-5 | Next 20% |
| 3 | 91-180 | 3 | Middle 20% |
| 2 | 181-365 | 2 | Next 20% |
| 1 | 366+ | 1 | Bottom 20% |
A customer who last ordered 30 days ago, has four orders and sits in the top fifth by spend scores 5-4-5. A spreadsheet handles this for tens of thousands of customers. Past that, or once you want it refreshed automatically, move it into SQL or a scheduled workflow.
Core segments and what each one needs
Three scores of 1 to 5 give 125 combinations, far too many to write campaigns for. Collapse them into a handful of segments, mostly using recency and frequency, with monetary value as a modifier that flags high-value customers inside a group.
| Segment | Example rule | What they need | Offer | Send frequency |
|---|---|---|---|---|
| Champions | R5, F4-5 | Recognition, first look | Early access, no discount | Full cadence |
| Loyal | R3-5, F3-5 | Reasons to buy more | Cross-sell, loyalty perks | Full cadence |
| Promising | R4-5, F2 | A buying habit | Bundles, replenishment reminders | Full cadence |
| New | R4-5, F1 | A second order | Guidance, products that pair with the first order | Flows plus selected campaigns |
| At risk | R2-3, F2+ | A reason to return | What’s new first, then a targeted incentive | Reduced, targeted |
| Can’t lose | R1-2, F4+ or M5 | Personal attention | A personal note, your strongest offer | Low volume |
| Hibernating | R2-3, F1 | A reminder of value | Bestsellers, major sales only | Low |
| Lost | R1, F1-3 | Nothing more from email | Sunset, then suppress | Suppressed from campaigns |
Rules overlap, so assign segments in priority order and let each customer land in only one: Champions first, then Can’t lose, Loyal, At risk, Promising, New, Hibernating and Lost. Without that, the same person gets two conflicting campaigns in one week.
Building RFM segments in Klaviyo
There are two ways to do it, and most stores end up combining them.
Native segment conditions
Klaviyo segments can count “Placed Order” events within a time frame, which covers recency and frequency directly. An At risk definition might be:
- Placed Order at least 2 times over all time
- AND Placed Order zero times in the last 90 days
- AND Placed Order at least once in the last 365 days
- AND is not in the Can’t lose or Loyal segments
Segment-membership conditions like that last line are how you enforce the priority order. Native segments update continuously, which is their main advantage.
Monetary value is harder. Order-count conditions don’t total spend, so you need another source. If your account has Klaviyo’s customer lifetime value properties, you can segment on historic spend directly. If not, use the second approach.
Synced score properties
Calculate scores in your spreadsheet or warehouse, then write them to each profile as custom properties, for example rfm_r, rfm_f, rfm_m and rfm_segment. A CSV import can update existing profiles; an API job or n8n workflow can do it on a schedule. Segments then read “rfm_segment equals At risk.”
This gives you exact monetary scores and one definition shared by email and reporting. The catch is staleness between refreshes, so add a live condition on top: exclude anyone who placed an order in the last seven days from every promotional segment, whatever their stored score says.
Campaign strategy by segment
Plan the calendar around segments instead of the list. A hypothetical product launch week:
- Champions get the launch 48 hours early, framed as first access, with no code.
- Loyal and Promising get it on launch day, with a cross-sell angle based on past purchases.
- New customers see it only if it pairs with what they first bought; otherwise they stay in onboarding content.
- At risk get a “here’s what’s changed” email with no discount.
- Hibernating skip the launch and hear from you at the next major sale.
- Lost are excluded entirely.
Recent, engaged buyers tolerate more sends. At-risk and hibernating customers should get fewer, better emails, because mailing disengaged profiles often drags down inbox placement for everyone else.
RFM mostly governs campaigns. Triggered moments such as welcome, abandonment and post-purchase belong in flows; the Klaviyo flows ranked by revenue impact cover those. The two meet in segment-triggered flows: Klaviyo can start a flow when someone joins a segment, so entering At risk can trigger a short re-engagement sequence. That trigger only fires for people who join after the flow goes live, so reach existing members with a one-off campaign.
Using RFM to guide discount and suppression decisions
The discount rule is simple: offer money off only where it changes behavior. Champions were going to buy anyway, so a code is pure margin loss; give them access and recognition instead. A high-value customer drifting into At risk is where an incentive earns its cost. How much you can afford to offer depends on what a retained customer is worth, and cohort-based customer lifetime value gives you that number.
Before your next promotion, check:
- Champions and Loyal are excluded from percent-off codes and offered early access instead
- Anyone who ordered in the last seven days is excluded from promotional sends
- Incentive depth is capped by segment, with the largest offers reserved for Can’t lose
- At-risk offers go out with a randomly held-out slice of the segment, typically 10-20%
- Lost profiles have finished a sunset sequence and are suppressed from campaigns
- Customer segments sync to ad platforms as exclusions from prospecting and as seed audiences
The holdout is what tells you whether the offer worked. In a hypothetical test, if 6% of the mailed At risk group buys and 4% of the holdout buys anyway, only the 2-point difference was earned by the offer, and you paid the discount on all 6%.
Tracking how customers move between segments
Segment sizes can look stable while customers churn through them. What matters is movement. Save each customer’s segment on the same day every month and compare it to the previous snapshot.
| Movement to watch | What it tells you | If it worsens |
|---|---|---|
| New to Promising within one repurchase cycle | Whether first orders turn into second orders | Revisit onboarding content and the post-purchase flow |
| Loyal or Champions to At risk | Where your best customers leak | Check product, delivery and service issues before adding offers |
| At risk back to Loyal or Champions | Win-back effectiveness | Test the message first, then the incentive depth |
| Can’t lose to Lost | High-value churn | Add personal outreach earlier in the slide |
Keep thresholds fixed between snapshots. If you change the recency cutoffs, every customer shifts at once and the month looks like a mass migration that never happened. Re-baseline when you change a rule, and note the change in the report.
Building the scoring, segments and monthly migration report is a standard part of my lifecycle marketing work, because it decides who gets every campaign that follows.
Get it built
If every campaign still goes to the whole list, I can build the RFM model, the Klaviyo segments and the reporting, then run the calendar against them. Start with a Growth Audit, $1,500 fixed and credited if we continue. See pricing or get in touch.