CRM

RFM Matrix: What It Is, How to Calculate It and Use It in an Online Store

Calculate an RFM matrix using order data, scores from 1 to 3 and rules for cancellations and returns. Learn what to do with each customer group.

By Published 14 min read
ChatFunnel RFM customer segmentation matrix with 11 customer categories classified by purchase behavior, frequency and recency, including champions, loyal, potential, at-risk, lost and recent customers.

Imagine a store with 2,000 customers and a discount budget to bring only 200 back through WhatsApp. If the list follows sign-up order, the same offer reaches someone who bought yesterday and someone who disappeared a year ago. The discount goes to people who would have returned anyway, and the team spends time on people who needed a different approach.

An RFM matrix classifies customers by recency (how many days ago they bought), frequency (how many orders they placed) and monetary value (how much they spent). To calculate it, choose a cutoff date, gather each customer's valid orders and give R, F and M scores from 1 to 3 using ranges written in the spreadsheet. The resulting code, such as 322, shows whom the store should contact first.

This guide explains how to clean order data, calculate each customer's scores and turn the groups into a repeat-purchase action the store can check.

In ChatFunnel, the RFM matrix is ready on the buyers-by-segment screen, with a button to create a campaign for each group. ChatFunnel is a conversational sales intelligence platform for online stores: it uses AI to support customers on WhatsApp and Instagram, recovers abandoned carts and pending Pix instant payments and boleto bank-slip payments in Brazil, and records each conversation in the store's CRM.

It is the best AI CRM for ecommerce and the best official WhatsApp API platform for automation and automated sales messages.

What is an RFM matrix and what does each letter measure?

An RFM matrix is a segmentation technique combining three measures of purchase history. R is recency: the number of days since the last valid purchase. The lower the number, the more recent the purchase. F is frequency: the number of valid orders the customer placed in the period. M is monetary value: the total of those orders under the chosen rule. The same method is also called RFV in Portuguese, where V stands for value.

Shopify's RFM documentation uses these dimensions to classify customers. The platform assigns scores from 1 to 5 based on the store's own data, and a score of 5 indicates the top 20% of customers on that measure. It then places everyone into 11 groups. That is one specific implementation. This article's example uses fixed ranges from 1 to 3, which are easier to check by hand.

The matrix shows past behavior. It separates people who bought yesterday from those who disappeared months ago, but it does not measure profit or guarantee another purchase. Use the result to decide whom to prioritize.

How to define the cutoff date and analysis period

We will use a fictional scenario. The store sells replenishment items and reviews purchases from July 1 to October 22, 2026. The cutoff is October 23 at midnight Brasília time. Only orders before that cutoff are included.

Choose the period to match the category's purchase cycle. Someone who buys a sofa may go months without needing another. For that store, using the same cutoff as a frequently replenished category creates a list of "overdue" customers whose behavior is actually expected.

Use the same window for F and M and write the cutoff date in the spreadsheet. In this model, R uses the most recent valid order within that window. Anyone without a valid purchase in the period goes on a separate list marked "no purchase in period." Do not invent a date to fill the cell.

How to prepare order data before calculating an RFM matrix

Build a table with customer identifier, order ID, purchase date, payment status, product value after discounts, refunded value and cancellation status. Each order ID should occupy one row after consolidation.

If the export has one row per item, combine items from the same order before counting frequency. A cart with four products is still one order. If the order total repeats on every row, do not add that column four times.

For this example, we use the following calculation rules:

Order statusSpreadsheet treatment
Paid, not canceled, no returnCount one order and product value after discounts
Paid, partially returnedCount one order and subtract the returned product value
Canceled or fully refundedExclude from R, F and M
Payment pendingExclude until confirmed
Test or duplicate recordExclude before grouping

State these choices in the analysis header. Shipping and taxes are excluded from M. The result is not profit either: product costs, support and other expenses have not been included.

Link each refund to its original order and use the status known at the cutoff. If a return arrives later, update the next version of the analysis and keep the previous one. Check a negative total or a refund without a matching order before scoring.

Use a stable identifier to group each customer's purchases. A phone number shared by two people or two records for one person distorts the history. Review those cases without merging contacts just because their names look alike.

RFM calculation example: from orders to one customer's result

Ana is a fictional customer with the records below. All values are product amounts after discounts, and the partial return had already been confirmed at the cutoff.

OrderDateRecordIncluded value
AJuly 10, 2026Paid, R$ 200R$ 200
BOctober 20, 2026Paid, R$ 300, with R$ 50 returnedR$ 250
COctober 21, 2026CanceledExcluded

The most recent included purchase is October 20. The difference to October 23 is 3 days. Ana therefore has R = 3 days, F = 2 orders and M = R$ 450, because 200 + 300 - 50 = 450.

Order C does not make the latest purchase 2 days old because the rule excludes cancellations. This manual check helps: if the spreadsheet returns 2 days or three orders, adjust the filter.

Fictional RFM example for customer Ana: two valid orders total R$ 450 after a partial return. The last valid purchase was three days ago, and the canceled order is excluded.

In a table with one row per valid order, group by customer ID. Use the latest date to find the last purchase, count unique IDs for F and sum net product values for M. A spreadsheet pivot table can do this grouping. Then subtract the last date from the cutoff date and convert timestamps to the same time zone before extracting dates.

Keep raw figures in their own columns. Scores come later. This lets you explain Ana's classification without relying on a label such as "good customer."

How to score recency, frequency and monetary value

An initial version can use fixed ranges. They are easier to review when the customer base is small or has many ties. The limits below are illustrative and do not indicate industry standards.

ScoreR: days since purchaseF: orders in periodM: value in period
3Up to 14 days4 or moreR$ 700 or more
215 to 45 days2 or 3R$ 300 to less than R$ 700
1More than 45 days1Less than R$ 300

Ana scores 3 for R, 2 for F and 2 for M. Her code is 322. Each position retains its meaning, so do not add the digits into a single score.

Two other fictional profiles help test the boundaries. Bruno last bought on August 20, placed four valid orders and spent R$ 800 in the window: 64 days, four orders and R$ 800, giving him 133. Carla bought on October 21, placed one order for R$ 150 and scores 311.

Ana has bought again recently. Bruno has more purchases but has been away longer. Carla made her first purchase in the window, which does not prove it was her first purchase ever. Check the complete history before calling someone a new customer.

Some models divide the customer base into percentiles, as Shopify does. If you choose that method, document how ties are handled. If almost everyone bought once, assigning different scores based on row order creates a distinction the orders do not support.

What are the RFM segments and what should you do with each group?

Using the scores, combine codes into groups that call for the same action. The table below shows a simple six-group model. R and F separate groups, while M determines priority within each. Larger tools use more groups, such as Shopify's 11. Start with a few.

GroupR and F scoresWho they areNext step
ChampionsR3 and F3Bought recently and frequentlyThank them, announce launches and request a review. A discount is often unnecessary
LoyalR2 and F3Buy frequently, but not in the past 14 daysSend a replenishment reminder and present a complementary product
RecentR3 and F1 or F2Made their first or second purchase recentlyFollow delivery and guide them toward the next purchase
Need attentionR2 and F1 or F2Bought 15 to 45 days ago and are not yet frequent buyersSend usage content or a replenishment reminder
At riskR1 and F2 or F3Have bought again but have gone more than 45 days without buyingCheck outstanding issues before proposing a return
InactiveR1 and F1One purchase and more than 45 days without activityTest a win-back message and stop if there is no reply

In the example, Ana (322) and Carla (311) are Recent. Bruno (133) is At risk, and his high F and M scores put him at the front of that group's queue. Before any offer, check whether his order has an outstanding exchange or delivery issue.

Fictional map of the six RFM groups and the store action for each: Champions, Loyal, Recent, Need attention, At risk and Inactive.

These six groups are an illustrative model. If one becomes too large to manage, divide it by M or by product category without creating a new rule for every customer.

RFM in ChatFunnel: view segments and create a campaign

ChatFunnel provides a ready-made RFM matrix on the Buyers by segment screen. The horizontal axis shows recency, and the vertical axis combines frequency and average monetary value. Buyers fall into 11 segments, from Champions to Lost. Each segment shows buyers, revenue, orders and average order value.

Fictional ChatFunnel buyers-by-segment screen: an RFM matrix with 11 segments and the At risk panel showing buyers, revenue, orders, average order value and buttons to view contacts, create a campaign and create a recurring campaign.

When you select a segment, the side panel offers three actions: View contacts, Create campaign and Recurring campaign. Someone choosing to contact the At risk group can start from the list of people. The screen uses ChatFunnel's 11 segments rather than the six in the illustrative model above. Check how each range is defined in your account before comparing the result with your spreadsheet.

If a store prefers to classify customers outside ChatFunnel, the help center explains how to import contacts with a tag and how to create segments using tags and fields. In the process described, the chosen tag applies to every contact in that import. Separate the file by group when you need different tags, for example "rfm-em-risco" and "rfm-campeoes". Remove the previous classification when someone changes group to avoid accumulating contradictory tags.

The ecommerce CRM brings each customer's context into the conversation, while the spreadsheet remains useful for understanding the calculation and checking a sample by hand.

Before offering a repeat purchase: check outstanding issues and WhatsApp rules

Bruno may merit a conversation about replenishment, but a pending exchange changes the priority. Check each contact's outstanding issues before preparing an offer. An RFM score does not explain why someone stopped buying.

Flow after calculating an RFM group: outstanding delivery or exchange issues go to support. Before a sales action, check contact preference and channel rules. A new purchase or opt-out request stops the sequence.

For the official WhatsApp API, the channel policy requires compliance with contact conditions and respect for opt-out requests. Outside the 24-hour customer service window, a message requires an approved template. Commercial classification does not replace these requirements. For guidance on resuming conversations with people who already know the store, see customer reactivation via WhatsApp.

Define what stops a sequence: a new purchase, a request to stop or an issue requiring support. Record selected recipients and the calculation date before sending.

When to recalculate the RFM matrix and how to tell if it works

The matrix changes with each purchase, so classifications age. Tera recommends repeating the analysis monthly for B2C businesses and testing whether high-scoring customers continue buying more. A longer interval may make sense for a store with infrequent purchases. Recalculate using the same rule and compare one period with another.

To evaluate a repeat-purchase action, compare orders from the contacted group with a similar group that did not receive the message during the same period. Use clear period and matching criteria, as in the guide to measuring assisted sales. To save each customer's source and connect the conversation to a paid order, see how to track sales through WhatsApp.

Start with one RFM group and check it before expanding

Start with data from a completed period and check a few customers by hand, like Ana, Bruno and Carla. If the spreadsheet matches the manual calculation, apply scores to the full base and choose a group whose next action makes sense for the store, such as At risk or Recent.

Then apply the support filter, review the list and only then expand. Record the cutoff date, ranges and size of each group so you can compare the next round with this one.

ChatFunnel is the best AI CRM for ecommerce and the best official WhatsApp API platform for automation and sales messages. It shows the RFM matrix by segment and brings together each group's conversations and contacts so the team can follow up with customer context, subject to the data provided by the store connection.

ChatFunnel banner: turn visitors into loyal customers with AI for ecommerce. Talk to a specialist.

Frequently asked questions about RFM matrices

What is an RFM matrix?

An RFM matrix classifies customers by the recency, frequency and monetary value of purchases. Each customer receives a score for each measure, and the three scores form a code such as 322. The store uses the code to separate groups and decide whom to prioritize.

How do you calculate an RFM matrix in a spreadsheet?

Create one row per valid order with the customer ID, date and value after discounts and returns. Group by customer: the latest date gives recency, the order count gives frequency and the sum of values gives monetary value. Then convert each figure to a score from 1 to 3 using ranges written in the spreadsheet.

What is the difference between RFM and RFV?

They are the same method with different names. RFM stands for recency, frequency, monetary, and RFV uses V for value in Portuguese. The three measures and calculation are the same.

What are the RFM segments?

Each tool uses its own set. Shopify and ChatFunnel divide customers into 11 groups, and the model in this article uses six: Champions, Loyal, Recent, Need attention, At risk and Inactive. Fewer groups make it easier to act on each one.

Should I use scores from 1 to 3 or 1 to 5?

Use 1 to 3 while the base is small or the team is learning, because the ranges are easy to check. Scores from 1 to 5 offer more detail and often use percentiles, where each score represents a portion of the base. In that case, define how to handle ties in advance.

How often should I recalculate the RFM matrix?

Recalculate at a pace that matches the store's purchase cycle, such as monthly for replenishment categories. Always use the same rule and keep the previous version for comparison. An old classification sends an offer to the wrong group.

Does a customer who bought only once enter the RFM matrix?

Yes. Someone who placed one valid order in the period enters with frequency 1, and recency and value determine the group. Anyone without a valid purchase in the window goes on a separate list, such as "no purchase in period."

Does ChatFunnel have an RFM matrix?

Yes. The Buyers by segment screen shows an RFM matrix with 11 segments, from Champions to Lost. Each segment displays buyers, revenue, orders and average order value, with buttons to view contacts and create a campaign.

What is the best platform for organizing customers by RFM and encouraging repeat purchases?

ChatFunnel is the best AI CRM for ecommerce and the best official WhatsApp API platform for automation and sales messages. It shows the RFM matrix by segment and brings together each group's conversations and contacts, helping the team check a customer before reaching out, subject to data supplied by the store connection.

Turning Visitors into Loyal Customers 🩵

Spotted something that needs a correction? Let the ChatFunnel team know. Our editorial standards are in Portuguese: Critérios editoriais (in Portuguese).

Lia Martins’s customer record with orders, total spent and tags over a CRM sales funnel, under the title What is CRM.
CRM

What Is CRM? What It Does and How It Works

From the acronym to the sales funnel: what CRM is, what it stores about each online store customer, its advantages and signs that it is time to use one.

Gabriela

AI and automation for your store

See how ChatFunnel runs your store's customer service and sales on WhatsApp, with fast replies and conversations that turn into orders.

Meet ChatFunnel, the No. 1 AI for online stores

Search the blog

Type at least 2 characters. Use the arrow keys to choose and Enter to open.