RevOps · Board & diligence reporting

Cohort Retention Analysis: A Practical Guide for B2B SaaS

A cohort retention analysis shows how much revenue each group of customers still pays you months after they started. Most companies can't produce one in a day, because the CRM was never built to keep the inputs. Here is the data model, the benchmarks and the build that turn NRR by cohort into one report instead of a three-week project.

Joe LaGrutta, Founder of JayOh
Joe LaGrutta, Founder, JayOh12 min read · Updated November 2026
Meme of Drake giving a skeptical side-eye while sipping a drink, captioned: Portfolio company: We have all the data. We just can't tell you net retention by cohort.
The portfolio review, summarized.
The original LinkedIn post → read it
Joe LaGrutta, Founder of JayOh
Joe LaGrutta, Founder, JayOh
"We have all the data" is the most expensive sentence in a portfolio review. Having data and answering a question with it are two different things. Ask for net revenue retention by cohort and here's what usually turns up. The contract start date gets overwritten at every renewal, so the original cohort is gone. Expansion lives in billing. Churn lives in a CS spreadsheet. The CRM has neither, just a deal amount that mixes one-time fees with recurring revenue. So the answer becomes a three-week analyst project, and it comes back with a footnote. What has to exist before cohort retention is one report instead of one project: 🔸 An original start date nothing is allowed to overwrite 🔸 Recurring and one-time revenue split at the line-item level 🔸 Expansion, contraction and churn logged as their own events 🔸 One customer ID shared by CRM, billing and CS None of that is exotic. It's data model work most companies skip because day-to-day selling doesn't need it. Diligence does. So does the exit. For operating partners, this is a 100-day item, not a year-two item. Every quarter it waits is another quarter of history someone rebuilds by hand. If a portfolio company can't produce NRR by cohort in a day, the number you're underwriting is a guess. #PrivateEquity #SaaSMetrics #NRR #ValueCreation #RevOps
Why this breaks

Why NRR by cohort becomes a three-week project

The math is easy. The inputs were never kept. Selling day to day doesn't need them, so nobody built them, and the gap only shows up when a board or a buyer asks.

CAUSE 01 · THE BIG ONE

The cohort date gets overwritten

Contract start date resets at every renewal. Three renewals later, a 2021 customer looks like a 2024 customer and the original vintage is gone.

← fix this first
CAUSE 02

Recurring and one-time revenue are mixed

Deal amount blends setup, services and subscription. The starting base is wrong before retention is even calculated.

CAUSE 03

Movements live in three places

Expansion lives in billing. Churn lives in a CS spreadsheet. The CRM has neither, just a deal amount.

CAUSE 04

No shared customer ID

CRM account, billing customer and CS record don't join cleanly, and parents and subsidiaries roll up differently in each.

CAUSE 05

No written definitions

Pilots, overages, reactivations and downgrades get handled differently by every analyst who touches the file, so the answer changes every quarter.

What good looks like

Retention benchmarks for B2B SaaS (2026)

Median NRR is about 102% and median GRR is about 84%. Your blended number matters less than whether your newest cohorts are tracking above those lines.

MetricWeakAcceptableStrongSource
Net revenue retention (NRR), all B2B SaaS92% or less~102% (median)110%+Aleph x Benchmarkit, 2026 (CY2025 data)
Gross revenue retention (GRR), all B2B SaaS76% or less~84% (median, down from 88%)91%+Aleph x Benchmarkit, 2026
NRR, ACV $25K to $50K97% or less~102% (median)111%+SaaS Capital, 2025
Median GRR by go-to-market motionPLG 79%Hybrid 80%Sales-led 88%Aleph x Benchmarkit, 2026
Median NRR by pricing modelSeat-based 98%n/aUsage-based 108%Aleph x Benchmarkit, 2026
Time to produce NRR by cohort2 to 3 weeks2 to 5 daysSame dayJayOh engagement experience
Weak = bottom quartile, strong = top quartile where the source reports quartiles. Sources: Aleph NRR benchmarks 2026 (Benchmarkit data, ~230 companies), SaaS Capital retention benchmarks, 2025. The time-to-produce row comes from JayOh engagements, not a third-party survey.
The playbook

How to make NRR by cohort one report: the 8-step build

Definitions first, data model second, report last. Teams that start with the chart end up rebuilding it every quarter.

  1. Write the retention spec before touching a field

    What
    A one-page definition: what counts as ARR, what a cohort is, how reactivations and parent/child accounts are handled.
    Why
    Every later step encodes these choices. Without them, two analysts produce two NRR numbers from the same data.
    How
    Count committed recurring subscription only. Exclude setup, services, paid pilots and usage above committed minimums. Cohort = month of first recurring invoice. A customer who returns after 90+ days is a reactivation. Have the CFO sign it. Our ARR and pipeline diligence prep guide covers the ARR definition in more depth.
  2. Lock an original start date nothing can overwrite

    What
    One date field on the customer record that is set once and never changes at renewal.
    Why
    This is the cohort key. If it moves, the analysis is broken at the root.
    How
    HubSpot: create a company date property, Original customer start date. Set it with a workflow that only writes when the property is unknown (Professional or Enterprise). On Enterprise, restrict edit access under Manage access, knowing HubSpot notes the API and manual record creation can still write to it. Salesforce: an Account date field populated by a record-triggered Flow only when null, read-only through field-level security for everyone but admins, with Field History Tracking turned on.
  3. Split recurring from one-time at the line item

    What
    A revenue type on every line item: Recurring, One-time or Usage.
    Why
    Deal amount can't tell a setup fee from a subscription. The cohort's starting ARR has to.
    How
    HubSpot: set billing frequency and term on every product in the product library so one-time items are flagged at the source. Salesforce: a Revenue Type picklist on Product, mirrored to Opportunity Product by formula, or CPQ subscription records where CPQ is live. See our Opportunity Products playbook.
  4. Record every ARR movement as its own event

    What
    Five movement types with a date and an amount: New, Expansion, Contraction, Churn, Reactivation.
    Why
    Netting them hides contraction. A downgrade logged as a renewal disappears from GRR entirely.
    How
    HubSpot: on Revenue Hub, the Contracts object computes MRR and ARR and links each renewal to the prior contract. Without it, the recurring revenue properties (Recurring revenue deal type: New business, Renewal, Upgrade, Downgrade; inactive date and reason) work on Sales Hub or Service Hub Enterprise, but values are entered manually. Salesforce: a custom ARR Movement object (Account, month, type, ARR change) created by Flow when a renewal or amendment closes, or loaded from billing.
  5. Give CRM, billing and CS one customer ID

    What
    The billing system's customer ID stored on the CRM account, and the CS tool keyed to the same ID.
    Why
    Expansion from billing and churn from CS can't join to cohorts without it.
    How
    Sync the billing ID to the account (our Chargebee integration guide shows the pattern). Roll subsidiaries to a parent ID. Reconcile monthly: CRM ARR against billing MRR times 12, with a variance report owned by RevOps.
  6. Build a monthly ARR snapshot

    What
    One row per customer per month: customer ID, month, ARR, cohort month.
    Why
    CRMs show current state. Cohorts need history, and history you didn't capture can only be rebuilt from invoices.
    How
    A scheduled export or warehouse sync on the first of each month. In Salesforce, reporting snapshots can hold it for small data sets. Start today even if older history needs a one-time rebuild from billing.
  7. Build the cohort table

    What
    Rows = cohort, columns = months since start, cells = cohort ARR at month N divided by starting ARR.
    Why
    This is the view a buyer asks for: monthly cohorts by start month, left-aligned.
    How
    NRR includes expansion. GRR excludes it and caps at 100%. Show logo retention alongside. Weight blended figures by cohort ARR, not simple averages. Keep monthly and annual plans in separate views.
  8. Reconcile, publish and review quarterly

    What
    Tie the table to billing, attach the definition, and put it on the board pack.
    Why
    A cohort table that doesn't tie to cash gets rebuilt by the buyer anyway.
    How
    Latest column total within 1% of billing ARR. Sample 10 customers back to invoices. Footer the definition on every view. In HubSpot, the board-ready revenue pack covers the MRR waterfall that sits next to it.
Best practices & common mistakes

What separates a cohort table that survives diligence

Buyers rebuild retention from billing. Every shortcut you take is one they find.

Best practices

  • Lead with revenue retention, show logos too. Revenue drives valuation; logo churn explains it.
  • Cohort by month of first recurring invoice, not signature date or deal close date.
  • Left-align cohorts by months since start so vintages compare directly.
  • Weight blended figures by ARR, never a simple average of cohort rates.
  • Separate monthly and annual plans. Mixing them distorts early months.
  • Cut by ICP, channel, plan, geography and acquired vs. organic. One table hides the segment that's leaking.
  • Keep new-logo revenue out of expansion. A new subsidiary signing is a new customer unless your spec says otherwise.
  • Disclose every exclusion in the footer: outliers, pilots, write-offs.
  • Snapshot monthly, forever. History is the asset; it can't be bought later.
  • Name an owner for the definition and the monthly reconciliation.

Common mistakes (and what they cost)

  • Survivor-only cohorts. Cost: retention overstated; buyers discount the whole analysis.
  • Downgrades logged as renewals. Cost: contraction vanishes, so GRR looks better than cash.
  • Usage overages in the recurring base. Cost: the buyer strips them out and your NRR drops in the data room.
  • Start dates reset at renewal. Cost: a three-week rebuild from invoices every board cycle.
  • Reporting only the blended number. Cost: a strong old cohort hides a decaying new one until a buyer finds it.
  • Acquired customers mixed with organic. Cost: post-acquisition churn stays invisible, and that's the first thing an investor checks.
  • No tie-out to billing. Cost: the table is treated as a claim, not a fact.
Interactive tool · Benchmark grader

Cohort retention grader: does your blended NRR hide a weak vintage?

Enter each cohort's starting ARR and its 12-month movements. The grader scores every cohort against 2026 benchmarks and shows what your blended number is hiding.

Cohort retention grader

Values are ARR in dollars, measured 12 months after each cohort started. Example data loads by default.

Template + Claude skill

The cohort-ready data model checklist

Run this before anyone asks for NRR by cohort. Every unchecked line is a day of analyst rebuild.

COHORT-READY DATA MODEL CHECKLIST (JayOh)

DEFINITIONS
[ ] Written ARR definition signed by the CFO
[ ] Excludes setup, services, paid pilots and usage above committed minimums
[ ] Cohort = month of first recurring invoice
[ ] Reactivation rule written (e.g. returns after 90+ days = new cohort)
[ ] Parent/subsidiary rollup rule written

CUSTOMER RECORD
[ ] Original customer start date field exists
[ ] It is set once by automation and cannot be edited by reps
[ ] Billing customer ID stored on every CRM account
[ ] CS tool keyed to the same customer ID
[ ] Acquired vs. organic flag on every customer

REVENUE DATA
[ ] Revenue type on every line item: Recurring / One-time / Usage
[ ] Movements logged as events: New / Expansion / Contraction / Churn / Reactivation
[ ] Downgrades never recorded as plain renewals
[ ] Monthly ARR snapshot captured on the 1st of every month

REPORTING
[ ] Cohort table: monthly cohorts, left-aligned, NRR + GRR + logo retention
[ ] Blended figures weighted by ARR
[ ] Monthly and annual plans shown separately
[ ] Latest month ties to billing within 1%
[ ] 10-customer sample traced to invoices each quarter
[ ] Definition printed in the footer of every view
[ ] Named owner for definition and monthly reconciliation
Free Claude skill

cohort-retention-auditor

  • Builds an NRR and GRR cohort table from your billing or ARR export, using the definition above.
  • Grades each cohort against the 2026 benchmarks and flags vintages the blended number hides.
  • Audits your data model and lists every gap with the evidence row and what it costs in diligence.

Install it

  1. Claude web or desktop: Settings > Capabilities, make sure code execution and file creation is on, then under Skills click Upload skill, choose the .zip and toggle it on.
  2. Claude Code: save the file as ~/.claude/skills/cohort-retention-auditor/SKILL.md, or in .claude/skills/ inside your repo.

Skills are available on Claude Pro, Max, Team and Enterprise plans. New to skills? Read how to use skills in Claude.

Preview SKILL.md
FAQ

Cohort retention analysis: common questions

Short answers to what operators and investors ask most.

What is a cohort retention analysis?

A cohort retention analysis groups customers by the month or quarter they started paying and tracks how much of that group's starting revenue remains over time. In B2B SaaS it is usually shown as net revenue retention (NRR) and gross revenue retention (GRR) by cohort, so you can see whether newer customers retain better or worse than older ones.

How do you calculate NRR by cohort?

For each cohort, take its starting ARR, add expansion, subtract contraction and churn, then divide by starting ARR. GRR uses the same formula without expansion and can never exceed 100%. Calculate it at month 12, 24 and 36, and weight any blended figure by cohort ARR.

What is a good net revenue retention rate in 2026?

Median NRR for B2B SaaS is about 102%, with the top quartile at about 110% and the bottom quartile at about 92%, according to Aleph and Benchmarkit's 2026 benchmarks on calendar 2025 data. Median GRR is about 84%. Usage-based companies run higher NRR than seat-based ones.

Should cohorts be based on logos or revenue?

Show both, but lead with revenue. Revenue retention drives valuation because expansion can offset churn, while logo retention explains why revenue moved. A cohort can lose customers and still grow revenue, which only shows up when you track both.

Can HubSpot or Salesforce report NRR by cohort natively?

Partly. HubSpot's Contracts object on Revenue Hub calculates MRR and ARR and links renewals, and its recurring revenue reporting tracks new, renewal, upgrade and downgrade deals. Salesforce can store the inputs on accounts, opportunity products and custom objects. Most teams still need a locked start date, line-item revenue types and a monthly ARR snapshot to get a true cohort table.

What do private equity buyers look for in a cohort analysis?

Buyers rebuild ARR from the billing export, then cut retention into monthly cohorts by start month. They strip out pilots, services and usage above committed minimums, check whether newer cohorts retain as well as older ones, and look at acquired versus organic customers separately. A table that ties to billing and cash holds up; one that doesn't gets rebuilt.

The JayOh view

NRR by cohort is a data model, not a dashboard

Every company we audit says it has the data. What it doesn't have is a start date that survives renewal, a line item that knows it's recurring, and one ID that joins the CRM to billing. None of that is exotic. It's a few weeks of build that day-to-day selling never forced anyone to do.

Diligence will force it. So will the exit. For operating partners it belongs in the first 100 days, because every quarter it waits is another quarter of history someone rebuilds by hand. If you want to see how far your portfolio company is from a same-day cohort table, start with our net revenue retention work or talk to us directly.