MyDealList · Due diligence
Evaluating SaaS Revenue Quality: Deferred Revenue, Churn Timing, and Recognition Rules
Pre-close SaaS revenue quality masterclass: cash-basis vs accrual audit frameworks, annual prepay vs recognized MRR decomposition, deferred revenue liability normalization, and SDE/EBITDA adjustment formulas for digital acquirers.
The seller's teaser says $12,400 MRR and $148k trailing revenue. Your bank reconciliation shows $19,200 in Stripe deposits last month— because forty-seven annual contracts renewed in Q4 and the founder booked everything as revenue on cash receipt. You are not buying MRR; you are buying a deferred revenue liability, a churn timing curve that has not hit the P&L yet, and recognition rules the seller never applied consistently. This is where saas revenue recognition diligence wins or loses micro-SaaS deals before LOI.
This guide is written for acquisition entrepreneurs conducting pre-close financial diligence on subscription businesses in the $1k–$50k MRR band. You will learn cash-basis vs accrual audit frameworks, how to deconstruct annual contract upfront cash collection vs monthly recognized MRR, how to normalize SDE and EBITDA for deferred revenue liabilities post-closing, how churn timing interacts with recognition reversals, and how to build a reproducible revenue quality score from raw billing exports—not seller dashboards.
Pair this article with our SaaS churn cohort analysis guide for retention math, micro-SaaS valuation fundamentals, pricing and billing restructuring math, and APA and escrow legal framework for purchase price adjustment language. This is intentionally a pre-close audit—not a post-acquisition accounting setup playbook.
Not legal, tax, or accounting advice. Revenue recognition rules vary by jurisdiction, entity type, and contract structure. Engage qualified CPA and M&A counsel before signing. Rebuild all metrics from raw exports; never rely on seller dashboards alone.
1. Why Revenue Quality Beats MRR Headlines in 2026
Marketplace listings optimize for headline MRR because it is simple, comparable, and flattering. Professional buyers optimize for revenue quality—the probability that reported recurring revenue converts to retained cash flow after close, net of refunds, recognition reversals, and deferred service obligations you inherit.
MRR tells you what the billing system thinks is active today. Revenue quality tells you what you will actually keep after churn timing, refund policy, and deferred revenue burn-through hit your first twelve months as owner.
In 2026 micro-SaaS deal flow, three structural forces make revenue quality diligence non-optional: annual prepay discounts to inflate cash before sale, founder-run books on cash basis without deferred revenue schedules, and churn events backdated to keep NRR slides clean. Each creates a gap between Stripe MRR exports and economic reality that only closes when you reconcile cash, accrual, and contract-level recognition month by month.
1.1 The revenue quality stack
| Layer | What it measures | Primary data source | Buyer risk if skipped |
|---|---|---|---|
| Billing MRR | Active subscription ARR/12 | Stripe / Paddle export | Overstates if pauses misclassified |
| Recognized revenue | Earned portion of contracts | P&L / GL accrual schedule | Understates if cash-basis books |
| Cash collected | Deposits net of refunds | Bank + processor payouts | Spikes on annual renewals |
| Deferred revenue | Unearned prepayment liability | Balance sheet / billing ledger | Post-close service obligation |
| Normalized SDE | Owner-adjusted economic earnings | Your reconstruction model | Multiple applied to wrong base |
1.2 Pre-close vs post-close revenue work
Post-close, you fix QuickBooks categories and hire a bookkeeper. Pre- close, you determine whether the ask multiple applies to inflated trailing revenue or to a normalized earnings base that accounts for deferred revenue you must service without additional cash collection. Different leverage, different outputs—same distinction as our pre-close cohort analysis vs post-acquisition retention playbooks.
2. Cash-Basis vs Accrual Revenue Audit Frameworks
Most micro-SaaS sellers under $15k MRR run cash-basis books: revenue hits the P&L when Stripe deposits land. Accrual accounting spreads subscription revenue across the service period and records a deferred revenue liability for the unearned portion. Your deferred revenue due diligence starts by identifying which regime the seller actually uses—and whether their teaser metrics pretend otherwise.
2.1 Three reporting layers you must reconcile
When cash revenue systematically exceeds accrual revenue, the seller is collecting annual prepayments faster than recognizing them—or never recognizing them at all. When accrual exceeds cash, they may be recognizing revenue from deferred balances built in prior periods while new sales slow. Both patterns distort trailing twelve-month revenue used in SDE multiples.
2.2 Cash collection reconciliation procedure
- Export Stripe (or Paddle/Lemon Squeezy) balance transactions for 24 months—gross charges, refunds, fees, payouts.
- Match monthly net payouts to bank deposits; flag unexplained variances > 2%.
- Segment cash by billing interval: monthly vs annual vs one-time setup fees.
- Remove non-recurring items: implementation fees, custom dev, asset sale proceeds, founder loans repaid through the business account.
- Compare recurring cash collection trend to MRR trend—divergence signals prepay spikes or churn not yet reflected in active subs.
Cash vs MRR divergence matrix
| Pattern | Cash vs MRR | Likely cause | Diligence action |
|---|---|---|---|
| Prepay spike | Cash >> MRR | Annual renewals / sale prep | Build deferred revenue schedule |
| Churn lag | MRR > Cash (later) | Failed renewals not yet canceled | Cross-check dunning logs |
| Refund cliff | Cash << MRR one month | Annual refund batch | Review refund policy + cohort |
| Usage true-up | Cash spikes quarterly | Metered billing cycles | Reconcile usage meters to invoices |
| Fake MRR | MRR flat, cash declining | Paused / comped accounts | Filter non-paying actives |
2.3 Accrual P&L vs billing system divergence
Request 24 months of P&L plus general ledger detail for revenue accounts. Map each GL line to a billing export category. Micro-SaaS sellers often misclassify: annual prepayments as “Sales,” Stripe fees as COGS vs OpEx, founder salary as distributions, or one-time consulting as recurring revenue.
If the seller cannot produce a month-by-month bridge from Stripe charges to P&L revenue lines within 48 hours, assume cash-basis reporting and rebuild accrual yourself from subscription events.
2.4 Cash-basis audit checklist
| Check | Pass criteria | Fail action |
|---|---|---|
| Accounting method disclosed | Explicit cash or accrual in data room | Rebuild; do not trust teaser TTM |
| Deferred revenue schedule exists | Monthly roll-forward 12+ mo | Construct from invoice exports |
| Bank ↔ processor match | ± 2% monthly, 12 mo | Holdback + revenue reps |
| Refund rate stable | < 3% of gross charges | Investigate product / sales issue |
| Non-recurring stripped | Documented < 10% of revenue | Adjust SDE base downward |
| Tax vs book alignment | No unexplained 20%+ gaps | CPA review before close |
3. SaaS Revenue Recognition Rules Buyers Must Know
You do not need to become an auditor. You need enough saas revenue recognition literacy to spot when a seller's numbers violate basic subscription logic—and to estimate the post-close liability you inherit when recognition was never done correctly.
3.1 ASC 606 / IFRS 15 simplified for micro-SaaS DD
Under ASC 606 (US GAAP) and IFRS 15 (international), revenue is recognized when control of the promised service transfers to the customer. For standard SaaS subscriptions, that means ratably over the subscription term—daily or monthly straight-line recognition unless a distinct performance obligation justifies different timing.
Setup fees, onboarding, and professional services may qualify as separate performance obligations recognized upfront or over a distinct period. Sellers sometimes bundle everything into subscription revenue to inflate recurring ratios—request contract templates and sample invoices for the top twenty accounts.
3.2 Performance obligations and subscription periods
| Component | Typical recognition | DD focus |
|---|---|---|
| Monthly subscription | Monthly, matches billing | Low complexity; verify active status |
| Annual subscription | 1/12 per month over 12 mo | Deferred revenue roll-forward required |
| Multi-year prepay | Ratable over full term | Long-dated liability on balance sheet |
| Usage / overage | As consumed or billed | Meter vs invoice reconciliation |
| Setup / implementation | Point-in-time or distinct period | Strip from recurring SDE if one-time |
| Credits / free months | Reduces transaction price | Adjust effective MRR per customer |
3.3 When recognition timing creates valuation traps
Valuation traps appear when the metric used for multiples (TTM revenue, SDE, or MRR) is computed on a different basis than the economic obligation you inherit. The most common trap in micro-SaaS: paying 4× on $120k TTM cash-basis revenue when $38k of that TTM is unearned deferred revenue that will reverse into zero-margin service delivery over the next ten months—with no corresponding cash collection.
4. Deconstructing Annual Contract Upfront Cash vs Monthly Recognized MRR
Annual contracts are the single largest source of revenue quality distortion in micro-SaaS data rooms. Stripe reports them as active subscriptions contributing full MRR. Cash hits once. P&L on cash basis records 12× MRR in one month. Accrual recognizes 1/12 per month. Your job is to hold all three views simultaneously.
4.1 The annual prepay illusion
A customer paying $1,200/year on a $100/mo plan appears as $100 MRR in billing exports. Cash collection is $1,200 on day one. If the seller runs cash-basis books, January revenue spikes $1,200 while February– December show $0 from that customer—even though service continues. Trailing twelve-month revenue becomes a function of when renewals landed, not sustainable run-rate.
Annual prepay makes cash-basis TTM revenue a renewal-timing lottery. Never pay a revenue multiple on cash-basis TTM when annual contracts exceed 30% of the customer base without full accrual reconstruction.
4.2 Contract asset vs deferred revenue mechanics
4.3 Monthly recognition waterfall
Build a recognition waterfall for every annual invoice in the trailing eighteen months. Each row: invoice_id, customer_id, gross_amount, start_date, end_date, monthly_recognition_amount, remaining_deferred. Sum remaining_deferred at close—that is the service obligation you inherit without new cash.
| Customer | Annual amount | Invoice date | Months served | Recognized to date | Deferred remaining | Monthly MRR equiv. |
|---|---|---|---|---|---|---|
| Acct A | $2,388 | 2025-11-01 | 3 | $597 | $1,791 | $199 |
| Acct B | $948 | 2026-01-15 | 1 | $79 | $869 | $79 |
| Acct C | $4,800 | 2025-06-01 | 8 | $3,200 | $1,600 | $400 |
| Acct D | $1,188 | 2025-09-20 | 5 | $495 | $693 | $99 |
| Portfolio total | — | — | — | $4,371 | $4,953 | $777 billing MRR |
In this sample, $777 of reported MRR from annual accounts is backed by $4,953 of deferred revenue already collected—cash the buyer does not receive again. Pair this table with billing interval restructuring math if you plan to shift annual customers to monthly post-acquisition.
4.4 Annual vs monthly mix impact on multiples
| Annual mix % | Typical cash/accrual TTM gap | Recommended multiple adjustment | Extra DD requirement |
|---|---|---|---|
| < 20% | Low (< 5%) | None if books are accrual | Standard MRR verification |
| 20–40% | Moderate (5–15%) | 0.25–0.5× multiple haircut | Deferred schedule required |
| 40–60% | High (15–30%) | 0.5–1.0× haircut or accrual repricing | Full waterfall + churn by interval |
| > 60% | Extreme (> 30%) | Accrual SDE only; avoid cash TTM | Annual cohort triangle |
5. Deferred Revenue Liability Deep Dive
Deferred revenue is not optional accounting trivia—it is a balance sheet liability representing services owed to customers who already paid. In asset purchases, working capital and liability schedules determine whether you receive a credit for excess deferred revenue or absorb the obligation silently at close.
5.1 Balance sheet anatomy for micro-SaaS
Many solo founders have no formal balance sheet. Reconstruct deferred revenue from invoice exports: sum all prepaid amounts minus cumulative recognized revenue per contract. Compare your reconstruction to any seller-provided schedule—variances > 5% trigger holdback discussions documented in your APA working capital exhibits.
5.2 Deferred revenue turnover and quality ratios
| Ratio | Green | Yellow | Red |
|---|---|---|---|
| Deferred / MRR | < 2× | 2–4× | > 4× without annual mix explanation |
| Cash collection coverage | 0.95–1.05 | 1.05–1.25 | > 1.25 (prepay stuffing) |
| MoM deferred growth vs MRR growth | Within 10 pts | Deferred >> MRR | Deferred up, MRR flat (renewal push) |
| Refund rate on deferred base | < 2% | 2–5% | > 5% (product or sales issue) |
5.3 Post-closing deferred revenue burn-through
After close, deferred revenue recognizes into P&L without new cash collection—it is not incremental SDE. Model monthly burn-through for twelve months post-close to forecast true cash generation. If $45k deferred exists at close on a $8k MRR business, expect ~$3.75k/mo of P&L revenue with $0 new cash until renewals hit—critical for seller note DSCR modeling covered in our valuation and financing guides.
6. Churn Timing and Revenue Recognition Interactions
Churn is not a single event in recognition math. Annual subscription churn analysis must specify: cancel request date, service end date, refund issued (if any), and how much deferred revenue reverses. Sellers optimize for billing MRR; buyers must optimize for economic exit.
6.1 Cancel date vs service end date
Stripe's cancel_at_period_end flag keeps logos in active MRR while customers have already decided to leave. For diligence, build a “committed churn” queue: subscriptions with cancel scheduled but not yet effective. Add committed churn MRR to reported logo churn for forward forecasts.
6.2 Pro-rata refunds and revenue reversals
| Refund policy | Recognition impact | Cash impact | DD note |
|---|---|---|---|
| No refunds | Recognize through period end | None on cancel | MRR drops at period end only |
| Pro-rata refund | Reverse unearned immediately | Outflow on refund | Track refund rate by cohort |
| Prorated credit | Reduces future transaction price | Deferred, not immediate | Adjust expansion math |
| Chargeback | Full reversal + fee | Immediate outflow | Exclude from recurring SDE |
6.3 Annual renewal cliff and churn recognition
Annual contracts create renewal cliffs where churn concentrates at month 12, 24, etc.—not in billing MRR until the renewal fails. Segment cohort retention triangles by billing interval. An annual triangle showing 95% M1 but 62% M13 is telling you recognition looked healthy for eleven months while logos were already gone at renewal.
6.4 Involuntary churn, dunning, and recognition lag
Failed payments create a gap between economic churn and recognized revenue. Customers in dunning may remain “active” in Stripe for 2–4 weeks while invoices retry. Request dunning event logs and map:
- first_payment_failure — start of involuntary churn clock
- subscription_past_due — MRR still counted in some exports
- subscription_canceled — billing churn recognized
- recovery_success — reactivation; verify not counted as expansion
Involuntary churn above 25% of total logo churn signals billing hygiene problems that will depress cash collection post-close—not a free optimization opportunity on day one.
7. Normalizing SDE/EBITDA for Deferred Revenue Liabilities Post-Closing
Sellers market SDE. Buyers need normalized SDE on an accrual basis that reflects deferred revenue obligations and strips one-time cash spikes. This is the earnings base your multiple should attach to—not cash-basis TTM inflated by a pre-sale annual renewal push.
7.1 Why trailing SDE overstates quality
Standard SDE add-backs include owner salary, personal expenses, and non-recurring costs. They rarely subtract: unearned revenue already collected, prepaid annual renewals driven by sale process, or founder comped accounts. On cash-basis books, SDE can spike 40–80% in the quarter before listing when the founder pushes annual upgrades.
7.2 EBITDA add-back traps specific to SaaS
| Seller add-back claim | Accept? | Buyer treatment |
|---|---|---|
| “One-time annual renewals” | Partial | Normalize to accrual; no add-back |
| Owner salary below market | Yes | Add market replacement cost |
| Stripe fee spike (annual volume) | No | Normalize fees as % of revenue |
| Deferred revenue as “asset” | No | It is a liability; WC credit needed |
| Development cap-ex | Case-by-case | Separate growth vs maintenance spend |
| Churned customer refunds | No | Recurring cost of revenue quality |
7.3 Worked normalization example
Target: B2B workflow tool, $9,200 MRR, 52% annual contracts, cash-basis books. Seller claims $118k TTM revenue and $94k SDE (0.80 margin). Your reconstruction:
| Line item | Seller reported | Buyer normalized | Adjustment |
|---|---|---|---|
| TTM revenue (cash) | $118,000 | — | — |
| TTM revenue (accrual) | Not provided | $89,400 | −$28,600 timing |
| Deferred revenue at close | Unknown | $31,200 | Liability inherited |
| Comped accounts (4 logos) | In MRR base | $480/mo removed | −$5,760 TTM |
| Setup fees | In revenue | $6,200 stripped | Non-recurring |
| Owner salary add-back | $0 | +$72,000 market CEO | Standard SDE |
| Normalized SDE (accrual) | $94,000 | ~$61,000 | −35% vs seller claim |
At a 4× ask on seller SDE ($376k), the accrual-normalized equivalent is 6.2× normalized SDE—a material repricing lever. See valuation multiple tables for how to map normalized SDE to defensible offer ranges.
7.4 Post-closing liability transfer and working capital
In asset deals, specify whether deferred revenue transfers with the business and how working capital peg treats it. Three common structures:
- Deferred as liability credit — buyer receives purchase price reduction or WC credit equal to unearned balance at close.
- Deferred neutral in WC peg — peg includes deferred; buyer and seller split timing benefit—document carefully in APA schedules.
- Seller keeps prepaid cash, buyer gets contracts — rare and dangerous; avoid unless price reflects zero cash at close for prepaid base.
8. TypeScript Revenue Normalization Model
Reproducibility beats spreadsheet heroics. The model below ingests invoice-level exports and outputs accrual revenue, deferred balance, and normalized SDE adjustments per month—paste into your diligence repo and wire to Stripe CSV parsers.
// Revenue normalization engine for SaaS due diligence
// Input: invoice exports + subscription events + P&L add-backs
type BillingInterval = 'month' | 'year' | 'quarter';
interface SubscriptionInvoice {
invoiceId: string;
customerId: string;
grossAmountCents: number;
refundAmountCents: number;
interval: BillingInterval;
intervalCount: number;
periodStart: string; // ISO date
periodEnd: string;
paidAt: string | null;
status: 'paid' | 'open' | 'void' | 'uncollectible';
}
interface MonthlyRecognition {
month: string; // YYYY-MM
cashCollected: number;
revenueRecognized: number;
deferredBalanceEnd: number;
billingMrr: number;
committedChurnMrr: number;
}
interface SdeNormalizationInput {
reportedSde: number;
ownerCompAddback: number;
discretionaryAddbacks: number;
marketSalaryReplacement: number;
compedAccountMrr: number;
nonRecurringRevenueTtm: number;
cashTimingBenefitTtm: number; // annual prepay overhang on cash books
}
interface SdeNormalizationResult {
reportedSde: number;
normalizedAccrualSde: number;
adjustmentPct: number;
flags: string[];
}
const MS_PER_DAY = 86_400_000;
function daysBetween(start: string, end: string): number {
const a = new Date(start).getTime();
const b = new Date(end).getTime();
return Math.max(1, Math.round((b - a) / MS_PER_DAY));
}
function monthKey(d: string): string {
return d.slice(0, 7);
}
function monthlyRecognizedAmount(inv: SubscriptionInvoice): number {
const net = (inv.grossAmountCents - inv.refundAmountCents) / 100;
const totalDays = daysBetween(inv.periodStart, inv.periodEnd);
// Ratiable recognition over service period (ASC 606 default for SaaS)
return net / (totalDays / 30.437); // avg days per month
}
function buildRecognitionSchedule(
invoices: SubscriptionInvoice[],
months: string[],
): MonthlyRecognition[] {
const deferredByInvoice = new Map<string, number>();
return months.map((month) => {
let cashCollected = 0;
let revenueRecognized = 0;
let billingMrr = 0;
for (const inv of invoices) {
if (inv.paidAt && monthKey(inv.paidAt) === month && inv.status === 'paid') {
cashCollected +=
(inv.grossAmountCents - inv.refundAmountCents) / 100;
}
const overlaps =
inv.periodStart.slice(0, 7) <= month &&
inv.periodEnd.slice(0, 7) >= month &&
inv.status === 'paid';
if (overlaps) {
const net = (inv.grossAmountCents - inv.refundAmountCents) / 100;
const totalDays = daysBetween(inv.periodStart, inv.periodEnd);
const monthStart = new Date(`${month}-01`);
const monthEnd = new Date(monthStart);
monthEnd.setMonth(monthEnd.getMonth() + 1);
const overlapStart = Math.max(
new Date(inv.periodStart).getTime(),
monthStart.getTime(),
);
const overlapEnd = Math.min(
new Date(inv.periodEnd).getTime(),
monthEnd.getTime(),
);
const overlapDays = Math.max(
0,
Math.round((overlapEnd - overlapStart) / MS_PER_DAY),
);
revenueRecognized += net * (overlapDays / totalDays);
// Billing MRR equivalent (snapshot — simplify for DD)
if (inv.interval === 'month') billingMrr += net / inv.intervalCount;
if (inv.interval === 'year') billingMrr += net / 12 / inv.intervalCount;
}
}
// Roll forward deferred (simplified portfolio view)
let deferredBalanceEnd = 0;
for (const inv of invoices) {
if (inv.status !== 'paid') continue;
const net = (inv.grossAmountCents - inv.refundAmountCents) / 100;
const totalDays = daysBetween(inv.periodStart, inv.periodEnd);
const monthEnd = new Date(`${month}-01`);
monthEnd.setMonth(monthEnd.getMonth() + 1);
const earnedThroughMonthEnd = Math.min(
totalDays,
Math.max(
0,
Math.round(
(monthEnd.getTime() - new Date(inv.periodStart).getTime()) /
MS_PER_DAY,
),
),
);
const remaining = net * (1 - earnedThroughMonthEnd / totalDays);
deferredBalanceEnd += Math.max(0, remaining);
}
return {
month,
cashCollected,
revenueRecognized,
deferredBalanceEnd,
billingMrr,
committedChurnMrr: 0, // populate from cancel_at_period_end events
};
});
}
function normalizeSde(input: SdeNormalizationInput): SdeNormalizationResult {
const flags: string[] = [];
if (input.cashTimingBenefitTtm > input.reportedSde * 0.15) {
flags.push('CASH_TIMING_BENEFIT_GT_15PCT_SDE');
}
if (input.compedAccountMrr * 12 > input.reportedSde * 0.05) {
flags.push('COMPED_MRR_MATERIAL');
}
const normalizedAccrualSde =
input.reportedSde +
input.ownerCompAddback +
input.discretionaryAddbacks +
input.marketSalaryReplacement -
input.compedAccountMrr * 12 -
input.nonRecurringRevenueTtm -
input.cashTimingBenefitTtm;
const adjustmentPct =
input.reportedSde === 0
? 0
: (normalizedAccrualSde - input.reportedSde) / input.reportedSde;
return {
reportedSde: input.reportedSde,
normalizedAccrualSde,
adjustmentPct,
flags,
};
}
// Example diligence output
const result = normalizeSde({
reportedSde: 94_000,
ownerCompAddback: 0,
discretionaryAddbacks: 2_400,
marketSalaryReplacement: 72_000,
compedAccountMrr: 480,
nonRecurringRevenueTtm: 6_200,
cashTimingBenefitTtm: 28_600,
});
// result.normalizedAccrualSde ≈ 61,000; flags include CASH_TIMING_BENEFIT_GT_15PCT_SDEExtend the model with committedChurnMrr from Stripe cancellation events and cross-validate billingMrr against the seller's dashboard. Any month where cashCollected / revenueRecognized exceeds 1.25× for three consecutive months triggers manual review.
9. Multi-Source Reconciliation Matrix
Run this matrix before LOI. Unexplained variance in any cell is a holdback or price adjustment conversation—not a footnote.
| Source A | Source B | Compare | Tolerance | If fail |
|---|---|---|---|---|
| Stripe MRR export | Your recognition model MRR | Current month snapshot | ± 2% | Filter pauses / comped |
| Stripe charges TTM | Seller P&L revenue | Monthly series 12 mo | ± 3% accrual; ± 8% cash | Rebuild accrual schedule |
| Model deferred balance | Seller balance sheet | Close date | ± 5% | WC adjustment in APA |
| Bank deposits | Stripe net payouts | Monthly 6 mo | ± 2% | Hidden accounts / personal mix |
| Annual cohort M13 retention | Seller NRR slide | Same vintage window | ± 5 pts | Churn timing investigation |
| Normalized accrual SDE | Ask price / multiple | Implied multiple | Within band for GRR tier | Reprice or walk |
10. Red Flags in Data Rooms: Revenue Quality Edition
- No deferred revenue schedule on a business with > 25% annual billing—assume cash-basis inflation.
- TTM revenue spike in listing quarter without MRR growth—annual renewal push before sale.
- MRR flat, deferred balance up 40%+ — collecting cash without retaining logos.
- Refund rate doubled YoY — product failure or aggressive sales promises catching up.
- Recognition policy undocumented — seller cannot explain ASC 606 treatment in writing.
- Personal and business Stripe mixed — revenue base un-auditable without forensic separation.
- Earnout tied to cash revenue on annual-heavy base—you pay twice for prepay timing. Tie earnouts to accrual MRR or GRR per billing metric definitions.
11. Purchase Price Adjustment Frameworks
Translate revenue quality findings into deal terms—not just spreadsheet notes. Three levers: price reduction, working capital/deferred credit, and earnout/holdback structure.
11.1 Price reduction formula
11.2 Holdback triggers tied to revenue quality
| Trigger | Holdback % | Release condition |
|---|---|---|
| Deferred schedule variance > 10% | 5–10% | CPA reconciliation at 90 days |
| MRR misstatement > 5% | 10–15% | 90-day MRR within tolerance |
| Undisclosed comped accounts | Per-logo value × 12 | Immediate offset at close |
| Annual renewal cliff in 90 days | 15–20% of at-risk ARR | Renewal rate ≥ diligence model |
12. Billing System Export Requirements
Request these exports in your initial data room ask—before LOI expires. Missing exports are themselves a red flag.
| Export | Fields required | History |
|---|---|---|
| Invoices | id, customer, amount, period_start, period_end, status, paid_at | 24 mo |
| Subscriptions | id, customer, plan, interval, mrr, cancel_at, canceled_at | Event log 24 mo |
| Refunds / credit notes | amount, reason, linked invoice | 24 mo |
| Balance transactions | gross, fee, net, type, created | 24 mo |
| P&L + GL detail | Revenue accounts monthly | 24 mo |
13. Revenue Quality Scorecard Template
Assign 0–2 points per dimension (0 = fail, 1 = partial, 2 = pass). Score below 18/24 suggests walk or deep discount.
| Dimension | 0 pts | 1 pt | 2 pts |
|---|---|---|---|
| Accounting method clarity | Unknown / mixed | Cash, documented | Accrual with schedule |
| Deferred revenue schedule | Missing | Reconstructed by buyer | Seller-provided, verified |
| Cash ↔ accrual gap | > 25% | 10–25% | < 10% |
| Annual churn visibility | Blended only | Annual segment partial | Full interval cohorts |
| Refund discipline | > 5% gross | 3–5% | < 3% |
| Bank reconciliation | Unexplained gaps | Minor variances | Clean match |
| SDE normalization delta | > 30% down | 15–30% down | < 15% down |
14. Frequently Asked Questions
Can I use MRR multiples if books are cash-basis?
Yes—but only on verified billing MRR after removing comped accounts, pauses, and founder-owned logos—not on cash TTM revenue. Apply a 0.25–1.0× multiple haircut when annual contracts exceed 40% of the base until you complete accrual reconstruction. See valuation fundamentals for multiple bands by GRR tier.
How does deferred revenue affect seller note DSCR?
Post-close, a portion of P&L revenue generates no new cash until renewals. Model monthly cash as: new collections + renewal collections − opex − debt service. Deferred burn-through inflates accrual earnings but not cash—stress-test DSCR at 1.3× minimum using cash collections, not recognized revenue.
What if the seller has never tracked deferred revenue?
Rebuild from invoice exports using the TypeScript model in Section 8 or a spreadsheet waterfall. Treat missing schedules as a representation and warranty issue in the APA—not a reason to skip the work.
How is this different from cohort churn analysis?
Cohort analysis answers who leaves and when. Revenue recognition diligence answers what you earned vs what you collected and what liabilities remain. Run both—our cohort analysis guide covers retention triangles; this guide covers the P&L and balance sheet truth beneath them.
Should earnouts use cash or accrual revenue?
Accrual MRR or GRR—never cash TTM on annual-heavy bases. Cash metrics reward prepay spikes you already paid for at close. Define metrics in the APA with the same formulas you used in diligence, per our billing metric definitions.
What tools do I need beyond Excel?
Stripe CSV exports + the normalization model above are sufficient for most micro-deals. Optional: Baremetrics/ChartMogul as cross-check only— always validate against raw invoice events. Browse verified listings that disclose billing interval mix when available.
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.