Behavioral Cohorts and Retention Grids in Vexo
From a single retention curve to a full cohort grid — sliced by time, or by an action your users take
August 21, 2026
Jump to section
TL;DR — what shipped
- Retention grid: a cohort matrix — one row per cohort, one column per period — showing the share of each cohort that returned in period 0, 1, 2, and on.
- Daily, weekly, or monthly: switch granularity to read 14 days, 8 weeks, or 6 months of periods.
- Behavioral cohorts: type a custom event to group users by an action they took, not just the period they first appeared.
- Same filters: the grid reads your global filter context, so a segment you already applied reshapes every cohort in place.
An earlier post covered Vexo's overall retention widget — a single curve reporting how many users came back on Day 1, 7, 14, and 30. That one number is a great health check, but it flattens everyone into one line. It can't tell you whether last week's cohort retains better than the one before it, or whether users who hit your aha moment stick around longer than users who never did. The retention grid answers exactly those questions.
Everything below is live today, and it builds directly on the shared filter context from the segments post — no new setup beyond the SDK you already have.
The retention grid: cohorts down, periods across
A retention curve is one line. A retention grid is a table. Each row is a cohort — a group of users bucketed by when they first showed up — and each column is a period measured from that cohort's start. The cell where they meet is the percentage of that cohort still active in that period. Read a row left to right and you watch one cohort decay over time; read a column top to bottom and you compare the same period across cohorts.
Every row starts with the cohort's label and its size — how many users it contains — followed by the period cells. Period 0 is the cohort itself, so it's always 100% and always the darkest cell in the row; each cell after it shades lighter as the return rate drops. Hover any cell and Vexo tells you the raw count behind the percentage — how many of the cohort returned in that period. The color isn't decoration: it's a heatmap, so a healthy product shows deep color holding across the columns and a leaky one fades to pale within a period or two.
Why a grid beats a curve: the overall widget answers “do users come back?” The grid answers “is retention getting better or worse over time, and for whom?” If your Week-1 return rate climbs cohort after cohort down the column, a change you shipped is working. If it sags, you can see it in the grid weeks before it moves the single top-line number.
Daily, weekly, or monthly
One switch changes the time base of the whole grid. Vexo ships three granularities, each with a period window tuned to how far that lens is worth reading:
| Granularity | Columns | Best for |
|---|---|---|
| Daily (D0–D14) | 14 days | Onboarding and the first-week drop-off, where most churn happens. |
| Weekly (W0–W8) | 8 weeks | Whether the app becomes a weekly habit — the default view. |
| Monthly (M0–M6) | 6 months | Durable, long-run retention that predicts growth. |
The column headers follow the granularity — D0, D1, D2… in daily, W0, W1… in weekly,M0, M1… in monthly — so it's always clear what one step across the grid means.
Behavioral cohorts: group by what users did
By default the grid's cohorts are time-based: everyone who first appeared in a given day, week, or month. That's the classic model. But the more useful question is often behavioral — do the users who did X retain better than everyone else? That's what the cohort event field is for.
Type a custom event name into the box above the grid and the cohorts change from “all active users” to “users who did that event.” The rows still bucket by time and the periods still measure return rate — but now every number describes the population that took the action you care about. Leave the field empty and you're back to retention across all active users. It's one input, and it converts the grid from “who came back?” into “do the people who completed_checkout come back more than the people who didn't?”
import { customEvent } from 'vexo-analytics';
// The events you already track are the cohorts you can slice by.
customEvent('completed_checkout', { plan: 'pro' });There's nothing new to instrument. Any custom event you already send is available as a cohort definition — the grid reads from the same event stream that powers your funnels and trends.
It respects the filters you already set
Like the rest of Vexo's product-analytics views, the retention grid reads from the global filter context — date range, app version, operating system, country, and your custom-event filters. Apply a saved segment and every cohort in the grid narrows to that population at once. So you can layer the two: a behavioral cohort (“users who finished onboarding”) inside a segment (“on the version we shipped last week, in the US”), and read how that group retains week over week — without rebuilding the audience.
When there isn't enough history yet, the grid says so plainly: cohorts need at least one full period — a full day, week, or month depending on the granularity — before there's anything to show.
How to actually read it
- Scan down a column to see whether a given period's retention is improving cohort after cohort. This is your release scorecard.
- Scan across a row to see how fast a single cohort decays — where the color falls off is where you lose people.
- Set a cohort event to test a hypothesis: pick the action you think drives retention and see if its cohorts hold color longer than the all-users baseline.
- Apply a segment to ask the same questions of one slice — a version, a country, an acquisition source — instead of the whole user base.
Getting started
The retention grid is live in your app's analytics today. If you're already sending events with the Vexo React Native SDK, open the retention grid, pick a granularity, and — when you want a behavioral cut — type in a cohort event. New to Vexo? Create a free account and connect your app in a few minutes; see the docs for the full setup.
Frequently asked questions
How is the grid different from the retention widget I already had?
The overall retention widget reports one cohort's Day 1/7/14/30 return rates — a single curve. The grid breaks users into many cohorts (one row each) across many periods (one column each), so you can compare cohorts against each other and watch retention trend over time rather than reading a single number.
What is a behavioral cohort?
A cohort grouped by an action instead of by time. Type a custom event into the cohort-event field and the grid measures retention only for users who performed that event — for example, everyone who fired completed_checkout — instead of all active users.
Which granularities can I choose?
Daily (14 daily periods), weekly (8 weekly periods), or monthly (6 monthly periods). Switching granularity re-reads the whole grid on that time base, and the column headers change to D, W, or M accordingly.
Why is period 0 always 100%?
Period 0 is the cohort itself — the users who defined the cohort are, by definition, all present at the start. It's drawn as the darkest cell in each row, and every later period is measured as the share of that starting group who returned.
Does the grid respect my saved segments and filters?
Yes. It reads the same global filter context as the rest of Vexo, so an applied segment or any date/version/OS/country filter reshapes every cohort in the grid at once — no need to rebuild the audience.
Questions or feedback? Reach out at hello@vexo.co or join our Discord.