Cohort Analysis for eCommerce: How to Read What Your Customers Are Really Worth

How to run cohort analysis for your eCommerce brand: the four numbers per cohort, how to build the grid from Shopify, and what it says about max CAC.

Jordan HayesJordan Hayes11 min read
A laptop on a wooden desk showing a cohort grid with a diagonal band of amber cells, beside a printed copy of the same grid, a navy notebook, a mug, and a pen
On this page

Cohort analysis for eCommerce means grouping customers by the month you first acquired them, then tracking the gross profit each group returns against what you paid to get them. Hayes Media is an eCommerce growth agency for DTC and Shopify brands, and this is the report we build before we touch a budget. It tells you when a cohort pays back, whether the customers you are buying are getting better or worse month over month, and what you can afford to pay for the next one.

Most brands never build it. They read a blended dashboard where last month's repeat orders sit next to this month's first orders, and every number gets an average that describes nobody. A cohort view separates them.

What is a cohort, and why is acquisition month the right cut?

A cohort is a group of customers who placed their first order in the same period. Acquisition month is the right cut because it is the only grouping where the denominator stays fixed and the spend that created the group is known.

Once a customer is in a cohort, they stay there. Someone whose first order landed in March is a March customer forever, whether their next order comes in April or eighteen months later. That is what makes the report honest. You are watching one closed group age, not a pool that keeps refilling.

Month is the right length for most brands. A week is usually too thin to read: one big spend day or one press mention skews it. A quarter hides the thing you most want to see, which is what happened to your customers when you changed the creative, the offer, or the budget. You changed those things monthly. Read the results monthly.

You can cut cohorts other ways later: first product bought, first channel, discount versus full price. Start with acquisition month, because it is the one you can line up against an ad spend number without arguing about attribution.

Which four numbers should you read for every cohort?

Four numbers, in this order.

Customers acquired. The count of people who placed their first order that month. Not orders, not sessions, customers. This is the denominator for everything else, so it has to be a clean first order count with refunds and test orders stripped out.

CAC. What you paid to acquire one new customer that month. Take the acquisition spend for the month and divide it by new customers acquired. Keep the definition simple and keep it the same every month. If you include agency fees and creative costs one month, include them every month.

Cumulative gross profit per customer, by month of age. This is the spine of the report. Gross profit is what is left after product cost, shipping, payment fees, and discounts. Cumulative means you add each month's gross profit to the running total, so the number only goes up. Per customer means you divide by the cohort's customer count, not by its order count. You read it at month 0, month 1, month 2, and onward, where month 0 is the acquisition month itself.

Repeat purchase rate and time to second order. What share of the cohort has ordered again by a given age, and how long the gap typically is. These two explain the shape of the gross profit curve. If cumulative gross profit is flat after month 0, the repeat rate is telling you why.

Those four are enough to run the business. Everything else, AOV by cohort, product mix, channel split, is diagnosis you reach for once one of the four moves.

How do you build a cohort report from Shopify or your order export?

You need one order export and one spend number. No tool required.

Export every order with these columns: order ID, customer ID or email, order date, order subtotal, discount amount, shipping charged, shipping cost, product cost, payment processing fee, and refund amount. Shopify's order export gives you most of it. Product cost comes from your cost per item field, and payment fees come from your payouts export. If shipping cost is not in your data, use your real average per order and say so on the report.

Then work through it in order.

Step one. For each customer, find the date of their earliest order. That month is their cohort.

Step two. For each order, calculate gross profit: subtotal, minus discount, minus product cost, minus payment fee, minus the shipping you actually paid, plus the shipping the customer paid, minus refunds. One formula, applied to every row.

Step three. For each order, calculate its age: the number of whole months between the customer's cohort month and the order date. A customer's first order is age 0 by definition.

Step four. Build a grid. Rows are cohort months. Columns are age 0, 1, 2, 3 and onward. Each cell is the total gross profit that cohort produced at that age, divided by the number of customers in the cohort. Then make it cumulative across the row.

Step five. Add two columns on the left: customers acquired, and CAC for that month.

Step six. Leave the bottom right of the grid empty. A cohort acquired two months ago has no month 6 number, and guessing one is how brands talk themselves into spending more.

A spreadsheet pivot table handles all of this. The report matters, not the software.

How do you read the curves?

Read three things: where it crosses, where it flattens, and whether the newer rows sit above or below the older ones.

The payback point. Follow a cohort's cumulative gross profit per customer across its row until it passes that cohort's CAC. That month is payback. Before it, the cohort is a loan you made to yourself. After it, every additional order is margin.

The flattening point. Every curve goes close to horizontal eventually. Where it flattens is roughly the ceiling on what that cohort will ever return, and the distance between the flattening point and CAC is the actual profit. A curve that flattens at month 3 is a different business from one that flattens at month 12, not a worse one. It just means the whole result depends on the first order, so your gross margin and your CAC have to carry it.

Cohorts getting better or worse. Compare cohorts only at the same age. March at month 4 against April at month 4, never against April at month 1. If the newer rows sit above the older ones at matched ages, the customers you are buying are improving. If they sit below, something changed: the offer, the creative, the traffic mix, or the product experience after the sale.

Then pair the curve with CAC to get the diagnosis. CAC rose and the curve held: an acquisition problem, and the work sits in creative and buying. CAC held and the curve dropped: a retention or product problem, and the work sits after the sale. Both moved the wrong way: stop scaling until you know which one came first, and read how to scale Facebook ads without breaking your CAC before you turn the budget back up.

How do cohorts set what you can afford to pay for a customer?

They give you the only honest ceiling on CAC, because they tell you what a customer actually returns instead of what you hope they will.

The scoreboard is lifetime gross profit to CAC. Pick the age you are willing to wait for, based on what your cash position allows. Read the cumulative gross profit per customer that your recent cohorts reliably reach by that age. Decide the multiple you need on top of CAC to cover overhead and leave a profit. That gives you a maximum CAC you can defend, and it is a number you can hand to whoever is buying media without a conversation about ROAS.

This is why we sell creative, Meta media buying, and eCommerce retention marketing as one engine and judge all three on the same number. Better creative pulls CAC down. Better retention pulls the curve up. Both move the same ratio, and a cohort grid is where you see which one is doing the work. If ROAS is still the number your team argues about, start with our piece on eCommerce unit economics, then come back to this one.

What are the mistakes that ruin a cohort report?

Four, and we see all four regularly.

Blended averages. A single lifetime value figure for the whole business blends a cohort from two years ago with one from last month. It moves when your mix moves and tells you nothing about the customers you are buying today. If a number cannot be traced back to a specific cohort at a specific age, do not make a decision with it.

Counting revenue instead of gross profit. Revenue curves look wonderful and they hide the discount you gave, the shipping you ate, and the product cost. Two brands with identical revenue curves can sit on opposite sides of profitable. Build the grid in gross profit or do not build it.

Discount driven repeat. If the second order only ever arrives behind a 30% off email, the cohort is not retaining, it is buying back its own customers at a worse margin. Because the grid is in gross profit, this shows up on its own: repeat rate climbs while the curve barely lifts. That is the signal to fix your post purchase email flows rather than the discount.

Reading cohorts too early. A cohort that is six weeks old has a month 1 number and nothing else. Brands look at a thin early row, decide retention is broken, and cut the spend that was working. Only compare mature ages, and leave immature cells blank.

There is a fifth that is less common and more damaging: changing the gross profit formula partway through. Start including shipping cost in month seven and every earlier cohort suddenly looks better than it was. Freeze the formula and write it down.

What does this look like with real numbers?

Here is a worked example. These figures are illustrative, made up to show the mechanism. They are not a benchmark, and your numbers will differ.

Say a brand acquired 1,000 new customers in one month and spent $60,000 to do it. CAC is $60. AOV is $80 and gross margin is 60%, so gross profit per order is $48.

At month 0, every customer in the cohort has placed exactly one order, so cumulative gross profit per customer is $48. That is below the $60 CAC. The cohort is under water, which is normal and not a problem by itself.

By month 3, the cohort has averaged 1.30 orders per customer. Cumulative gross profit per customer is $62.40. The cohort crossed its CAC somewhere in month 3. That is the payback point.

By month 6 it has averaged 1.55 orders, or $74.40 per customer. By month 12, 1.80 orders, or $86.40. The curve is flattening, so $86.40 is close to what this cohort will return. Lifetime gross profit to CAC is $86.40 divided by $60, or 1.44 to 1.

Now change one thing. The next cohort has the same curve, but CAC rose to $75 because the winning ads fatigued. Payback moves from month 3 to somewhere after month 6, and the ratio falls to 1.15 to 1. Nothing about the customers changed. The acquisition cost did, and the grid tells you exactly where to go looking.

When does this not apply?

Cohort analysis needs volume and time. It is the wrong tool in four cases.

Too few customers. If you are acquiring a few dozen new customers a month, a single large order swings the whole row. Group into quarters instead, and accept that you are reading direction rather than precision.

Too new. A brand with three months of history has no mature cohort. Track the grid from day one, but make decisions off gross margin and month 0 payback until the rows have age on them.

Genuinely single purchase products. If your product is bought once in a decade, the curve flattens at month 0 and the analysis collapses into a simpler question: does gross profit on the first order beat CAC. Build the grid anyway to confirm the repeat rate really is near zero, then stop.

You do not own the customer record. If most of your revenue comes through a marketplace or wholesale, you cannot build first order dates for customers you cannot see. Run cohorts on the direct channel only and be clear that is what the report covers.

One more limit worth saying out loud. Cohort analysis tells you what happened. It does not tell you why. The grid points at a month and a metric. Reading the creative, the offer, and the flows is still the job.

If you want this built on your own data, book a discovery call. We will pull your order export, build the cohort grid, and walk you through what your cohorts say about your maximum CAC and where your curve is leaking. No onboarding fees. No lock-in contracts. No junior marketers.

Frequently asked questions

What is cohort analysis in eCommerce?
It is grouping customers by the month they placed their first order, then tracking what each group returns over time. For every cohort you read four things: how many customers you acquired, what they cost to acquire, cumulative gross profit per customer by month of age, and repeat purchase rate. A customer stays in their original cohort forever.
How much data do I need before cohorts are useful?
Enough customers per month that one large order cannot swing the row, and enough months that your oldest cohorts have real age on them. If you acquire only a few dozen customers a month, group into quarters. If your brand is a few months old, build the grid now but decide off first order margin until the rows mature.
Should a cohort report use revenue or gross profit?
Gross profit. Revenue hides discounts, shipping you absorbed, payment fees, and product cost, so two brands with identical revenue curves can sit on opposite sides of profitable. Gross profit is what is left after all of those come out. It is also the only version of the curve you can compare against CAC to find a payback point.
What is a good lifetime gross profit to CAC ratio?
There is no universal number, and anyone quoting one is guessing about your margins and your cash position. The ratio you need depends on your overhead, how long you can wait for payback, and how fast you want to grow. Read your own recent cohorts at a fixed age, pick the multiple that covers overhead and leaves a profit, and hold the buying to it.
Can I run cohort analysis without buying software?
Yes. You need one order export with order date, customer ID, subtotal, discount, shipping charged and paid, product cost, payment fees, and refunds, plus your monthly acquisition spend. Tag each customer with their first order month, calculate gross profit per order, then pivot by cohort and months since acquisition. A spreadsheet handles it.

Want this run for your brand?

Hayes Media builds direct response creative, buys the media, and runs the email & SMS behind it.

Book a discovery call

Keep reading