Shape
What happened during each period
Chart · Revenue
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
Definition
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
Illustrative numbers for one month, starting at $10,000 of MRR.
| Part | Amount |
|---|---|
| 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
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.
API
Same path and response shape as RevenueCat's Charts API, so existing scripts keep working.
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
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.
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.
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.
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.
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
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