PricingOpen the demo

How to read a cohort without a data team

“Are these customers worth anything after the first order?”

8 min readUpdated August 2026No signup required
A cohort grid beside a retention curve falling away month by month.

A campaign that returns 2.8 on first orders and never sees those customers again is usually worse than one returning 1.9 whose customers come back twice. Platform reporting cannot tell them apart, because it stops watching the moment the pixel fires. Cohort analysis is how you tell them apart, and it does not require a warehouse.

What a cohort actually is

A cohort is a group of customers defined by when they first bought, followed forward in time. The point is not the total revenue — it is the shape of the curve. Two channels can deliver identical first-month revenue and diverge completely by month four.

Building one in a spreadsheet

  1. 1Export every order for the last 12 months: order id, customer id or email, order date, order value.
  2. 2For each customer, find their first order date. That month is their cohort.
  3. 3For each order, compute months-since-first = (order month) − (cohort month).
  4. 4Pivot: cohort month down the rows, months-since-first across the columns, sum of order value in the cells.
  5. 5Divide each row by the number of customers in that cohort. You now have revenue per customer per month.
  6. 6Make the columns cumulative. That is your LTV curve.
Two channels, same first month
100
M0
12
M1
6
M2
4
M3
3
M4
2
M5

Gross profit per customer, by month since first order. Cumulative after six months: 127. A big first month and nothing after it — this channel must clear break-even on day one, because there is no day two.

Reading the curve

What you seeWhat it meansWhat to do
Steep first month, flat afterOne-time buyers. The first order is the whole relationship.Judge that channel on first-order profit alone. It must clear break-even on day one.
Modest first month, steady climbA repeat business. Acquisition can run thinner than it looks.Raise the acceptable acquisition cost to the payback horizon you can finance.
Curve flattens then lifts at month 6–12Seasonal or replenishment cycle.Do not judge before a full cycle has run. Six-month windows will mislead you.
Recent cohorts below older ones at the same ageAcquisition quality is falling as you scale.The channel is saturating. This shows up in cohorts months before it shows up in ROAS.

Attaching cohorts to channels

The useful version splits each cohort by where the customer came from. That requires knowing the acquisition source of the first order — which is where most spreadsheets stop, because the platform's own reporting does not survive the export.

If you have UTM parameters stored on the order, use them, with one caveat: UTMs record the last click before purchase, not the ad that created the customer. For a first order those are often the same thing. For anything else they are not.

LTV ROAS at horizon N

cumulative gross profit per customer at month N ÷ acquisition cost per customer

DKK 940 cumulative gross profit by month 6 against DKK 610 to acquire = 1.54. Whether that is good depends on whether you can fund six months of it.

Where the spreadsheet runs out

You can get a long way with the above. What it cannot do is tell you which specific ad created a customer who touched three channels before buying, keep working when a customer orders under a different email, or update without you rebuilding it every month. Those are the reasons attribution systems exist — but do the spreadsheet version first. It will tell you whether the answer would even change your decisions.

In short

  • A cohort is customers grouped by first purchase, followed forward.
  • Use gross profit in the cells, not revenue.
  • The shape matters more than the total — flat after month one means judge on day one.
  • Falling recent cohorts is the earliest reliable signal of saturation.
  • Payback horizon is limited by what you can finance, not by what is profitable.

Where this method runs out

Everything above works in a spreadsheet. Keeping it current, and matching every order back to the ad that actually caused it, is the part that does not. That is what Kepra does — and the demo runs on sample data with no signup, so you can judge it before believing any of this.

Open the demo →

Read next