A founder pulls up their Shopify dashboard and sees "38% of revenue from returning customers" for the quarter. It reads like good news, so the conversation moves on to next month's campaign calendar. Nobody asks the question that number cannot answer: returning from when, and how many of them are actually still coming back.
That single blended percentage is an average of averages. It mixes a cohort acquired eight months ago that has had time to order three or four times with a cohort acquired three weeks ago that has barely had a chance to order twice. A healthy-looking topline number can sit on top of a retention curve that is quietly getting worse every month, and nothing in "38% of revenue from returning customers" would tell you that.
In this piece:
- What a cohort grid shows that a blended retention rate cannot
- The three numbers a useful cohort table actually needs
- Why the spreadsheet version usually breaks before you learn anything
- How to build the grid with tools you likely already have
- What a healthy versus unhealthy retention curve looks like
What a cohort grid shows that a blended rate hides
A cohort is a group of customers who share a starting point, most commonly the month of their first order. A cohort table lines those groups up as rows, with columns for time since that first order, so each cell answers one specific question: of the customers acquired in this month, what percentage bought again by this point in time.
Google's own documentation on GA4's Cohort Exploration describes three ways to calculate that return rate. Standard shows the percentage who returned in that exact period. Rolling shows who returned in every period up to that point, useful for spotting brands with a genuinely habitual buyer. Cumulative shows anyone who returned at any point up to that column, which is the version most people mean when they say "our retention rate."
The reason this matters more than the single number: a discount-acquired cohort from a Black Friday push can retain at half the rate of an organic-search cohort acquired the same month, and a blended average will never surface that. The grid does, immediately, because the two cohorts sit in different rows.
The three numbers your cohort table actually needs
Most cohort dashboards drown a founder in metrics. The cohort analysis ecommerce teams can actually use needs only three numbers, and they compose into the figure that matters.
Shopify's own definition of customer lifetime value breaks it into average purchase value, purchase frequency, and average customer lifespan, multiplied together. That is also, not coincidentally, exactly what a cohort grid is built to measure over time: how much a cohort spends per order, how often it reorders, and how long it keeps ordering before it goes dormant.
Shopify's own guidance also puts a number on the guardrail worth tracking against it: lifetime value at roughly three times acquisition cost is the commonly cited threshold for a sustainable customer economics model. A cohort table is what lets you check that ratio by acquisition month and channel instead of assuming it holds across the whole business.
Why the spreadsheet version breaks before you learn anything
The instinct for most teams is to export Shopify orders and build the grid in a spreadsheet. That works for exactly as long as every order is attributable to exactly one customer identity, which is a bigger assumption than it sounds.
In a delivered tracking audit, we found a native platform pixel app re-running the same tags inside a sandboxed iframe on every page load, generating two different visitor IDs for a single visitor. That kind of defect is invisible in a top-line session count. It is fatal to a cohort table, because every duplicated identity either inflates a cohort's new-customer count or splits one returning customer's order history into two separate, shorter-lived rows that never connect back to each other.
Guest checkout compounds the same problem. A customer who checks out as a guest in March under one email, then creates an account in June under a slightly different one, looks like two customers to a naive spreadsheet join instead of one customer with a second order. The retention rate that spreadsheet reports is not wrong by a rounding error. It is structurally undercounted, and it stays undercounted every month the identity gap goes unfixed, because the error compounds into every future column of the grid.
This is the part most generic cohort-analysis guides skip entirely: the table is only as trustworthy as the identity layer feeding it. Before trusting a repeat-purchase number for a real decision, like shifting budget toward the acquisition channel with the best-looking cohort, it is worth confirming that a customer who orders twice actually shows up as one row, not two. That confirmation is closer to a tracking audit than a reporting exercise.
Building the grid with what you already have
Start with GA4's free Cohort Exploration template if you have GA4 e-commerce events configured. It groups users by first-touch date and tracks return activity in standard, rolling, or cumulative form, and it costs nothing beyond the setup you likely already have.
Its ceiling is real, though. GA4 cohorts count users and sessions, not order value, so a cohort report there can tell you what fraction of March's acquisitions returned by June, but not what those returning orders were actually worth in revenue. For a revenue-weighted grid, you need a source that carries order value alongside identity.
That is the gap a purpose-built product analytics tool closes. Mixpanel's retention documentation describes multi-criteria cohorts, "did not do" logic for spotting churn, and identity resolution across devices, which is exactly the layer a spreadsheet join struggles to replicate reliably at scale. Klaviyo's own explainer on cohort analysis frames the same idea from the retention-marketing side: grouping customers by acquisition period so you can direct win-back campaigns at the specific cohort that is drifting, not the customer base as a whole.
Getting from "a grid exists" to "a grid the team actually opens weekly" is the difference between a one-off export and an instrumented product analytics setup built on Mixpanel, Amplitude, or PostHog, with the event schema and identity handling done once so every cohort after it is trustworthy by default.
Reading the curve: what healthy retention looks like
Once the grid exists, the shape across a row matters more than any single cell. Most ecommerce cohorts show their steepest drop between the first and second purchase; the jump from a second purchase to a third is consistently smaller. That means the highest-leverage window to instrument a win-back trigger, a replenishment reminder, a personalized second-order offer, sits in the first 30 to 60 days after order one, not scattered evenly across the customer's whole lifecycle.
Comparable ecommerce work we have referenced before backs this up from the funnel side too: the same discipline of finding the one step where the money leaks, covered in our breakdown of ecommerce funnel analysis, applies just as directly to retention. The leak in a cohort table is almost never spread evenly across every column. It concentrates at one specific gap, usually the first reorder window, and that concentration is exactly what a blended annual retention percentage cannot show you.
Watch for the same identity issues that show up in acquisition tracking. If your cohort table and your checkout tracking setup are not built on the same customer identity logic, a cohort's apparent decline can be a stitching problem wearing a retention costume, not an actual change in buyer behavior.
Build it this week
A cohort table you can trust does not require a new tool purchase to start.
- Confirm purchase events carry a stable, deduplicated customer identity before building anything on top of it.
- Turn on GA4's Cohort Exploration template and group by first-touch month, even before any revenue weighting exists.
- Export 90 days of Shopify order history and manually spot-check ten guest-checkout orders against ten account orders for identity gaps.
- Compare at least two acquisition cohorts side by side, ideally one paid and one organic, and look for where the curves diverge, not just whether they are high or low.
- Once the identity layer checks out, decide whether GA4's free view is enough or whether the business decision on the table justifies a revenue-weighted setup in a dedicated product analytics tool.
None of that requires trusting a single blended percentage again. A cohort table replaces one number that could mean almost anything with a grid that tells you exactly which acquisition month, which channel, and which week is winning or losing you a second order, and that is the difference between a retention slide and a retention decision.

