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.
Also MRR bridge · Revenue bridge · MRR movements · New, expansion, contraction, churn, reactivation
Every month-over-month change in a customer's MRR is classified as exactly one of five movements — new, expansion, contraction, churn, reactivation — signed so that opening MRR plus all movements equals closing MRR, by construction.
- Formula
closing = opening + new + expansion + reactivation + contraction + churn- Unit
- currency per month
- Bounded
- identity holds exactly
- Defaults
- 5 locked types · net per customer-month · sub-tags cross_sell, ramp_step, fx_driven
- Biggest lever
- The reactivation window — decides whether a gap is a pause or a churn-and-reactivation pair
- Appears in
- MRR bridge · Board deck · Growth accounting
What it measures
The bridge answers the question that a growth rate cannot: where did the change come from? Two companies both growing 30% are different businesses if one grew on new logos while the other grew on expansion within a shrinking customer base.
The taxonomy is mutually exclusive and collectively exhaustive. That is not a stylistic preference — it is what makes the bridge an identity rather than a reconciliation:
closing = opening + new + expansion + reactivation + contraction + churn
Contraction and churn carry negative signs, so the identity is a plain sum. If this does not tie exactly, something has been double-counted or dropped, and the error is in the classification, not in the arithmetic.
How it is computed
Movements are derived from the held MRR series — the series after pause handling and currency conversion, so pause artifacts never appear as churn. For each customer and each month, take the delta from the prior month:
| Prior | Current | Classification |
|---|---|---|
| 0 | > 0 | new if never previously active, else reactivation |
| > 0 | 0 | churn |
| > 0 | higher | expansion |
| > 0 | lower (non-zero) | contraction |
| any | unchanged | no movement |
A zero delta produces no movement at all. Every non-zero delta produces exactly one, which is what guarantees the identity.
Three sub-tags may attach to a movement without changing its type:
cross_sell— expansion coinciding with a product the customer had not previously bought.ramp_step— expansion arising from a contracted ramp schedule rather than a new sale. Materially different in quality: it was already signed.fx_driven— the change in base currency arises purely from exchange rates while native amounts were unchanged. Sub-totalled in the bridge and removed entirely in the constant-currency view.
Worked example
A customer’s held MRR series and the movements it generates:
| Month | MRR | Delta | Movement |
|---|---|---|---|
| Jan | 0 | — | — |
| Feb | 1,000 | +1,000 | new |
| Mar | 1,500 | +500 | expansion |
| Apr | 1,200 | −300 | contraction |
| May | 0 | −1,200 | churn |
| … | 0 | 0 | — (gap beyond window) |
| Sep | 800 | +800 | reactivation |
Opening (Jan) 0 + 1,000 + 500 − 300 − 1,200 + 800 = 800 = closing (Sep). The identity holds without adjustment, because every delta was classified once.
Note that Sep is reactivation, not new. The distinction matters: a win-back
is not the same commercial event as a first-time acquisition, and conflating
them overstates new-business productivity while hiding a retention problem.
The choices that change the number
- The reactivation window determines whether a gap produces a churn/reactivation pair or is absorbed as a pause with no movements at all. This is the largest single lever on both churn and new-business figures. See pause vs churn.
- Netting at the customer level. This standard classifies the net change per customer-month. A customer who adds one product and drops another in the same month produces a single net movement, not an offsetting pair. Reporting gross-up-and-down separately is legitimate but is a different presentation, and mixing the two double-counts.
- Whether FX-driven changes are movements at all. Here they are movements with a sub-tag, and the constant-currency view removes them — so the reader can see both the reported bridge and the operating bridge.
How it is misread
New and reactivation reported together as “new.” Flatters acquisition and conceals churn-and-return churn.
Downgrades netted into churn. Contraction and churn have different implications — one is a customer who reduced, the other a customer who left. Collapsing them makes churn look worse and expansion look better than the truth.
A bridge that doesn’t tie, adjusted with a plug. A “reconciling item” line in a bridge is a confession that the taxonomy was not exhaustive. Under this standard a plug cannot arise; if the numbers disagree, the classification is wrong and must be fixed rather than balanced.
What it cannot tell you
The taxonomy describes what changed, never why. Contraction from a seat reduction, a negotiated discount, and a downgrade after a service failure are identical in the bridge. Reason codes do not exist in customer-level revenue data; where they matter, they must come from CRM or churn-reason systems and be joined deliberately.
How to state it
A disclosure that travels with the number. Replace the braces; keep the parenthesis.
Bridge {opening} → {closing} (SoF Standard v1.0: five movements · net per customer · reactivation separate from new) Before you quote it
- Opening + movements = closing exactly, with no reconciling line?
- Reactivation shown separately from new?
- Contraction shown separately from churn?
- FX-driven movements sub-totalled?
Related questions
- What is an MRR bridge, and what are the five movements?
- The bridge decomposes the change in MRR between two months into new, expansion, contraction, churn and reactivation, signed so that opening plus the five movements equals closing. It answers what a growth rate cannot: where the change came from.
- What is the difference between contraction and churn?
- Contraction is a customer whose MRR fell but stayed above zero; churn is a customer whose MRR went to zero. Netting downgrades into churn overstates losses and hides the customers who stayed. Under this standard the two are never combined.
- Is a returning customer new or reactivation?
- Reactivation, if the customer was ever previously active. A win-back is a different commercial event from a first-time acquisition, and counting it as new overstates acquisition productivity while hiding a retention problem.
- Is a price increase or a cross-sell counted as expansion?
- Both raise a customer's MRR, so both are expansion. A cross-sell carries the
cross_sellsub-tag and a contracted step-up carriesramp_step, so the quality of the expansion stays visible without breaking the identity. - Why doesn't my bridge tie?
- Because a change was classified twice or not at all. Under this standard every non-zero delta produces exactly one movement, so opening plus movements equals closing by construction. A "reconciling item" line is a confession that the taxonomy was not exhaustive; the fix is the classification, not a plug.
- Which month does a movement land in?
- The month the held MRR series changes, taken at month end. A contract signed in March that starts billing in May is new in May. Signature and invoice dates are facts about bookings and billings, not about MRR.
Strategy of Finance. “The movement taxonomy.” SoF Standard Definitions v1.0 (2026-09-18). https://www.strategyoffinance.com/standards/movement-taxonomy/