Quick reference.

The whole standard in five minutes: what each term means, how it is computed, and what the defaults are.

v1.0 Updated Sep 18, 2026 JSON Print edition

FoundationsWho is a customer, what counts as recurring, and the base measures everything else is built on.

№TermIn plain termsFormulaDefaultsBounded
01 Customer — the measured unit A customer is the commercial relationship, resolved from its billing accounts, and only paying customers are counted. customer = the resolved parent entity behind one or more billing identifiers comped excluded (locked) · related-party flagged, not excluded n/a
02 Revenue types Only committed subscription revenue is recurring. Usage, services and one-time fees are real revenue, but never MRR. MRR = Σ lines typed recurring_subscription; every other type stays out 7 locked types · a file with no type column stops and asks closed enumeration
03 Monthly recurring revenueMRR MRR is what a customer's subscription pays per month, taken at month end, if nothing changes. MRR = the month-end recurring rate, normalized to monthly, held through qualifying pauses 3-month reactivation window · comped excluded (locked) · monthly-average FX ≥ 0
04 Annual recurring revenueARR ARR is this month's MRR times twelve: a run rate, not a forecast and not last year's revenue. ARR = MRR × 12 run_rate basis · committed ARR and contracted-not-yet-live reported separately ≥ 0

Movement and retentionHow revenue moves month to month, and what the base is worth now versus then.

№TermIn plain termsFormulaDefaultsBounded
05 The movement taxonomy Every change in a customer's MRR is exactly one of five movements, and they add up to the closing balance without a plug. closing = opening + new + expansion + reactivation + contraction + churn 5 locked types · net per customer-month · sub-tags cross_sell, ramp_step, fx_driven identity holds exactly
06 Pause, churn, and the reactivation window A short billing gap that closes is a pause. A long one is churn and a win-back. A gap still open at the cutoff is judged separately. gap within the window → pause, MRR held · gap beyond the window → churn at the gap start, reactivation on return · gap open at the cutoff → trailing-gap policy reactivation_window_months = 3 · trailing_gap_policy = churn_at_gap_start n/a
07 Net revenue retentionNRR NRR asks what last year's customers are worth this year, expansion included and new customers excluded. TTM compounded = product of twelve monthly ratios, each = Σ revenue this month of customers active last month ÷ Σ their revenue last month ttm_compounded · usage-inclusive (locked) · reactivation-inclusive · no smoothing no ceiling · 100% = base flat
08 Gross revenue retentionGRR GRR is NRR with every customer capped at what it paid at the start, so growth cannot hide leakage. GRR = Σ min(revenue now, revenue at base) ÷ Σ revenue at base — the cap applied per customer same as NRR · cap applied per customer ≤ 100% by construction
09 Cohort retention Cohort retention follows each vintage of customers on its own curve, measured at the end of each period against what they paid when they joined. cell = Σ cohort MRR at the period end ÷ Σ cohort MRR in the joining month — net, gross-capped, and by logo cohort = first MRR month · MRR-only basis (usage excluded) · period-end anchoring · comped excluded (locked) gross ≤ 100% · net has no ceiling
10 Churn analytics Churn is counted in the first month a customer pays nothing, and reported four ways: by logo, by dollar, by tenure, and by survival. logo churn = churned logos ÷ last month’s active logos · dollar churn = churned MRR ÷ last month’s MRR · survival = surviving ÷ observable, at each tenure first-zero-month timing · 3-month window · churn_at_gap_start · seasonality flag at 2σ ≥ 0

Structure and qualityHow revenue is distributed, whether it ties, and how much the number depends on the rule.

№TermIn plain termsFormulaDefaultsBounded
11 Concentration Concentration measures how much of the business depends on how few customers, on resolved parents, by top-N share and HHI. top-N share = Σ MRR of the largest N customers ÷ total MRR · HHI = Σ share² · effective customers = 1 ÷ HHI MRR basis · resolved parents · comped excluded · warn at top-10 > 40%, top-20 > 60%, HHI > 0.15 HHI between 1/n and 1
12 Growth accounting Growth accounting shows how a business grew, not just how fast: the quick ratio and the mix of new, expansion and reactivation. quick ratio = (new + expansion + reactivation) ÷ (contraction + churn) · mix = each addition type ÷ gross additions quarterly · reactivation counted as an addition · constant-currency comparison alongside undefined when losses are zero · 1.0 = replacing exactly what is lost
13 ACV and ARPA ARPA is average revenue per account. The standard reports the whole distribution, because the average describes almost no customer. ARPA = total MRR ÷ active customers · new-business ARR per logo = new MRR × 12 ÷ new logos · plus the deciles of MRR × 12 MRR basis · comped excluded · ACV bands 5K / 25K / 100K / 500K (locked) ≥ 0
14 Foreign exchange Revenue converts at the month's average rate, and currency-driven movements are tagged so the constant-currency view can remove them. base-currency amount = native amount × the month’s average rate · constant currency = native amount × the base period’s rate fx.flow_rate = monthly_average (locked) · fx.fallback = nearest_prior · base period = 12 months before the cutoff n/a
15 Revenue tie-out The customer file counts only once its recognized revenue agrees with the P&L, month by month, with billing timing shown separately. gap = reported − recognized · billing timing = billed − recognized warn when the gap exceeds 2% of reported · pause-held MRR isolated n/a
16 Definitional sensitivity The same data yields a family of NRRs. The spread between them is a finding about the business, not an error. spread = the highest NRR variant − the lowest, in percentage points six NRR variants computed · warn when the spread exceeds 5 points ≥ 0
17 The register Every assumption applied and every anomaly found is logged, so a reader can argue with a premise instead of discovering it later. entries = assumptions (a default was applied) + exceptions (the data was anomalous), each keyed, with a severity of info, warn or blocking every threshold feeds a finding · blocking stops the computation · reviews append-only n/a