River
Y CombinatorBacked by Y Combinator
FREE TEMPLATE

Customer Segmentation Template for Email

Four documents and four sheets that give every segment a message nobody else gets, then show you who actually moved between them.

Free download  ·  No account needed

Migration Summary  ·  1 Jan to 1 Apr

The segment that looked flat

Ashgrove Supply  ·  64,250 profiles  ·  seven segments, one quarter

Segment1 Jan1 AprNetArrivedDepartedGross
Loyal4,1204,088-321,2681,30062.3%
Repeat active7,9308,300+3703,9903,62096.0%
At risk6,9706,310-6604,4805,140138.0%
Lapsed7,9405,750-2,1903,2405,430109.2%
Dormant11,43014,000+2,5704,1201,55049.6%

Loyal moved by 32 profiles. 1,300 people left it.

What the size number cannot say

Departures were 40.6 times the net change, and the segment kept 68.4% of its members. Every dashboard in the business called this flat, so nobody asked the retention question, which was the most valuable question in the model.

Where the 1,300 went

1,180 aged past the 90-day boundary into At risk. 120 left the list. Nobody did anything to them. Time passed.

Where the 1,268 came from

All of them crossed from Repeat active on a fourth order, which makes the fourth order the event worth building a message around.

Rows track only the profiles present on 1 January, so the quarter's new subscribers sit outside this grid.

Ashgrove Supply sells garden hand tools to 64,250 email addresses. Twelve segments sat in the sending account, built over three years by three people, and nobody had ever retired one. Against those twelve there were four emails that said meaningfully different things. The monthly report called the programme segmented. The distinct angle test in this pack collapsed the twelve to seven rows, and no message was lost, because five of the segments were a value band, a score, a subset and a response history.

Then the second problem, which is arithmetic. Ashgrove's Loyal segment held 4,120 profiles on 1 January and 4,088 on 1 April. Net change of 32, and every dashboard called it flat. Underneath, 1,300 profiles left and 1,268 arrived, so departures ran at 40.6 times the net change and gross turnover was 62.3%. Flat size says leave it alone. A third of the segment ageing out per quarter says the retention question is the most valuable one in the model.

So the Migration Matrix here is a balanced from-to grid rather than a size report. Rows sum to opening sizes, columns to closing sizes, and the opening total equals the closing total plus exits. It sits beside the lifecycle email programme pack, which settles what a segmented programme may send in one week, and the welcome email sequence template, which times what the Prospect and New rows hear first. Then the rest of the template library. Send River your exports, or take the files blank.

The from-to grid, the merges, and what each angle actually bought

The Migration Matrix, the Segment Register with its merge log, and Performance by Segment.

Migration Matrix

Rows are the segment on 1 January, columns the segment on 1 April. Exit covers unsubscribed, bounced and suppressed.

FromProspectNewRepeatLoyalAt riskLapsedDormantExitRow
Prospect19,4201,180000001,24021,840
New09801,64001,210001904,020
Repeat active004,3101,2682,090002627,930
Loyal0002,8201,180001204,120
At risk001,49001,8303,24004106,970
Lapsed00620002,5104,1206907,940
Dormant002400009,8801,31011,430
1 Apr19,4202,1608,3004,0886,3105,75014,0004,22264,250

The grid balances or it is wrong. Opening 64,250 equals closing 60,028 plus 4,222 exits. If that does not hold, the two snapshots cover different profile sets and nothing computed from them is reliable.

2,110 people came back. 1,490 from At risk and 620 from Lapsed, into Repeat active. Whether anything sent caused it is unmeasured, because no holdout exists on that path, and reactivation is the most over-credited work in lifecycle marketing.

1,210 of the 4,020 new customers went straight past a second order into At risk, against 1,640 who reordered. A 40.8% second-order rate inside the window, stated rather than assumed.

Segment Register

Twelve segments in the account, five merges, seven rows. Every row carries an angle or it is a candidate rather than a segment.

SegmentProfilesRev/profileShare of revDistinct angleMerged in from
Prospect21,8400.000.0%The one purchase decision they are stuck on
New4,02084.8318.5%Getting the first purchase right, then the adjacent toolBought in last 30 days
Repeat active7,93091.6039.4%The named gap in their kit, from their order lines
Loyal4,120150.2233.6%The two products people buy last, and whyVIP; Champions
At risk6,97013.825.2%The seasonal job that needs doing this monthWinback 90
Lapsed7,9405.262.3%One concrete thing that changed since they bought
Dormant11,4301.641.0%One reactivation attempt, then sunset

Three of the five merges are the same merge. VIP and Champions differ from Best customers by spend and by a score, and Bought in last 30 days is a subset of First order. All three change a number inside one message rather than producing a second message, so the number became a variable and the row went away.

Discount responders became a variable on every angle. A discount responder can be new, loyal, at risk or dormant, so it is a fact about a profile and not an audience. It is the merge people resist hardest, because a segment selected on having clicked before will always out-perform on clicks.

Loyal is 6.4% of the list and 33.6% of revenue at $150.22 per profile. Dormant is 17.8% of the list and 1.0% of revenue at $1.64.

Performance by Segment

One row per angle, for the quarter. Revenue per send is the column that decides funding.

AngleSendsClickOrdersRev/sendUnsubUnsub/orderHoldout
New11,24012.56%3883.0740.240%0.1No
Repeat active28,76010.60%9213.3620.160%0.0Yes
Loyal12,36017.22%7427.8040.065%0.0Yes
At risk9,4505.60%961.1380.646%0.6No
Lapsed11,1802.90%470.4751.234%2.9No
Dormant22,8200.80%210.0981.762%19.1Yes
Total95,8107.96%2,2152.5680.712%0.33 of 6

Dormant is 23.8% of the sends, 0.9% of the revenue and 58.9% of the unsubscribes. 22,820 sends bought 21 orders and cost 402 unsubscribes, which is 19.1 unsubscribes per order at ten cents of revenue per send. It survives because it makes the list look large.

Loyal earns 79 times the revenue per send of Dormant with no discount in the message. That figure is the argument against putting an offer in front of the segment that converts without one.

At risk has 138.0% gross turnover, so its rates are measuring a transition rather than an audience. A rate that moved there may only mean the mix of arrivals changed.

What's in the pack

01

Migration Matrix

The full from-to grid across two dated snapshots, with an Exit column and three balance checks that either hold or tell you the snapshots are wrong.

02

Migration Summary

Every segment decomposed into stayed, arrived, departed, net change and gross turnover, so a flat size can never be reported on its own.

03

Segment Register

Seven rows with size, revenue per profile, share of revenue, the distinct angle and the merge log naming what came into each row.

04

Performance by Segment

One row per angle with revenue per send, unsubscribes per order, and whether a holdout was run, read against turnover rather than in isolation.

05

Segment Definitions

Seven definitions with every boundary derived from the order history, plus the four things deliberately left out of a definition and why.

06

Distinct Angle Test

The merge mechanism with all twelve of Ashgrove's segments worked through, against the six groups Klaviyo's RFM report documents.

07

Message Angle per Segment

Four fields per segment, including what the angle must not be, which is where the discount reflex and the premature loyalty language get caught.

08

Migration Method

The snapshot rules, the balance checks, and the three failures that quietly invalidate a matrix before anybody reads it.

How to use it

  1. 1

    Open in River, or take it blank

    Open the pack in River and send your exports, or download the Word documents and CSV sheets and fill them in yourself.

  2. 2

    Send customer, order and engagement data

    Any one of the three starts it. A screenshot of your current segments or a typed description of how you slice the list today is enough to begin with.

  3. 3

    Watch the boundaries get derived

    Three numbers come out of your own order history and set the New and active lines, instead of the 30, 90 and 180 days every template inherits.

  4. 4

    Read the merges, then the matrix

    You get the segments that survived with the merges logged, then the grid, and the segment where net change and gross turnover disagree most.

Frequently asked questions

Is this template free?

Yes. Download the Word documents and CSV sheets with no account, no card and no email gate. Edit with AI is the optional half: River derives your boundaries, runs the merge test and builds the matrix from your own exports. Every pack sits in the template library.

Does my sending platform not already do this?

Partly, and it gets credit for it. Klaviyo's RFM report writes a current and previous month group onto every profile, and its own guidance recommends building segments for the profiles that moved. That is a targeting property, not a balanced grid.

Why is a flat segment size a problem?

Because it is a stock, and the thing worth knowing is the flow. Ashgrove's Loyal segment moved by 32 profiles in a quarter while 1,300 members left and 1,268 arrived. Flat size says leave it alone. A third of the segment ageing out says the opposite. Which of them is genuinely late is what the win back email template computes.

How many segments should I end up with?

As many as you can write genuinely different emails for, which is usually fewer than you have. The test is whether swapping two segments' first sentences would go unnoticed by the recipient. If it would, merge them and keep the difference as a variable inside one angle.

What counts as a reason to stop mailing a segment?

Sends that buy nothing and cost list attrition. Dormant here produced 19.1 unsubscribes per order at ten cents of revenue per send, and complaint volume has a hard ceiling: Gmail asks senders to keep spam rates below 0.3%. An email list health audit quantifies the suppression first.

What format are the downloaded files?

Four .docx documents and four .csv sheets, in a zip. They open in Word, Pages, Google Docs, Excel, Numbers and Sheets with no conversion. Add ?format=pdf to the download link if you want the documents as PDFs for circulation instead.

What does Edit with AI actually do?

It signs you up, installs this pack as a private workspace, and starts reading. Send the exports in whatever shape they exist. You get the derived boundaries, the merge log, and the matrix with its balance check run out loud.

Find out which of your segments is one segment

Take the Word documents and CSV sheets blank, or open this exact pack in River and send it the customer and order exports you already have.

Edit with AI