# RFM analysis: Customer segmentation for lifecycle marketing

Page: https://alidemirbas.com.tr/en/blog/rfm-analysis-customer-segmentation

2026-11-02 · CRM & Lifecycle · Ali Demirbaş

How to do RFM analysis: analysis window, scoring, monetary value, a worked example, RFM segments, and how to map each segment to a lifecycle journey.

RFM analysis is a customer segmentation method. It scores customers on how recently they last bought (recency), how often they buy (frequency) and how much they spend (monetary value). It then groups them into segments.

Each customer gets a score on all three dimensions, and the combination of scores shows which segment they belong to. Customer relationship management (CRM) teams use this RFM segmentation to decide which message goes to which customer.

This guide covers how to do RFM analysis and the three decisions you need to make up front. It also covers a small worked example and how to map the segments to lifecycle journeys. It closes with the method's limits and how it is adapted for mobile apps.

## What is RFM analysis and what does it measure?

RFM analysis reduces a customer's past buying behavior to three numbers and makes customers comparable on them. Each dimension answers a different question.

Recency shows when the customer last bought. It is measured in days between the analysis date and the last purchase, so the shorter the gap, the higher the score. Frequency measures how many times they bought in a given period, in number of orders. Monetary value measures how much they spent, as total spend or average spend per order.

The method comes from direct mail and catalog marketing, where practitioners ranked past purchase data on these three dimensions to decide whom to mail. A 2005 [paper](https://brucehardie.com/papers/rfm_clv_2005-02-16.pdf) by Peter Fader, Bruce Hardie and Ka Lok Lee appeared in the Journal of Marketing Research. Citing Arthur Hughes, it notes that recency is usually the most powerful discriminator. That is why the framework is called "RFM" rather than "FRM".

The same paper describes RFM variables as only imperfect indicators of underlying behavioral traits. That idea is the starting point for the limits covered at the end of this guide.

## How to do RFM analysis

RFM analysis works by calculating three values per customer from order data and turning them into scores. You can do it in Excel, SQL or Python, and your CRM tool may have a built-in RFM feature. The steps are:

1. **Prepare the data:** Pull an order table with customer ID, order date and order amount. Decide up front how to handle cancelled and returned orders.
2. **Choose the analysis date and window:** Decide which day counts as "today" and how many days of history you look back on.
3. **Calculate the three values:** For each customer, compute days since the last order, the number of orders in the window, and total or average spend.
4. **Score:** Convert each value to a score on the same scale, for example 1 to 5 or 1 to 3.
5. **Segment:** Group score combinations into meaningful segments.
6. **Connect segments to messaging:** Decide which journey or campaign runs for each segment, and recalculate the segments on a regular schedule.

The decisions in steps two and four are the ones most often skipped. The same data produces different segments with a different window or a different scale.

### Choosing the analysis window

Choose the analysis window from your business's natural purchase cycle. A grocery app where people buy weekly and a furniture store where people buy once a year cannot be judged on the same window. Too short a window makes regular but infrequent buyers look lost, and too long a window keeps customers who left years ago looking active.

Klaviyo's [RFM documentation](https://help.klaviyo.com/hc/en-us/articles/17797937793179) uses recency thresholds of 180 and 365 days by default. That is a tool default, not a rule that fits every business.

### Scoring on 1 to 5 or 1 to 3

There is no single standard for RFM scoring. IBM SPSS [documentation](https://www.ibm.com/docs/en/spss-statistics/23.0.0?topic=analysis-rfm-binning) splits each dimension into 5 bins by default, which creates 125 possible combined scores from 111 to 555. Klaviyo scores all three dimensions from 1 to 3, and Braze's [RFM segments](https://www.braze.com/docs/user_guide/audience/segments/segment_extension/sql_segments/rfm_segments/) use a scale from 0 to 3.

A five-point scale separates customers more finely but means more segments and smaller groups. A three-point scale is easier to read on a small customer base.

Scores are set in one of two ways: by splitting customers into equal-sized groups or by setting fixed thresholds. Equal-sized groups have a trap. IBM's documentation shows with an example that bins come out uneven when many customers share the same value. If most of your customers have placed a single order, frequency cannot tell them apart and they all land in the same group.

### Defining monetary value

Decide whether monetary value means total spend or average spend per order. IBM, Klaviyo and Braze use total spend, while the Fader, Hardie and Lee paper uses average spend per transaction. Total spend tends to move with frequency, since a customer who orders often naturally spends more.

Also decide up front whether to subtract returns and whether to include shipping and tax. Otherwise, customers with high return rates will look more valuable than they are.

## Example: an RFM table for 10 customers

The table shows RFM scoring for 10 entirely hypothetical customers. The analysis date is November 1, 2026 and the window is the last 365 days.

Scores use fixed thresholds: for recency, 30 days or less scores 3, 31 to 90 days scores 2, and more than 90 days scores 1. For frequency, 4 or more orders score 3, 2 to 3 orders score 2, and one order scores 1. For monetary value, total spend above $300 scores 3, $100 to $300 scores 2, and below $100 scores 1.

*Hypothetical example. Scores use the fixed thresholds stated in the text.*

| Customer | Days since last order | Orders | Total spend | R | F | M | RFM score |
| --- | --- | --- | --- | --- | --- | --- | --- |
| A | 5 | 6 | $480 | 3 | 3 | 3 | 333 |
| B | 12 | 3 | $210 | 3 | 2 | 2 | 322 |
| C | 20 | 1 | $45 | 3 | 1 | 1 | 311 |
| D | 45 | 4 | $360 | 2 | 3 | 3 | 233 |
| E | 60 | 2 | $90 | 2 | 2 | 1 | 221 |
| F | 75 | 1 | $260 | 2 | 1 | 2 | 212 |
| G | 120 | 5 | $520 | 1 | 3 | 3 | 133 |
| H | 150 | 2 | $70 | 1 | 2 | 1 | 121 |
| I | 210 | 1 | $30 | 1 | 1 | 1 | 111 |
| J | 300 | 3 | $150 | 1 | 2 | 2 | 122 |

The most instructive row is G. G has the highest spend and frequency but hasn't bought in 120 days.

Suppose you summed the scores into one number. G (7 points) would then look "better" than C (5 points), who placed a first order 20 days ago.

Yet the two need completely different messages. That is why you read the combination rather than adding the scores up.

## RFM segments

RFM segments are groups of customers with similar score combinations. Tools often give segments similar names, such as Champions, Loyal, At Risk, Can't Lose Them and Hibernating. But the number of segments and each segment's score rule differ from tool to tool.

Braze defines 10 segments on its 0 to 3 scale and assigns a customer to the first segment whose rule they meet. Klaviyo uses 6 groups on a 1 to 3 scale. Bloomreach's [RFM documentation](https://documentation.bloomreach.com/engagement/docs/rfm-segmentation-explained) lists 11 segments on a 1 to 5 scale and suggests treating its own table as a starting point. In other words, ready-made segment names are a template to adapt to your own data.

A scheme that splits the example customers into seven segments by recency and frequency could look like this. In this scheme monetary value doesn't set the segment, it sets priority within the segment:

*An example segment scheme, to be adapted to your own data.*

| Segment | Rule (R and F) | Example customers |
| --- | --- | --- |
| Champions | R 3, F 3 | A |
| Loyal | R 2 or 3, F 2 or 3 (excluding champions) | B, D, E |
| New | R 3, F 1 | C |
| Awaiting a second order | R 2, F 1 | F |
| Can't lose them | R 1, F 3 | G |
| At risk | R 1, F 2 | H, J |
| Lost | R 1, F 1 | I |

This scheme is an example. Check segment sizes on your own data: if one segment collects most customers or stays nearly empty, adjust the thresholds.

## Mapping RFM segments to lifecycle journeys

An RFM segment earns its value when each segment gets different messaging. The list shows each example segment, its goal and the flows that have a counterpart in the site's journey library. Each journey's trigger, waits and exit conditions are described on its own page.

- **Champions:** Reward and spread the relationship. [Loyalty program activation](https://alidemirbas.com.tr/en/lab/journeys/loyalty-welcome), [Referral reward](https://alidemirbas.com.tr/en/lab/journeys/relationship-invitation).
- **Loyal:** Grow the basket and protect repeat buying. [Complementary offer](https://alidemirbas.com.tr/en/lab/journeys/complementary-next-offer), [Predicted replenishment](https://alidemirbas.com.tr/en/lab/journeys/predicted-need-replenishment).
- **New:** Close the first experience well. [Post-purchase follow-up](https://alidemirbas.com.tr/en/lab/journeys/post-purchase-follow-up).
- **Awaiting a second order:** Bring in the second order. [First-to-second purchase](https://alidemirbas.com.tr/en/lab/journeys/first-purchase-welcome).
- **Can't lose them:** Stop the loss early. [Tiered churn intervention](https://alidemirbas.com.tr/en/lab/journeys/churn-risk-escalation).
- **At risk:** Give a reason to come back. [Tiered churn intervention](https://alidemirbas.com.tr/en/lab/journeys/churn-risk-escalation), [Unused loyalty reward](https://alidemirbas.com.tr/en/lab/journeys/loyalty-nurture).
- **Lost:** Win back or reduce messaging. [Lapsed customer win-back](https://alidemirbas.com.tr/en/lab/journeys/lapsed-customer-win-back), [Unengaged subscriber sunset](https://alidemirbas.com.tr/en/lab/journeys/unengaged-sunset).

The key distinction in the list is between "can't lose them" and "lost". Both have low recency, but the first bought often and spent a lot in the past.

That segment calls for an earlier and more personal intervention. The lost segment fits a limited win-back attempt and less messaging if there is no response.

You can also use segment changes as triggers. A customer moving from loyal to at risk is a more urgent signal than one who has sat in at risk for months. To build journeys from your own data, see the [Journey Builder](https://alidemirbas.com.tr/en/lab/claude-lifecycle).

## The limits of RFM

RFM looks backward. The Fader, Hardie and Lee paper stresses that measures of customer value should look to the future, while RFM summarizes past behavior. RFM describes well where a customer stands today, but it doesn't directly predict how much value they will create. It is not a substitute for forward-looking models such as customer lifetime value (CLV) or churn prediction, though it gives them a starting point.

Relative scores are another limit. When you score with equal-sized groups, a customer's score depends not only on their own behavior but on everyone else's.

MoEngage's [RFM documentation](https://www.moengage.com/docs/user-guide/segment/create-segments/rfm-segments) notes that scores are relative. A user near the boundary between two score groups can land in a different group when the analysis runs again. Account for that movement each time you recalculate, and don't make a big messaging decision based on a small change in one run.

### RFM for mobile apps and subscriptions

In products without purchases, RFM can be adapted to another meaningful behavior. MoEngage uses app or site open as the default recency event and counts app or site visits for frequency. It gives total time spent watching content as an example of monetary value.

CleverTap's [RFM documentation](https://docs.clevertap.com/docs/rfm) segments users by how recently and frequently they performed a specific event. It notes that monetary value can be any kind of user spend, such as money or time.

In subscription businesses the monthly payment is usually fixed, so monetary value separates customers poorly. In that case, usage frequency and last use date are more informative. Whichever event you pick, make sure it reflects behavior that creates value. Opening and closing an app is not as strong a signal as a purchase.
