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