Skip to content
Can Elmas

Lifecycle & CRM · 8 min read

RFM Segmentation for Ecommerce: Target Customers by How They Actually Buy

TL;DR

RFM segmentation scores each customer on how recently they bought, how often and how much they spent, then groups them into segments like champions, at-risk and lapsed. Each group gets its own message, offer and send frequency, so discounts go only where they change behavior and your best customers stop learning to wait for codes.

· Published · Updated

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:

  1. 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.
  2. 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.
  3. Aggregate per customer. Days since last order, number of orders, total net spend.
  4. 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:

ScoreRecency (days since last order)Frequency (orders)Monetary (total net spend)
50-456+Top 20%
446-904-5Next 20%
391-1803Middle 20%
2181-3652Next 20%
1366+1Bottom 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.

SegmentExample ruleWhat they needOfferSend frequency
ChampionsR5, F4-5Recognition, first lookEarly access, no discountFull cadence
LoyalR3-5, F3-5Reasons to buy moreCross-sell, loyalty perksFull cadence
PromisingR4-5, F2A buying habitBundles, replenishment remindersFull cadence
NewR4-5, F1A second orderGuidance, products that pair with the first orderFlows plus selected campaigns
At riskR2-3, F2+A reason to returnWhat’s new first, then a targeted incentiveReduced, targeted
Can’t loseR1-2, F4+ or M5Personal attentionA personal note, your strongest offerLow volume
HibernatingR2-3, F1A reminder of valueBestsellers, major sales onlyLow
LostR1, F1-3Nothing more from emailSunset, then suppressSuppressed 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 watchWhat it tells youIf it worsens
New to Promising within one repurchase cycleWhether first orders turn into second ordersRevisit onboarding content and the post-purchase flow
Loyal or Champions to At riskWhere your best customers leakCheck product, delivery and service issues before adding offers
At risk back to Loyal or ChampionsWin-back effectivenessTest the message first, then the incentive depth
Can’t lose to LostHigh-value churnAdd 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.

FAQ

Frequently Asked Questions

How often should I recalculate RFM scores?

Monthly suits most stores, and weekly makes sense if you have high order volume and a short repurchase cycle. Native Klaviyo segments update on their own, but scores you calculate outside Klaviyo go stale until the next refresh, so put the refresh on a schedule.

Should I use quintiles or fixed thresholds for RFM scores?

Use quintiles for monetary value and fixed thresholds for frequency, because most ecommerce customers have only one order and quintiles can't split them. For recency, thresholds tied to your typical time between orders are easier to act on than quintiles.

How many customers do I need before RFM is worth it?

You need enough repeat buyers to fill the segments, which typically means a few thousand customers with order history. With a smaller list, a simple split by recency and one versus multiple orders gives you most of the value.

Is RFM the same as Klaviyo's predictive analytics?

No. RFM describes past behavior with rules you define and can read, while Klaviyo's predictions estimate future behavior such as churn risk and expected lifetime value. They work well together: RFM sets the segment structure, and predictions help prioritize within a segment.

Work with me

Let’s find your biggest growth lever

Tell me about your growth challenge. I’ll tell you honestly if I can help — and if I can’t, who can.

  • ✓ No obligation
  • ✓ No sales script
  • ✓ Honest feedback
  • ✓ Clear next steps