Shape
A snapshot at the end of each period
Chart · Revenue
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
Definition
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
Illustrative numbers for one day. Each plan is scaled to a monthly value before it is added.
| Plan | Active subscriptions | Price | Monthly value each | MRR |
|---|---|---|---|---|
| Monthly | 200 | $8 | $8 | $1,600 |
| 3 months | 60 | $18 | $6 (×⅓) | $360 |
| Annual | 100 | $48 | $4 (×1/12) | $400 |
MRR = 1,600 + 360 + 400 = $2,360.
Why it matters
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.
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?resolution=day" \
-H "Authorization: Bearer $SECRET_KEY" # sk_... with charts_metrics:charts:read Reference: Charts guide · REST API v2
FAQ
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.
At one twelfth of the annual price, in every month the subscription has access. A $60 annual plan counts $5 of MRR.
No. A free trial counts zero. The subscription enters MRR when its first paid period starts.
Not right away. A cancelled subscription keeps access until its paid time ends, so it counts in MRR until it expires.
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
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