Cohort analysis groups customers by when they first bought and tracks each group separately from then on. Shopify builds it for you out of order data you already have, which is why you do not need an analyst to run it.
The report is easy to open and hard to read. This article covers what the terms mean, how to set the report up, how to read it in three directions, and what to do about what you find.
If your cohort analysis already looks wrong
|
What you see |
What it usually means |
Section that explains it |
|
The last few rows drop off a cliff |
The newest cohorts have not aged yet |
Before you trust a cohort: size, age and the triangle problem |
|
One month sits well below the rest |
Something about how those customers arrived |
Six cohort patterns and what each one means for your store |
|
The grid shows customer counts, not money |
The metric is still on its default setting |
How to set up Shopify cohort analysis step by step |
|
The percentages will not add up to anything |
Retention rate is per period, so the columns overlap |
How to read a cohort grid: rows, columns and the diagonal |
What cohort analysis means for an eCommerce store
Say you acquired 400 customers in March. Cohort analysis keeps those 400 together permanently. A month later you can see how many placed a second order. Six months later you can see what the group has spent in total.
Run the same view for April and May, line the groups up at the same age, and you can see whether March was a better month than May. A store-wide average can never show you that.
Two kinds of grouping come up in eCommerce:
-
Acquisition cohorts group customers by when they arrived. Shopify builds these by default.
-
Behavioral cohorts group them by something they did, such as which product they bought first or which channel brought them in. Shopify builds these through the cohort definition filter, and that is where most of the useful findings come from.
Why a blended repeat rate hides what cohorts show
Most stores track one repeat purchase rate for the whole business. The number has a real problem. It mixes customers who have been with you two years and have had every chance to come back with customers who bought last Tuesday and have had none.
When you grow, the second group gets bigger, so the blended number falls even if every group is performing better than the one before it. A store that stops spending on acquisition sees the reverse, a blended repeat rate that climbs while nothing about the business improves, because the mix has shifted toward older customers and the denominator has changed.
Cohorts never mix ages. You compare March's customers at month six against September's customers at month six, and the comparison is fair. If you feed repeat purchase rate into a budget, a forecast or a retention revenue score, pull it from one cohort at one fixed age.
Read at a single age, the same store below splits into three different answers, and the blended figure matches none of them.

A cohort analysis glossary for eCommerce brands
|
Term |
What it means in your report |
|
Cohort |
A group of customers who share a starting point, almost always the month of their first order |
|
Acquisition cohort |
Customers grouped by when they arrived |
|
Behavioral cohort |
Customers grouped by something they did, such as buying one product first |
|
Cohort grid (heatmap) |
The default view. Each row is a cohort, each column is a period after the first order |
|
Retention curve |
The same data drawn as lines instead of shaded cells |
|
Interval |
Whether a period means a week, a month or a quarter |
|
Period 0 |
Repeat orders placed in the same period as the first order. The first orders themselves have a column of their own |
|
Cohort definition |
The filter that decides who is in the report, applied to each customer's first order |
|
Maturity |
How many periods a cohort has had the chance to fill. A cohort from last month has one |
|
Customer retention rate |
The share of a cohort that ordered in one given period. A per-period figure, not a running total |
|
Repeat purchase rate |
The share of a cohort that has ordered again at any point. A cumulative figure, which the grid does not give you directly |
|
Amount spent per customer |
Everything the cohort has spent to date divided by the number of customers in it. Shopify's figure includes taxes, discounts, shipping and refunds, so it is not the same as net sales |
|
Fully aged |
A cohort old enough to have filled every period you want to compare on. Reading four quarters means a cohort needs four quarters behind it |
Everything in the grid comes from these:
customer retention rate at period n = customers in the cohort who ordered in period n ÷ customers in the cohort
amount spent per customer = everything the cohort has spent to date ÷ customers in the cohort
How to set up Shopify cohort analysis step by step
1. Open the report
Go to Analytics > Reports and set the Category filter to Customers. Open Customer cohort analysis.
Shopify's plan documentation lists all reports as included on Basic, so this is not a Plus-only report.

The Customers report category in the admin.
Set the date range wide enough that your oldest cohort is fully aged, meaning it has filled every period you intend to compare on. For a store with a quarterly purchase cycle, two years gives eight periods on the top row.
2. Change the metric
The report opens on Number of customers, which cannot produce a revenue figure or a repeat rate.
The opening view, with customer counts in every cell.
Open the Metric menu and pick one of six: number of customers, customer retention rate, gross sales, net sales, average order value, amount spent per customer.
|
What you want to know |
Metric to pick |
|
What share of a cohort came back in one period |
Customer retention rate |
|
What a customer is worth so far |
Amount spent per customer |
|
How much money a cohort has produced |
Net sales, which has refunds and discounts taken out |
|
Nothing in particular yet |
Leave it on number of customers, which is the default |
|
Whether basket size differs between cohorts |
Average order value |

The Metric menu, with six options.
3. Change the interval
Monthly is the default. Switch to quarterly for anything people buy a few times a year. Stay on monthly for subscriptions and most consumables, and drop to weekly only when customers reorder within a few weeks.

The same report on quarterly intervals.
Monthly is the wrong default for most non-subscription stores. A store selling something people buy three times a year produces a monthly grid of near-zero cells with a few spikes, and merchants read the noise as a trend. Start quarterly and go monthly only once a pattern shows up that you want to look at closely.
4. Set the cohort definition
The cohort definition filter changes who is in the report. It applies to each customer's first order, and it takes five filters: sales channel, marketing channel, marketing type, product name, subscription.
|
Filter |
The question it answers |
|
Marketing channel |
Do paid social customers repeat as often as search customers, and do newer sources like AI assistant referrals behave differently again |
|
Marketing type |
Do discount-acquired customers come back |
|
Product name |
Does a customer who starts on one product repeat better than one who starts on another |
|
Sales channel |
Do marketplace or POS buyers behave like your own site's buyers |
|
Subscription |
Do subscribers and one-time buyers behave differently in the same store |

The subscription filter splitting subscribers from one-time buyers.
The separate Filters menu narrows the report a different way, by the customer rather than by their first order. It carries the date range plus customer country, customer region, customer city and customer email subscription status, so you can read one market on its own.
5. Set the comparison
Set Comparison to between cohorts so the report reads one cohort against another instead of showing a single group on its own.
Comparison set to run between cohorts.
6. Save the setup
That is four settings you will not want to redo every time. Once the report is configured, save it as a custom data exploration and open the saved version from then on.
7. Switch to the curve when you want shapes
The heatmap is for reading cells. The Retention curve visualization is for comparing the shape of one cohort against another.
The curve view, with the projections toggle on.
Two limits are worth knowing before you build anything on top of this report.
Projections are a trend line. The toggle appears only on the amount spent per customer metric, and only once a cohort has 24 months of history behind it.
The date range picks cohorts, not history. Shopify's documentation notes that customer reports draw on each new customer's entire order history, whatever timeframe you select. Narrowing the range gives you fewer rows to read, and the rows you keep are unaffected.
How to read a cohort grid: rows, columns and the diagonal
|
Direction |
What it holds |
What it answers |
|
Along a row |
One cohort, getting older |
How a group behaves over its life |
|
Down a column |
Different cohorts, same age |
Whether the customers you buy now are better than the ones you bought before |
|
Down the diagonal |
Different cohorts, same calendar month |
What happened to your whole customer base at once |
If you only read rows today, the column is the one to add. It is the direction that shows whether acquisition is improving.

One highlighted direction per grid.
Click any cell to open its detail panel, which holds total sales, average order value, orders per customer, new and returning customer counts, the top marketing and sales channels behind that cohort, and the one-time against subscription split. The marketing channel list is the fastest way to find out where a weak cohort came from.
Two cells marked inside one cohort row.
The columns do not add up
Customer retention rate is a per-period figure. A customer who orders in period 1 and again in period 3 is counted in both columns, so adding the period columns together double-counts that customer. The total is not a repeat purchase rate.
One customer's orders across five periods.
To get a cumulative repeat purchase rate for one cohort, build a customer segment under Customers > Segments.
Shopify ships a prebuilt segment called Customers who have purchased more than once. It covers your whole customer base, so it returns the blended rate this article has been warning about. The query below scopes the same idea to one cohort, which is what makes it comparable quarter to quarter.

The Segments list, with the prebuilt segments Shopify provides.
first_order_date BETWEEN 2026-01-01 AND 2026-03-31 AND number_of_orders >= 2
Run the same query with number_of_orders >= 1 for the cohort size, then divide.
One rule makes this reusable. Run it for the quarter that ended six months ago, and always at that same distance. The figure it returns is repeat-ever to date, so it keeps climbing for the same cohort every time you run it, and two cohorts queried on the same day are different ages. A fixed lag is what makes one quarter's reading comparable with the next.
The segment is also the thing you can act on, because it returns a list of real customers you can message.
A worked read of one cohort grid
Take this grid as the example. Customer retention rate, quarterly intervals, four cohorts. Period 1 is the quarter after acquisition, and period 0 is left out because it holds only repeat orders placed inside the acquisition quarter.
|
Cohort |
Customers |
Period 1 |
Period 2 |
Period 3 |
Period 4 |
|
Jan to Mar |
1,240 |
18% |
11% |
9% |
8% |
|
Apr to Jun |
1,410 |
17% |
11% |
9% |
|
|
Jul to Sep |
1,890 |
12% |
8% |
||
|
Oct to Dec |
2,300 |
11% |
Read along a row first. Every row decays the same way, steeply from period 1 to period 2 then leveling off. Nothing is wrong with any individual row.
Now read down the period 1 column. 18%, 17%, 12%, 11%. The drop between Apr to Jun and Jul to Sep is five points. In the next column the gap narrows to three points, 11% against 8%, so it does not close. Reading rows alone, you would never see it.
Check the customer count beside it. Jul to Sep brought in 34% more customers than the quarter before, and Oct to Dec is 85% bigger than the January cohort. Volume went up as quality went down, which points at acquisition.
Rule out the calendar first. Jul to Sep and Oct to Dec carry back-to-school and holiday buyers, and a gift buyer was never going to reorder. If you have last year's grid, compare each quarter against the same quarter a year earlier before you blame acquisition.
Then look inside the weak cell. Click the Jul to Sep period 1 cell and read the top marketing channels in the detail panel. That takes seconds and often names the channel before you change any settings.
Do this next. Rerun the report with the cohort definition filtered by marketing channel, then by marketing type, and compare the period 1 column across those splits. If one channel or a discount push carries the drop, you have found it.
Leave the bottom row alone. Oct to Dec has one period of data. Its 11% is not yet a result.
Period 1 retention plotted against the size of each cohort.
Five cohort patterns and what each one means for your store
1. One cohort runs well below its neighbors
A single month below the months either side of it is usually about how those customers arrived. A heavy discount month, a prospecting push into a broad audience or a marketplace promotion all produce cohorts that never repeat at the rate of the rest.
Check: filter the cohort definition by marketing channel, then marketing type. When a discount cohort carries the drop, the fix belongs in acquisition, and no amount of lifecycle email will repair it.
What to change: judge that channel on period 1 retention rather than on first-order ROAS, and keep your deepest codes out of prospecting audiences.
2. Every cohort lifts in the same calendar month
A lift at period 4 in your August row, period 3 in September and period 2 in October all lands on December. It is a calendar effect reaching every cohort at a different age, not a pattern in customer behavior.
Check: read the diagonal. Sale months inflate the cohorts they touch and the cohorts acquired during them, and neither effect is retention.
3. A newer cohort is smaller but spends more per customer
Fewer customers at the same age, with a higher amount spent per customer, means you are buying fewer and better customers. Whether that is good depends on what you paid for them.
Check: compare the two cohorts at the same age rather than along one row. Inside any single row, amount spent per customer always climbs while the per-period customer count always falls, which is how every cohort behaves and not a signal about yours.
A smaller cohort that spends more still loses money if customer acquisition cost rose faster, which is the comparison the LTV to CAC ratio is built to make.
4. Two cohorts hold the same retention rate but different revenue
The same share of customers comes back, and different money arrives. Two things cause that: a different average order value, or the same customers placing more orders each.
Check: click a cell in each row and compare average order value against orders per customer in the detail panel. The two point at different fixes, merchandising for the first and frequency for the second.
5. The curve climbs in steps at a fixed gap
Steps at a regular interval, every third month or every sixth week, show a replenishment rhythm. The gap is your natural reorder cycle.
Check: set your flow timings to that gap. The 60 and 90 day delays that ship as flow defaults are placeholders, and your grid gives you the real number.
Before you trust a cohort: size, age and the triangle problem
Every cohort grid is a triangle. The oldest cohort has the most periods filled, each newer one has fewer, and the bottom right is empty because that time has not happened yet. The shape fools people constantly, because the eye reads a thinning bottom edge as a decline.
Give a cohort enough customers.
Below roughly 100, a handful of orders swings the percentage far enough to be meaningless. A 40-customer cohort moves 2.5 points every time one person buys. Widen the interval to quarterly until the cohorts are big enough to read.
Give a cohort enough age.
Three months is the earliest most stores can say anything, six is better for considered purchases. Until then you are looking at an incomplete row.
Compare at equal ages only.
Never set a three-month-old cohort beside a two-year-old one and call the difference a trend. Pick one age and follow that column over time.
What cohort analysis will not tell you
-
Why a cohort behaved that way. The grid shows that a group came back less. It cannot say whether the discount caused it or whether the customers a discount attracts were always going to buy once.
-
Anything clean about gift buyers. Customers acquired on a gift purchase in December often never intended to buy for themselves, so they depress a cohort without any retention problem existing.
-
Whether your number is good. Published repeat-rate ranges vary so much by category that the level alone tells you little. A period 1 retention of 18% is neither good nor bad on its own. Four quarters of it falling is.
-
A figure that stays put. Refunds and cancellations change historical cells after the fact, so a number you noted last month may not match the same cell today. Export or screenshot the view when you report a number to anyone.
Published benchmarks are a range check rather than a target, and the shape they describe is steep. Across more than 100 retailers in seven verticals, Bluecore found that of every 100 new buyers in a year, roughly 25 came back for a second order and 6 were still buying three years later.
When Shopify's cohort report runs out and you need a sheet
The built-in report covers most of what a store without an analyst needs. What it will not do:
-
Cohort on anything other than the first order. Grouping customers by a later behavior, such as everyone who ever bought a particular replenishment item, means exporting the orders and building the grid yourself. A segment can find those customers, but it cannot produce a grid from them.
-
Put margin on the cohort. The metrics are sales based. A cohort that looks strong on net sales can be your weakest once gross margin differs by product, and heavy discounters often land there.
-
Join to ad spend. Your ad platforms hold the cost, so a cohort payback view means pulling both sides together.
When you do move to a sheet, export your orders rather than your customers. The customer CSV carries totals, total orders and total spent, with no order dates on it, and a cohort grid needs a date and a customer on every row. Keep the cohort definition identical to the one in the admin so the two reconcile.
For subscription stores, your subscription app's own cohort view usually beats both.
Turn cohort analysis into one number you track
A column only becomes a trend once you have three or four quarters of it.
|
Set up once |
Read every quarter |
|
Metric to customer retention rate, interval to quarterly, date range to two years |
Open the saved exploration |
|
Save it as a custom data exploration so the settings survive |
Read the period 1 column across the last six cohorts that have finished period 1 |
|
Write down the segment query for your oldest fully aged cohort |
Add the cohort that has just passed three months, drop the oldest |
|
Note which marketing channel your weakest cohort arrived on |
Move the segment dates forward one quarter, keeping the same six-month lag |
The number to carry into every other conversation is the one the segment gives you, not the one in the grid. Record the lag beside it, because a repeat rate with no age attached cannot be compared with anything.
The harder part is deciding what to change once the weak cohort has a name. A retention marketing audit starts from your own cohort splits and works out which fix to do first.