Chart · Revenue

MRR movement: new, expansion, churned and contraction MRR

MRR movement shows how monthly recurring revenue changed in each period: new, resubscription and expansion MRR added, churned and contraction MRR lost. RevenueDot adds the five parts into one movement number that equals MRR at the end of the period minus MRR at its start, so you see why MRR changed.

Formula

MRR movement = new + resubscription + expansion + churned + contraction (churned and contraction are negative)

Shape

What happened during each period

API name

mrr_movement

Measures

New MRR (USD), Resubscription MRR (USD), Expansion MRR (USD), Churned MRR (USD), Contraction MRR (USD)

Filter and segment by

App, Store, Product, Product duration, Offering, Country, Platform, App version

The MRR Movement chart in the RevenueDot dashboard, with demo data, its chart rail, plot and table
Captured from the RevenueDot dashboard with demo data.

Definition

How RevenueDot calculates MRR Movement

Each part is a monthly value in US dollars, counted on the date the change happened. New MRR is the monthly value of subscriptions that became paid, other than resubscriptions and product changes. A free trial adds to New MRR on the day it converts. Resubscription MRR is the value of subscriptions started by customers whose earlier subscription had ended. Expansion MRR is the increase from a product change or a renewal at a higher monthly value. Contraction MRR is the decrease from a product change or a renewal at a lower monthly value.

Churned MRR is the monthly value lost when a paid subscription ended, and it is net of billing recoveries. If a renewal fails, access lapses, and the store later recovers the payment, the recovery cancels the earlier churn. A paid-to-paid product change is counted once, as a net expansion or contraction, and not as churn plus a new subscription.

The movement row is the sum of the five parts. It is in the table and the API, and it is not drawn in the chart. Sandbox purchases, granted access and Family Sharing purchases are excluded, and each subscription keeps the exchange rate of its purchase date. Filter or segment by app, store, product, product duration, offering, country, platform and app version.

Find it in the dashboard under Analytics > Charts, or call GET /v2/projects/{project_id}/charts/mrr_movement. The response has the same shape as RevenueCat's Charts API. The default resolution is day, and week, month, quarter and year are available.

Worked example

MRR Movement, step by step

Illustrative numbers for one month, starting at $10,000 of MRR.

PartAmount
New MRR+$1,200
Resubscription MRR+$150
Expansion MRR+$300
Churned MRR−$900
Contraction MRR−$100

Movement = 1,200 + 150 + 300 − 900 − 100 = +$650, so MRR ends the month at $10,650.

Why it matters

What MRR Movement tells you

MRR tells you where you are. MRR movement tells you why. If MRR is flat, the bars show whether nothing happened or whether new MRR and churned MRR cancelled each other, and those two situations need very different fixes.

Big new MRR with big churned MRR points to a retention problem or a weak first renewal. Strong resubscription MRR means win-back works. Strong expansion MRR means customers move to higher plans. Check it after every paywall, pricing or onboarding change.

How to read it

  • Churned and contraction MRR are negative, so they plot below zero in the stacked bars.
  • The net movement equals the change in MRR over the period. If the bars and the MRR line disagree, check that both use the same filters.
  • A switch from a monthly plan to an annual plan is one expansion or contraction, not churn plus a new subscription.
  • A free trial adds nothing until it converts, so trial starts do not appear here.
  • A failed renewal that the store recovers later shows churn in one period and an offsetting recovery after it.

API

Get MRR Movement from the Charts API

Same path and response shape as RevenueCat's Charts API, so existing scripts keep working.

Requestshell
curl "https://api.revenuedot.app/v2/projects/$PROJECT_ID/charts/mrr_movement?resolution=day" \
  -H "Authorization: Bearer $SECRET_KEY"   # sk_... with charts_metrics:charts:read

Reference: Charts guide · REST API v2

FAQ

MRR Movement: questions people ask

What is the difference between new MRR and expansion MRR?

New MRR comes from subscriptions that just became paid. Expansion MRR comes from existing subscribers who move to a product with a higher monthly value, or renew at a higher monthly value.

What counts as churned MRR?

The monthly value of paid subscriptions that lost access in the period, net of billing recoveries. A subscription counts as churned when its access ends, not on the day the customer turns off auto-renew.

How do I calculate net new MRR?

Net new MRR is the movement measure: new + resubscription + expansion + churned + contraction. It equals MRR at the end of the period minus MRR at its start.

Is a plan upgrade counted as churn?

No. A paid-to-paid product change is counted once, as expansion if the monthly value goes up and as contraction if it goes down.

What is resubscription MRR?

The monthly value of subscriptions started by customers whose earlier subscription had already ended. RevenueDot treats a returning customer as a new subscription.

Get started

See your MRR Movement in minutes.

Connect your app to RevenueDot Cloud, free up to $10,000 a month in tracked revenue, and all 43 charts fill from your store history after import.

Already have an account? Sign in · Prefer your own servers? Self-host free