MRR movements

MRR movements split each change in recurring revenue into new, expansion, reactivation, contraction and churn, so you can see why your MRR went up or down.

Updated October 1, 2026

MRR movements explain how your MRR got from last month's number to this month's. "MRR grew by $1,500" becomes "we added $4,000 from new customers and upgrades and lost $2,500 to downgrades and cancellations." The total tells you where you are. The movements tell you why.

The MRR movements Stripe tracks

Stripe's billing analytics start from MRR at the beginning of a period and apply these parts:

  • New MRR. A subscriber becomes active and paying, for example when a trial converts to a paid plan.
  • Expansion MRR. An existing subscriber pays more, through an upgrade or extra seats.
  • Reactivation MRR. A customer who had churned starts paying again.
  • Contraction MRR. An existing subscriber pays less but stays.
  • Churned MRR. A subscriber's MRR drops to zero, most often because they canceled.
  • FX adjustment. If you bill in several currencies, exchange rates move MRR even when no subscription changed.
Ending MRR = Starting MRR + New + Expansion + Reactivation โˆ’ Contraction โˆ’ Churn ยฑ FX

Stripe's example starts the period at $1,000 MRR. One trial converts to a $100 plan, adding $100 of new MRR. One customer upgrades from $100 to $150, adding $50 of expansion. One downgrades from $100 to $60, which is $40 of contraction. One customer on a $60 plan leaves, which is $60 of churn. A customer paying in another currency is now worth $95 instead of $100, a $5 FX loss. Ending MRR is $1,045.

Stripe also reports churned revenue, which is churned MRR plus contraction MRR. Its Customer MRR changes report lists each movement for each customer and can be downloaded.

Which Stripe events drive each movement

  • New MRR starts with customer.subscription.created. If the subscription starts with a trial, its MRR counts only after the trial converts.
  • Expansion and contraction come from customer.subscription.updated when the price, quantity or discount changes.
  • Churn comes from customer.subscription.deleted when the subscription ends. Scheduling a cancellation for the end of the period fires customer.subscription.updated first, and the churn only counts when the period closes.
  • Reactivation is a customer who had churned starting a paid subscription again.

Why the breakdown matters

Two businesses can both add $1,000 of net MRR in a month. One added $1,500 of new MRR and lost $500 to churn. The other added $6,000 and lost $5,000. The second one spends its acquisition budget replacing customers who leave. The net number hides that, and the movements show it at once.

Movements also show who owns the problem. Weak new MRR belongs to marketing and sales. Rising contraction often points to pricing or packaging. Churn splits in two. Voluntary cancellations are a product and success problem. Cancellations after failed payments are involuntary churn, a billing problem that better dunning can often reduce.

What to review each month

  1. Review each movement, not only net new MRR, and compare it with the month before.
  2. For churn, pull the cancellation reasons. Stripe's cancellation_details.reason separates cancellation_requested from payment_failed and payment_disputed.
  3. For contraction, look for patterns, such as the same plan, the same seat drop, or the same point in the customer's life.
  4. For expansion, find what upgraders have in common and make that path easier for everyone else.
  5. Contact recent cancellations within days, while a win-back still has a chance.

MRR movements in ChargeBell

ChargeBell posts movements as they happen instead of in a monthly report. The subscription canceled alert is churn in real time. It shows the plan, the negative MRR change and when the subscription ends, and it posts as soon as the cancellation is scheduled. It doesn't show the reason or the customer, so open the subscription in Stripe from the alert and check cancellation_details.reason to tell a voluntary cancellation from a failed payment. The new subscription alert carries the positive MRR change, and plan upgrades and downgrades have their own alert.

Send new subscribers to #wins and cancellations to #revenue or #founders, where someone can respond while there is still time to save the account. For the full setup, see how to monitor Stripe subscriptions in Slack.

Get alerted in Slack

Stripe events: customer.subscription.created, customer.subscription.updated, customer.subscription.deleted

# revenue

ChargeBellAPP

๐Ÿ˜• A subscriber canceled ($49.00/month)

Pro Monthly ยท subscription ends Oct 24, 2026

MRR impact: โˆ’$49.00/mo

Related terms