Chart · Revenue

MRR for subscription apps: how to calculate it

MRR is monthly recurring revenue: the sum of every active paid subscription's price normalized to one month, measured at the end of each period. RevenueDot multiplies each period's USD price by a factor from the product's duration, so a $60 annual plan counts $5. Trials, one-time purchases and ads are excluded.

Formula

MRR = sum, over active paid subscriptions, of price in USD × monthly factor (30 ÷ days, 4 ÷ weeks or 1 ÷ months of the product duration)

Shape

A snapshot at the end of each period

API name

mrr

Measures

MRR (USD)

Filter and segment by

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

The MRR 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

RevenueDot finds every paid subscription that has access at the end of the period. It takes the USD price of the current paid period and multiplies it by a factor from the product's duration: 1 day ×30, 3 days ×10, 1 week ×4, 2 weeks ×2, 4 weeks ×1, 1 month ×1, 2 months ×½, 3 months ×⅓, 6 months ×⅙, 1 year ×1/12. Without a catalog duration, the length of the paid period is used. The sum over all subscriptions is MRR.

A subscription is built from the purchase ledger. Each trial, purchase and renewal is one period, and periods of the same customer, store, app and product join into one subscription while each starts within an hour of the previous one ending. A longer gap starts a new subscription, unless the store reported a billing issue and the next period is a renewal. Then the subscription continues. A cancelled subscription counts until it expires, a subscription in a grace period counts, and a refund ends the period at the refund time. A product change ends one subscription and starts another.

MRR is a snapshot, so the current period is measured now and marked incomplete. Free trials count zero. Sandbox purchases, granted access and Family Sharing purchases are excluded. 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 with a key that has charts_metrics:charts:read. The response has the same shape as RevenueCat's Charts API. The charts guide also prints the SQL that reproduces MRR from your own tables.

Worked example

MRR, step by step

Illustrative numbers for one day. Each plan is scaled to a monthly value before it is added.

PlanActive subscriptionsPriceMonthly value eachMRR
Monthly200$8$8$1,600
3 months60$18$6 (×⅓)$360
Annual100$48$4 (×1/12)$400

MRR = 1,600 + 360 + 400 = $2,360.

Why it matters

What MRR tells you

MRR is the cleanest line for judging whether a subscription app is growing, because it ignores when customers happen to pay. An annual plan counts one twelfth every month, so a big renewal month does not fake growth the way Revenue can.

Use it to judge a price change, a new plan or a paywall test: a change that works shows up as MRR moving away from its old trend within a few weeks. When MRR moves, open MRR Movement to see whether new customers, win-backs, upgrades or churn caused it.

How to read it

  • An annual subscriber counts one twelfth of the price every month of the year, even though the cash arrived once.
  • Cancelling does not lower MRR. The subscription leaves MRR when access ends, so check Subscription Status to see how much MRR is set to cancel.
  • Only subscriptions count. Do not add one-time purchases or ad revenue to MRR.
  • Weekly plans use a factor of 4, so a $2 weekly plan is $8 a month.
  • The newest point is a snapshot taken now, so it can change before the period ends.

API

Get MRR 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?resolution=day" \
  -H "Authorization: Bearer $SECRET_KEY"   # sk_... with charts_metrics:charts:read

Reference: Charts guide · REST API v2

FAQ

MRR: questions people ask

How do you calculate MRR for a subscription app?

Take each active paid subscription's price and scale it to one month: an annual price divided by 12, a weekly price times 4, a monthly price as it is. Add the results. RevenueDot does this for every subscription at the end of each period.

How are annual subscriptions counted in MRR?

At one twelfth of the annual price, in every month the subscription has access. A $60 annual plan counts $5 of MRR.

Do free trials count toward MRR?

No. A free trial counts zero. The subscription enters MRR when its first paid period starts.

Does MRR drop when a user cancels?

Not right away. A cancelled subscription keeps access until its paid time ends, so it counts in MRR until it expires.

Why is my MRR different from my monthly revenue?

MRR is a monthly run rate at the end of the period, with annual plans spread over 12 months. Revenue is money received in the period, so it includes one-time purchases, ad revenue and whole annual payments, minus refunds.

Get started

See your MRR 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