Cohort Analysis for eCommerce Brands Made Simple

TL;DR

  • Cohort analysis groups customers by the month of their first order and follows each group forward, so you can see whether the customers you bought last quarter behave like the ones you bought a year ago.

  • You will find the report under Analytics > Reports in your Shopify admin, with the Category filter set to Customers. It is called Customer cohort analysis, and it is not a Plus-only feature.

  • Change four settings before you read anything: metric, interval, cohort definition and comparison. The defaults count customers by month, which answers a question most merchants are not asking.

  • Read down a column as well as along a row. The column compares cohorts at the same age and tells you whether acquisition is improving.

  • Customer retention rate in the grid is a per-period figure, so the columns cannot be added together. For a cumulative repeat purchase rate, build a customer segment instead.

  • A cohort needs roughly 100 customers and three to six months of age before the numbers mean anything.

Ildi Veliu

Written by Ildi Veliu

18 min read

Cohort Analysis for eCommerce Brands Made Simple

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.

FAQs about cohort analysis for eCommerce

Why don't my cohort numbers match my email or analytics platform?

Mostly because the tools count different things. Klaviyo cohorts profiles by the month they first performed a conversion metric you choose, which does not have to be an order, so a cohort there can hold people Shopify has never seen as customers. Beyond the grouping, the usual causes are refund handling, gross against net sales, store time zone against reporting time zone, and duplicate customer records. Pick one source for any number you report and say which one it is.

Does a subscription renewal count as a repeat order in the cohort?

 Each renewal creates an order, so it lands in the grid like any other repeat order. On a hybrid store that makes one-time buyers look worse by comparison, which is why the subscription filter in the cohort definition exists. Run it both ways.

If a customer orders again with a different email address, do they stay in the same cohort?

No. Shopify treats that as a new customer record with its own first order, so they start a new cohort and your repeat rate reads lower than reality. You can combine the two under Customers > More actions > Merge customer, which moves the order history onto one profile. The merge cannot be reversed, and profiles that have ever had a subscription contract, a vaulted card or a store credit account cannot be merged at all.

Should wholesale or B2B orders go in the same cohort report as DTC?

 Not usually, and splitting them is harder than it looks. A blended store runs one online store for all customers, so the sales channel filter will not separate company orders from DTC orders. A dedicated B2B store keeps the reporting separate by design. On a blended store you can build the split as a customer segment, though a segment cannot feed the cohort report, so what you get is a cumulative rate for the group.

Ildi is a Technical SEO Specialist at Shero Commerce on a mission to help websites unlock their full organic potential. With a background in Informatics-Economics, he bridges the gap between technical web development and search engine algorithms, specializing in technical audits and search performance strategy. He is always looking for new ways to outsmart the algorithms and drive high-intent organic traffic.