MyDealList · Due diligence

SaaS Churn Cohort Analysis: The Advanced Math for Tech Due Diligence

Pre-close SaaS cohort analysis masterclass: advanced NRR and GRR decomposition, triangle cohort sheets, predict-churn formulas, and spotting unbilled usage anomalies and retention manipulation in data rooms.

40 min read

The seller's teaser deck says 110% net revenue retention. The Stripe export in the data room tells a different story once you segment by signup month, exclude annual prepay credits, and reconcile usage meters against billed invoices. This is where most micro-SaaS deals die quietly—not on legal, not on code review, but on saas cohort analysis math that never ran before LOI. You are not buying trailing twelve-month MRR; you are buying the forward decay curve of every customer vintage still on the platform.

This guide is written for acquisition entrepreneurs conducting pre-close tech due diligence on subscription businesses in the $1k–$15k MRR band. You will learn advanced NRR and GRR decomposition models, how to build a triangle cohort retention sheet from raw subscription events, how to calculate net revenue retention correctly when sellers blend expansion and reactivation, how to apply a predict churn formula to forecast MRR at 6-, 12-, and 24-month horizons, and how to spot unbilled usage anomalies and retention manipulation before escrow release.

This is intentionally not a post-acquisition stabilization playbook. Our SaaS churn and retention audit guide covers onboarding rebuilds, pricing rewrites, and 90-day MRR recovery after you own the asset. This article covers the math you must complete before you sign—while you still have leverage to reprice, walk, or structure holdbacks. Pair it with micro-SaaS valuation fundamentals, pricing and billing math, and technical due diligence checklist, saas security audit and penetration testing guide, and intellectual property due diligence playbook for a complete pre-close stack.

Not financial, tax, or legal advice. Retention benchmarks vary by ACV, vertical, and contract structure. Rebuild all metrics from raw exports; never rely on seller dashboards alone.

1. Pre-Close vs. Post-Close: Why This Math Runs Before LOI

The difference between pre-close cohort diligence and post-close retention operations is leverage and liability. Before close, a deteriorating Q3 2025 vintage is a price adjustment or deal-killer. After close, it is your problem—and your burn rate. Sellers know this, which is why data rooms often ship with blended churn percentages, annualized NRR on a single slide, and cohort tables that exclude downgrades, paused accounts, or usage true-ups.

DimensionPre-close (this guide)Post-close (retention audit)
Primary goalDetect mispricing / fraud; forecast decayStop the leak; rebuild onboarding
Data accessSeller-controlled exports; time-boxedFull admin; live product telemetry
OutputAdjusted multiple; holdback terms90-day stabilization plan
NRR treatmentDecompose expansion vs. reactivationOptimize expansion playbooks
Failure modeWalk or renegotiateEmergency pricing / support surge
Rule of thumb for micro-SaaS DD: if you cannot reconstruct monthly logo and revenue retention for every signup cohort over 18 months from raw events, you do not have enough data to pay full ask.

2. Advanced NRR and GRR Mathematical Models

Sellers love quoting NRR because a single number above 100% signals “the base grows itself.” Professional buyers decompose NRR into components that reveal whether growth is organic expansion, billing catch-up, or reactivated churners counted as retained revenue.

2.1 Canonical NRR and GRR definitions

GRR = (MRR_start − Contraction − Churn) / MRR_start NRR = (MRR_start + Expansion − Contraction − Churn) / MRR_start NRR = GRR + (Expansion / MRR_start) Where for cohort c at month t relative to signup: MRR_start(c,t) = sum of MRR from cohort c customers active at t=0 Expansion(c,t) = upsell + cross-sell + seat adds (same customer_id) Contraction(c,t) = downgrades + partial seat removals Churn(c,t) = full cancels (MRR → 0, status = canceled)

To calculate net revenue retention correctly in diligence, fix a cohort anchor month (typically first full month after signup) and track dollar flows—not customer counts—through month 12. Logo retention and revenue retention diverge when high-ARPU accounts churn while long-tail low-tier accounts persist; always model both.

2.2 Dollar-weighted vs. logo-weighted retention

Logo Retention(c,t) = Active_logos(c,t) / Active_logos(c,0) Dollar Retention(c,t) = MRR(c,t) / MRR(c,0) Weighted GRR(t) = Σ_c [MRR(c,0) × Dollar Retention(c,t)] / Σ_c MRR(c,0)

Portfolio-level GRR is a MRR-weighted average of cohort dollar retention—not a simple average of cohort percentages. A seller reporting “average cohort retention 92%” without weights overstates health when recent large cohorts decay faster than legacy vintages.

2.3 Decomposed NRR: expansion quality score

Not all expansion is equal. Reactivation revenue (churned customer returning within 90 days) should not inflate NRR the same way same-cohort seat expansion does. Build an expansion quality score:

Expansion_quality = (Organic_expansion) / (Organic_expansion + Reactivation_MRR + One_time_true_up) Organic_expansion = upsell/cross-sell on continuously active accounts Reactivation_MRR = returning customers with gap > 90 days canceled One_time_true_up = usage catch-up invoices, backdated annual upgrades
Expansion qualityGradeDiligence implication
> 85%A — organicNRR credible; premium multiple support
70–85%B — mixedAdjust NRR down 3–8 pts for forecast
50–70%C — noisyTreat NRR as marketing; use GRR for val
< 50%D — inflatedRed flag; demand event-level reconciliation

2.4 Annual vs. monthly contract normalization

Annual prepay distorts monthly NRR if you recognize MRR incorrectly. Normalize all contracts to monthly MRR equivalent before cohort math:

MRR_equivalent = Annual_contract_value / 12 For usage + base hybrid: MRR_equivalent(m) = Base_MRR(m) + Trailing_3mo_usage_avg(m)

Failure to normalize annual prepay is the #1 source of NRR overstatement in sub-$50k SaaS deals. A customer who prepays $1,200 in January and cancels in March still contributed $100/mo for two months— but some sellers leave them in the active base through December.

2.5 GRR floor and NRR ceiling for valuation

Use GRR as your valuation floor (core product stickiness without upsell narrative) and NRR as your upside ceiling only when expansion quality exceeds 80%. For micro-SaaS diligence in 2026:

MetricHealthy (B2B niche)Walk-away signal
GRR (12-mo rolling)≥ 85%< 75%
NRR (12-mo rolling)95–115%> 120% without expansion proof
GRR–NRR spread5–20 pts> 30 pts (inorganic expansion)
Recent cohort GRR (last 4 vintages)Within 5 pts of portfolio GRR10+ pts below legacy cohorts

3. Triangle Cohort Sheet Design

The triangle cohort sheet is the single most important artifact in SaaS retention diligence. Rows are signup cohorts (month of first paid invoice). Columns are months since signup (M0, M1, M2…). Cell values are dollar retention percentage or absolute MRR remaining. The triangle shape emerges because older cohorts have more months of history.

3.1 Schema and data requirements

Minimum export fields from Stripe, Paddle, Chargebee, or Lemon Squeezy:

  1. customer_id — stable identifier
  2. subscription_id — for plan change tracking
  3. event_type — created, renewed, upgraded, downgraded, canceled, paused
  4. event_timestamp — UTC, sub-day precision
  5. mrr_delta — signed dollar change
  6. plan_id — for tier segmentation
  7. billing_interval — monthly, annual, usage

Assign each customer to a cohort month = month of first paid invoice (exclude trials unless trial converts same month). For each cohort c and month offset t:

MRR(c,t) = Σ customers in cohort c with active paid status at end of month t Retention%(c,t) = MRR(c,t) / MRR(c,0) × 100 Triangle cell [row=c, col=t] = Retention%(c,t) or MRR(c,t)

3.2 Example triangle (dollar retention %)

CohortM0M1M2M3M6M12
2024-01100%94%91%89%84%78%
2024-06100%92%86%81%72%
2025-01100%88%79%71%
2025-09100%81%68%

Read the triangle diagonally: if M1 retention drops from 94% (2024-01) to 81% (2025-09), product or ICP drift is real—not a blip. If only recent cohorts decay while legacy rows stay flat, suspect channel quality degradation or a broken onboarding release.

3.3 Layered triangles: segment overlays

Build separate triangles for plan tier, billing interval, acquisition channel, and geography. Discrepancies between layers expose hidden risk:

  • Annual vs. monthly triangle — annual cohorts should show lower early churn but cliff risk at renewal
  • Usage-based triangle — volatile M0→M1 if onboarding does not drive consumption
  • Channel triangle — paid ads cohorts decaying 2× organic indicates CAC-quality mismatch
  • Enterprise vs. SMB triangle — SMB rot masked by one sticky enterprise logo inflates portfolio NRR

3.4 Cohort maturity and survivorship bias

Young cohorts (< 6 months) understate long-term decay. Mature cohorts (> 18 months) may include customers grandfathered on deprecated plans. Apply a maturity adjustment when comparing vintages:

Adjusted_Retention(c,t) = Retention(c,t) × (1 + ε × max(0, 6−t)/6) ε = estimated survivorship bias (typically 0.02–0.05 for micro-SaaS) Use only for t < 6 when forecasting long-horizon GRR

Always request 18 months minimum of event data. Twelve months hides annual renewal cliffs that land in month 13.

4. Spotting Unbilled Usage Anomalies and Retention Manipulation

Data rooms are curated. Sellers have incentives to smooth MRR, defer churn recognition, and inflate NRR before a sale. Your job is to reconcile billing system exports against product usage logs and invoice history.

4.1 Unbilled usage anomaly detection

Usage-based and hybrid SaaS products often accumulate unbilled usage—API calls, seats, storage, or credits consumed but not yet invoiced. Pre-close, sellers may present MRR that excludes pending true-ups, making retention look healthier than cash collection will support.

Usage_billing_gap(m) = Metered_usage_value(m) − Billed_usage_revenue(m) Cumulative_unbilled = Σ Usage_billing_gap(m) over trailing 6 months Red flag: Cumulative_unbilled > 8% of reported MRR
Anomaly patternWhere to lookWhat it means
Meter > invoice lagProduct DB vs. Stripe invoicesMRR overstated; true-up cliff post-close
Credit burn without MRR dropCoupon/credit ledgerArtificial retention; churn deferred
Paused ≠ canceledSubscription status fieldLogo churn underreported
Failed payment excludedDunning / recovery logsInvoluntary churn hidden in “active”
Related-party accountsEmail domain + payment methodFake MRR padding the base

Request raw usage meter exports (API gateway logs, database aggregation tables, or billing provider meter events) and reconcile to the penny for the top 20 accounts by MRR. If the seller refuses usage logs, treat all usage-reported MRR as unverified and haircut val 15–25%.

4.2 Retention manipulation red flags

  1. Reactivation counted as retained — customer cancels M4, returns M8; seller keeps them in M4–M7 retention numerators. Fix: hard cutoff at cancel event.
  2. Annual prepay on dying accounts — seller offers discount to annual before sale; MRR locked but product unused. Cross-check login frequency for annual cohorts.
  3. Downgrade reclassified as expansion — plan rename where old “Pro” maps to new “Starter” at higher price. Compare plan_id history, not display names.
  4. Founder-owned accounts in base — filter customer emails matching founder domain, family names, or shared payment fingerprints.
  5. Churn date backdating — cancel event timestamp after effective end. Compare canceled_at vs. last invoice period end.
  6. Blended churn annualized incorrectly — monthly 5% reported as “60% annual” instead of ~46% compounded. Always rebuild from monthly events.

4.3 Cross-system reconciliation matrix

Run this matrix before LOI. Any cell with > 3% unexplained variance triggers a seller interview and holdback discussion.

Source ASource BCompareTolerance
Stripe MRR exportSeller P&L revenueMonthly totals, 12 mo± 2%
Stripe active subsProduct DB active usersCount at month-end± 1% logos
Usage meterInvoiced usage line itemsTrailing 3 months± 5%
Cohort triangle M12Seller deck NRR claimSame period± 5 pts
Bank depositsStripe net payoutsMonthly, 6 mo± 3% (fees adjusted)

5. Predict Churn Formula Models for Forward MRR

Pre-close valuation requires a forward MRR curve—not just trailing twelve months. The predict churn formula stack below converts cohort triangles into 6-, 12-, and 24-month MRR forecasts with confidence bands.

5.1 Constant hazard (exponential decay) model

Simplest model: assume each cohort decays at constant monthly rate r after M1. Fit r from mature cohorts (M6–M12 observations):

Retention(t) = Retention(1) × (1 − r)^(t−1) Solve for r given Retention(6) and Retention(1): r = 1 − [Retention(6) / Retention(1)]^(1/5) Forecast MRR(t) = Current_MRR × Weighted_avg_retention(t)

Example: M1 retention 88%, M6 retention 72%. r = 1 − (0.72/0.88)^(1/5) ≈ 3.9% monthly hazard after M1. On $8,000 MRR, 12-month forecast without new logos: ~$5,050 MRR (37% decay)—material for a 5× multiple negotiation.

5.2 Cohort survival convolution model

More accurate for diligence: convolve each active cohort's remaining MRR forward using its own retention curve, then sum.

MRR_forecast(T) = Σ_cohorts [ MRR(c,now) × Retention_c(T − age_c) ] + New_MRR_assumption(T) ← set to ZERO for conservative DD base case Retention_c(k) = interpolated from triangle row c

Run three scenarios for the data room memo:

  • Bear — recent cohort decay rate applied to all vintages; zero new MRR
  • Base — cohort-specific retention curves; zero new MRR
  • Bull — base curves + 50% of seller's claimed new MRR run rate (never 100% in DD)

5.3 Logo churn to revenue churn bridge

Revenue_churn(m) ≈ Logo_churn(m) × Avg_churned_ARPA(m) / Avg_portfolio_ARPA(m) Adjust for downgrade contraction: Total_MRR_loss(m) = Logo_churn_MRR + Contraction_MRR Predicted_MRR(m+1) = MRR(m) − Total_MRR_loss(m) + Expansion_MRR(m)

When logo churn looks acceptable (4%) but revenue churn is elevated (7%), the bridge reveals high-ARPU account loss—far more dangerous for a micro-SaaS with 80 customers and three whales.

5.4 Renewal cliff model (annual contracts)

Cliff_MRR(month) = Σ contracts with renewal_date in month Expected_retained = Cliff_MRR × Historical_renewal_rate(segment) Expected_churn = Cliff_MRR − Expected_retained Historical_renewal_rate = count(renewed) / count(up for renewal) by segment

Map every annual contract renewal date for the next 18 months. Micro-SaaS with 40% annual billing can lose 25–40% of MRR in a single month if renewal rates are overstated. This is invisible in monthly blended churn.

5.5 Confidence bands and deal impact

Forecast horizonTypical accuracy (well-modeled)Valuation action
6 months± 8–12% MRRUse for earn-out baseline
12 months± 15–22% MRRUse for purchase price cap
24 months± 25–35% MRRStrategic planning only; not for escrow

If bear-case 12-month MRR falls below 70% of seller ask implied MRR, renegotiate to a earn-out or holdback structure tied to verified retention—not seller projections.

6. Cohort Tables for the Data Room Memo

Deliverables you should produce (or require from seller) before LOI signing. These tables belong in your internal IC memo and inform APA holdback schedules.

6.1 Required cohort table pack

  1. Triangle retention % — 18 months of cohorts, M0–M18 columns
  2. Triangle absolute MRR — same structure, dollar values
  3. Logo count triangle — account retention by cohort
  4. Monthly NRR/GRR waterfall — 24 months, expansion decomposed
  5. Plan-tier retention matrix — GRR by tier at M6 and M12
  6. Annual renewal schedule — next 18 months of cliff exposure
  7. Usage billing gap report — metered vs. invoiced, top 50 accounts
  8. Forward MRR forecast — bear / base / bull with assumptions documented

6.2 NRR/GRR monthly waterfall template

MonthStart MRR+ Expansion− Contraction− ChurnEnd MRRNRRGRR
2025-10$11,200$680$210$540$11,13099.4%93.3%
2025-11$11,130$420$180$620$10,75096.6%92.8%
2025-12$10,750$890$95$480$11,065102.9%94.7%

December NRR above 100% with GRR below 95% signals expansion-dependent growth on a leaking core—exactly the pattern that justifies GRR-based multiples in your valuation model.

7. Pre-Close Due Diligence Checklists

7.1 Data room request list (Days 1–3)

  1. Raw Stripe/Paddle subscription event export (CSV, 24 months minimum)
  2. Invoice line-item export with plan_id and quantity history
  3. Customer list with created_at, first_paid_at, canceled_at
  4. Usage meter raw events or daily aggregates (if usage-based)
  5. Product analytics login events for top 50 accounts by MRR
  6. Coupon, credit, and dunning recovery logs
  7. Annual contract renewal calendar with historical renewal outcomes
  8. Seller's internal MRR spreadsheet (compare to your rebuild)

7.2 Analysis execution checklist (Days 4–10)

  1. Rebuild MRR month-end series from events; reconcile to seller P&L
  2. Construct triangle cohort sheet (retention % and absolute MRR)
  3. Calculate monthly logo churn, revenue churn, NRR, GRR for 18 months
  4. Compute expansion quality score; flag reactivation inflation
  5. Segment triangles by plan tier, billing interval, and channel
  6. Run usage billing gap analysis on hybrid accounts
  7. Fit predict churn formula; produce bear/base/bull 12-month MRR
  8. Map annual renewal cliffs for next 18 months
  9. Document all variances > 3% with seller written responses
  10. Translate findings into adjusted multiple and holdback terms

7.3 Go / no-go decision matrix

SignalProceedRenegotiateWalk
Portfolio GRR (12-mo)≥ 85%78–84%< 78%
Recent cohort M6 retention≥ 75% dollar65–74%< 65%
NRR vs. rebuilt NRR± 3 pts4–10 pts gap> 10 pts gap
Unbilled usage gap< 5% MRR5–10%> 10%
Bear 12-mo MRR vs. ask≥ 85% implied70–84%< 70%
Data completenessFull event exportPartial; holdback heavyRefused usage/raw logs

7.4 LOI and escrow structuring from cohort findings

  • MRR holdback — 10–20% of purchase price released at day 90 if verified MRR within ±5% of DD base case
  • Churn covenant — seller guarantee logo churn < X% for 60 days post-close or price adjustment
  • True-up escrow — reserve equal to cumulative unbilled usage gap until invoices clear
  • Representation schedule — attach your rebuilt cohort triangle as exhibit; seller warrants accuracy ±3%

8. Frequently Asked Questions

How is this different from the post-acquisition retention audit?

The post-acquisition retention audit fixes churn after you own the business—onboarding rebuilds, pricing changes, and 90-day stabilization. This guide runs before close to detect inflated NRR, forecast decay, and negotiate price or walk. Different leverage, different outputs. Premium newsletter and community buyers should apply the same triangle cohort rigor via our buy paid newsletter and premium community retention guide.

What is the minimum data history for reliable cohort analysis?

Eighteen months of subscription events. Twelve months hides annual renewal cliffs and seasonal Q4 cohorts. If the business is younger, apply heavier retention haircuts (15–25%) and shorter earn-out periods.

Should I use NRR or GRR for valuation multiples?

Anchor on GRR for the base multiple—it measures core product stickiness without upsell narrative. Allow NRR premium (0.5–1.5× multiple uplift) only when expansion quality exceeds 80% and is verified in event data. See our valuation guide for multiple tables.

Can I run this analysis on a $2k MRR micro-SaaS?

Yes—and you should. Small bases are more sensitive to whale churn, not less. With 60 customers, three cancellations can move monthly logo churn 5 points. Triangle cohort analysis is arguably more critical below $5k MRR where sellers often rely on blended averages.

What tools do I need?

Spreadsheet (Excel/Google Sheets) is sufficient for deals under $15k MRR. Export events to CSV, pivot cohort months, build triangle formulas. For larger assets, consider Baremetrics/CChart exports as a cross-check—but always validate against raw billing events. Do not trust dashboard-only access in a data room.

Comments from Pro members

Selected feedback from verified Pro subscribers. Timestamps update while you read.

  • Jordan K.

    Switched to Pro mainly for the extra analyses and Reddit/X coverage. This workflow section matches how I screen listings now—saves me hours every week.

    Pro

  • Priya S.

    The cross-marketplace point is huge. I used to miss duplicates across sites. Premium paid for itself after one decent lead I would have skipped.

    Pro

  • Marcus T.

    As a Pro user I appreciate the emphasis on red flags before diligence. If you are still on Free, at least read the checklist twice before you wire funds.

    Pro

  • Elena R.

    I send founders here when they ask how I find sub-$10k deals. The internal link to pricing is honest—you really do need Premium or Pro if you are serious.

    Pro

  • Chris V.

    MyDealList + a simple spreadsheet is my stack for 2026. Dynamic feed + alerts beats refreshing five marketplaces manually. Worth upgrading from Premium to Pro if you scale volume.

    Pro

Leave a Reply

Your email address will not be published.

Live activity

Team in Chicago found a gem with AI