RFM Analysis
RFM analysis scores your contacts based on three dimensions of engagement: how recently they interacted, how frequently they interact, and how much monetary value they bring. It helps you identify your best customers, spot those at risk of churning, and target each group with the right messaging.
How RFM Scoring Works
Each contact receives three scores on a 1-5 scale:
| Dimension | What it measures | Score 5 (best) | Score 1 (worst) |
|---|---|---|---|
| Recency | Days since last event | Interacted very recently | Inactive for a long time |
| Frequency | Number of events | Many interactions | Very few or none |
| Monetary | Value of engagement | High value (purchases, clicks) | Low or no value |
Scores are assigned using quintiles -- your contacts are split into 5 equal groups for each dimension. A contact in the top 20% for frequency gets a score of 5; one in the bottom 20% gets a 1.
If your workspace has fewer than 25 contacts, the engine uses terciles (3 groups) instead of quintiles to avoid overly sparse groupings.
Running an Analysis
To run an RFM analysis, go to Contacts and open the RFM Analysis tab. You need to configure:
Recency Event (optional)
Which event type measures recency. If left blank, all events are considered. For an e-commerce workspace, you might choose purchase so that recency reflects the last purchase date rather than the last page view.
Frequency Event (optional)
Which event type measures frequency. Can be different from the recency event. For example, you might measure recency by purchase but frequency by login to capture active usage.
Monetary Event and Attribute
How to measure monetary value. You have two options:
- Custom event attribute -- select an event name (e.g.,
purchase) and a numeric attribute (e.g.,amount). The engine sums this attribute per contact. - Default: email engagement -- if you leave these blank, the engine uses an engagement score based on email opens and clicks (opens + 2 x clicks).
Date Range
How far back to look. The default is 30 days, but you can set any range from 7 to 365 days. A shorter range highlights recent behavior; a longer range captures seasonal patterns.
Reading the Results
After the analysis runs, you see two visualizations:
Heatmap
A 5x5 grid where each cell represents a combination of Recency (rows) and Frequency (columns). The cell color indicates the segment, and the number shows how many contacts fall in that cell.
- Top-right cells (high R, high F) -- your best contacts
- Bottom-left cells (low R, low F) -- dormant or hibernating contacts
- Top-left cells (high R, low F) -- new contacts who have not yet become frequent
- Bottom-right cells (low R, high F) -- previously active contacts who have gone quiet
Segment Breakdown
A list of 10 named segments with:
- Contact count and percentage of total
- Average R, F, and M scores
- A description of the segment's behavior
- A suggested action (what kind of campaign to run)
See RFM Segments for a full description of all 10 segments.
Score Boundaries
The analysis response includes the quintile boundaries for each dimension. These show the exact cutoff values that separate each score level. For example, if the recency boundaries are [2.5, 7.0, 15.0, 30.0], then:
- Score 5: 0-2.5 days since last event
- Score 4: 2.5-7.0 days
- Score 3: 7.0-15.0 days
- Score 2: 15.0-30.0 days
- Score 1: 30+ days
Caching
RFM analysis results are cached for 6 hours. Running the same analysis (same events, same date range) within that window returns the cached result instantly. The response includes a cached flag and an expires_at timestamp so you know when fresh data will be computed.
You need at least 5 contacts in your workspace to run an RFM analysis. If you have fewer, the analysis returns an error.
Next Steps
- RFM Segments -- understand all 10 segments and recommended actions
- Building Segments -- create targeted segments from RFM results
- RFM API -- run RFM analysis programmatically