Run a cohort analysis

Find out whether customers who joined recently stick around, come back, and pay better or worse than the customers who joined before them, using the signup and activity data already in your analytics, billing, or product database.

Key Takeaways

  1. A cohort analysis groups customers by when they joined, usually by signup month or week, and follows each group over the same stretch of time. It shows whether newer customers behave better or worse than older ones once you compare them at the same age.
  2. The chart is the easy part. The decisions that make it useful are what counts as joining, what counts as staying, and which date to line the cohorts up against, such as the day you changed pricing or onboarding.
  3. Kite runs cohort analysis on data you already have. It reads retention and cohorts from PostHog, Mixpanel, or Amplitude, subscriptions and cancellations from Stripe, or your own user tables in Supabase.
  4. Kite returns a retention table and chart, explains what changed between cohorts and how confident it is, and can refresh the analysis on a schedule as each new cohort ages.
  5. You don't need to have built a cohort view before. You can ask Kite a plain question, such as "Are people who signed up after our pricing change sticking around longer?"
On this page

What is cohort analysis, and why does it matter for marketing?

Cohort analysis compares groups of customers who started at different times. Everyone who signed up in March is one cohort, everyone who signed up in April is another, and so on. For each group, you track the share who are still active, still paying, or still buying one week, one month, and three months after they joined.

The reason to do this instead of watching a single retention number is that a single number mixes everyone together. If you ran a big promotion in June, your overall active-user count can rise even while the people who joined in June leave faster than anyone before them. Grouping by start date separates the two effects, so you can see whether the customers you're bringing in now are better or worse than the ones you brought in before.

That makes cohort analysis the most direct way to check whether a change worked. Marketers usually reach for it after one of these changes:

  • a new pricing page or a new plan
  • a redesigned onboarding flow or welcome email sequence
  • a new acquisition channel, such as paid social or a partner program
  • a launch that brought in a wave of signups

Building a cohort view by hand takes more judgment than most guides admit. You have to export signups and activity, decide which event marks the start, decide which event proves someone is still around, group everyone by start date, and then read a triangle of percentages without fooling yourself. Small teams often skip it because nobody has an afternoon for the export and the spreadsheet.

This is work an AI agent does well, because the hard parts are definitions and interpretation, not arithmetic. Kite is an AI marketer. It researches your business, builds a growth strategy, and ships the work that brings you new customers. When you ask how a group of customers is doing, Kite pulls the cohorts from the tools where your data already lives and tells you what they show.

How Kite runs a cohort analysis

Kite starts with the question you're actually trying to answer, not with a chart. "Did the new onboarding help?" needs different cohorts than "Are customers from LinkedIn ads worth what we pay for them?" Kite uses what it knows about your business, such as your product, your pricing, and the changes your team has made, to propose how to define the cohorts and what to measure.

It then reads the data from your connected analytics, billing, or product database, builds the cohort table, and compares the groups at the same age. It writes up what changed, what probably caused it, and how much weight the result can bear. You get the table and chart in the conversation, and Kite can publish a report or keep the analysis running as new cohorts come in.

  1. Decide what counts as joining and what counts as staying
  2. Group customers by when they joined
  3. Build the retention table and chart
  4. Explain what changed and how much to trust it
  5. Keep the analysis running as new cohorts come in

Decide what counts as joining and what counts as staying

A cohort analysis is only as good as two definitions: the event that puts someone in a cohort and the event that proves they're still around. Kite proposes both before it runs anything, because the wrong pair produces a chart that looks precise and answers the wrong question.

The starting event is usually a signup, a first purchase, or the start of a paid subscription. The "still here" event depends on what your product is for. For a design tool, opening a project is a better sign of staying than logging in. For a subscription business, still paying is the measure that matters. For an ecommerce store, a second order is usually the one to watch.

Kite picks these from what it can see in your data and what it knows about your product. In PostHog or Mixpanel, it reads the list of events you track. In Stripe, it works from customer creation dates and subscription statuses. In Supabase, it reads your tables to find the column that records when each user signed up. It then tells you which events it plans to use and why, so you can correct it before the analysis runs. For example, Kite might say it plans to count a customer as retained if they created at least one report in a given week, because logging in alone includes people who opened the app and left.

Group customers by when they joined

Kite groups customers into cohorts by the period they started in, and it picks the period size to match how quickly your customers make decisions. Weekly cohorts suit a product people use every day, where a change shows up within days. Monthly cohorts suit a subscription that bills monthly or a store where people buy every few weeks.

The period size also decides how many people land in each cohort. If you get 40 signups a week, weekly cohorts are too small to compare, because one or two customers leaving moves the percentage a lot. Kite checks the cohort sizes before drawing conclusions and moves to larger periods when the groups are too thin to trust.

Kite can also split cohorts by something other than date when your question calls for it. A cohort of everyone who signed up after a pricing change can be compared directly with everyone who signed up in the same number of weeks before it. Cohorts can also be split by plan, by the first product someone used, or by where they came from, as long as your tools record that detail.

Build the retention table and chart

Kite builds the standard cohort view: one row for each cohort, one column for each period since joining, and the share of each cohort still active in that period. Reading down a column compares every cohort at the same age, which is the comparison that matters.

Here is the shape of the table, using made-up numbers for a product that changed its onboarding in April:

Signup month

Customers

Month 1

Month 2

Month 3

February

410

52%

38%

31%

March

455

50%

36%

30%

April

520

61%

47%

May

490

63%

Reading down the Month 1 column, the April and May cohorts kept roughly 11 more points of their customers than February and March did. The empty cells are months that haven't happened yet, which is normal: the newest cohorts always have the shortest history.

Where the data comes from decides how Kite builds the table:

  • PostHog and Mixpanel. Kite runs a retention query directly in your account, using the starting and returning events it proposed. It can also save the cohort in the tool so your team can reuse it in their own charts.
  • Amplitude. Kite pulls Amplitude's retention analysis and your existing cohorts. It can also add a note to your Amplitude charts on the date of the change you're testing, so anyone looking at those charts later sees why the line moves.
  • Stripe. Kite lists customers by the date they were created and subscriptions by status and cancellation date. From those, it builds cohorts that show how many customers from each month are still paying.
  • Supabase. Kite runs a read-only query against your product database to group users by signup date and count the ones who came back. This is the route to take when your best record of what customers do lives in your own tables.

In the Kite web app, the table and chart appear as an interactive chart and table in the conversation. In Slack, Kite shares the findings in the thread and can link to a published report.

Explain what changed and how much to trust it

Kite's write-up says which cohorts differ, by how much, at what age, and what probably explains it. A table of percentages doesn't answer "Did the new onboarding help?" until someone reads it carefully, so Kite does that reading and shows its reasoning.

Kite looks for the things that commonly mislead people reading a cohort chart:

  • Comparing at different ages. A cohort that joined last month can't be compared with one that joined last year on three-month retention, because it hasn't reached three months. Kite only compares cohorts at ages they've all reached.
  • Mixed causes. If you changed pricing and launched a new ad channel in the same month, a better cohort could be explained by either one. Kite names both and, where your data records the source, splits the cohort to separate them.
  • Small cohorts. A swing of a few points in a cohort of 30 customers can be noise. Kite says when a difference is too small for the cohort size to support.
  • Seasonal patterns. A December cohort may behave differently from a September cohort for reasons unrelated to anything you changed. Kite points this out when the cohorts span a season your business is sensitive to.

The write-up separates what the data shows from what Kite infers about the cause, and it states how confident Kite is. It also suggests what to do next. For example, Kite might suggest keeping the new onboarding and looking at the step where the remaining customers drop off. Or, if a cohort from one channel retains far worse than the rest, it might suggest moving budget away from that channel.

Keep the analysis running as new cohorts come in

A cohort analysis gets more useful every month, because each new cohort adds a row and each older cohort adds a column. A one-time chart taken two weeks after a change only shows the first column, which is rarely enough to make a decision.

Kite can put the analysis on a schedule, such as the first Monday of each month, and refresh the same cohorts with the same definitions every time. Using the same definitions keeps each refresh comparable with the last one. Each run starts a fresh conversation in the Kite web app, or posts to the Slack channel you choose if your team uses Slack, and it calls out what moved since the last run.

If a report needs more room than a chat message, Kite can publish it as a report or dashboard at a stable link. A dashboard can refresh its data when someone opens it, so your team always sees the latest cohorts without asking Kite again.

What you get

Cohort definitions you can check

The starting event, the "still here" event, and the period size, each with a short reason, so you can correct them before the analysis runs.

A retention table and chart

One row for each cohort, one column for each period since joining, with the cohort sizes shown alongside the percentages.

A plain-language read of the results

Which cohorts are better or worse, by how much, the likely cause, and how much confidence the data supports.

A recommended next step

What Kite suggests doing about the result, such as keeping a change, digging into one drop-off point, or rethinking a channel.

A recurring refresh, if you want one

The same cohorts on a schedule, delivered where your team works, with what changed since last time.

How to get started

Start by asking Kite the question you want answered. You might say, "Are customers who signed up after our April pricing change sticking around longer than the ones before?" or "Build me a monthly retention chart from PostHog."

Kite tells you which connected tool it plans to read, the cohort definitions it proposes, and the period it will use. You can change any of those, or ask Kite to go ahead. Reading your data and building the analysis doesn't need approval. If Kite suggests saving a cohort in your analytics tool or adding a note to your charts, it tells you first.

Cohort analysis needs data about your customers that lives outside Kite, so connect the tool that holds it before you ask. If your product events are in PostHog, Mixpanel, or Amplitude, connect that account. If you want to know who keeps paying, connect Stripe. If your own user records are the best source, connect Supabase. You can work with Kite in your browser or in Slack.

Integrations used for cohort analysis

Kite reads cohorts from the tool that already records when your customers joined and what they did afterward. Most teams connect one product analytics tool, and teams that sell subscriptions often add their billing tool so they can see who keeps paying as well as who keeps using the product.

Common questions

What's the difference between cohort analysis and a retention rate?

A retention rate is one number, such as "60% of customers are still active after a month." A cohort analysis splits that number by when customers joined, so you can see whether the March group kept 50% and the May group kept 63%. The single rate can hide a change in either direction, while the cohort view shows which groups moved.

How many customers do I need for a cohort analysis to be useful?

You need enough customers in each cohort that one or two people leaving doesn't swing the percentage. As a rough guide, cohorts of a few hundred customers give a steady read, and cohorts of a few dozen are only useful for spotting large differences. When your weekly cohorts are small, Kite groups by month instead, or compares one large group of customers from before a change with one from after it.

Can Kite run a cohort analysis if I don't use a product analytics tool?

Yes, as long as some connected tool records when each customer started and what they did afterward. Stripe works for subscription businesses because it records when each customer was created and when each subscription was canceled. Supabase works when your own user tables record signups and activity. Kite's built-in analytics track visits and conversions on websites it hosts, but they don't follow individual customers over time, so they aren't a source for cohorts.

How long after a change should I wait before reading the cohorts?

Wait until the first cohort after the change has reached the age you care about. If you want to know whether customers stay for three months, you need at least one post-change cohort that is three months old. The first column of the table usually shows up within a week or a month and can hint at a result, so Kite reports early signs as early signs and keeps refreshing until the later columns fill in.

Can Kite tell me which marketing channel brings in customers who stay?

Yes, if your tools record where each customer came from. Kite splits each cohort by the source your analytics or product database records, such as a paid campaign, an organic search, or a referral, and compares how long each group stays. For a wider comparison of tools built for this, see The best product analytics tools for small teams that want cohort analysis without a data analyst Coming soon .

Questions this page answers

  • How do I run a cohort analysis with AI?
  • Can an AI marketing agent run a cohort analysis?
  • How do I compare customers who signed up in different months?
  • Are customers who joined this quarter sticking around longer than last quarter's?
  • How do I build a retention cohort chart?
  • What is cohort analysis, and how do I use it for marketing?

About the author

Devon Wells leads product marketing at Kite, the AI marketer. He spent a decade marketing industrial AI, from self-driving trucks to computer vision, but now Kite handles most of the work itself.

Tell me your goal and I’ll get to work.

Get started for free