MRR

The Monthly recurring revenue (MRR) chart displays the revenue from your active paid subscriptions, normalized to a monthly figure. It shows the steady-state revenue your subscription business generates, regardless of subscription length.

To see how each subscriber cohort contributes to recurring revenue over time, group the chart by first purchase month and switch to a monthly resolution. The stacked area view reveals each cohort’s contribution month over month.

MRR chart

Calculation

The calculator below does not take into account store commission and taxation. Compare the result to your gross revenue calculations.

MRR normalizes each subscription’s revenue to a monthly equivalent — an annual subscription at $240 contributes $20 each month, not $240 upfront. This keeps MRR steady regardless of how subscription billing periods are distributed.

MRR is the sum of (price × active subscribers ÷ billing period in months) across all your subscription types. Weekly subscriptions use a billing period of ≈0.23 months.

MRR

PricePsP_s
SubscribersNsN_s
Subscription periodDmD_m

MRR doesn’t account for products that don’t generate recurring revenue:

  • one-time purchases
  • consumables
  • non-renewing subscriptions

Your user base may generate a steady revenue through one-time products. But this revenue doesn’t count towards MRR because the purchases themselves aren’t recurring.

Refund handling

When a subscription is refunded, MRR removes its contribution from every date on the chart where it was previously counted. Past MRR values can decrease after a refund lands.

For the full comparison across metrics, see How metrics handle refunds.

Currency

Adapty displays all monetary charts in US dollars, regardless of the original transaction currency. This includes Revenue, MRR, ARR, ARPU, ARPPU, LTV, predicted revenue, refund money, and the revenue figures inside cohorts and A/B test reports. There’s no setting to display them in another currency.

Adapty converts each transaction to USD using a rate from currencylayer.com refreshed every 8 hours, fixed at the time of the transaction. Historical USD values don’t re-rate when FX moves.

Local-currency values are available per-transaction in:

  • The price and currency_code fields in webhooks
  • The price and currency_code columns in S3, GCS, and BigQuery exports
  • The profile page (per-transaction view)

For finance reporting in a local currency, pull the per-transaction local-currency values from an export and aggregate them yourself.

Renewal pricing

Adapty calculates renewal revenue at the product’s current price, even for users who were on a previous price when they first subscribed. After you change a price in App Store Connect or Google Play, the dashboard’s Revenue, MRR, and ARR figures for existing subscribers may diverge from the actual revenue collected — Adapty applies the new price, even if the store kept those users on the old one.

To verify, compare the per-transaction price field in the S3, GCS, or BigQuery export against the dashboard for the same transactions. The export field reflects what the store reported (the price the customer actually paid); the dashboard reflects the current product price.

Available filters and grouping

Main article: Analytics controls

  • ✅ Filter by: Attribution, Audience, Country, Offer Type, Offer ID, Offer Discount Type, Paywall, A/B tests, Placement, Period, Segment, Store, Product, and Duration.
  • ✅ Group by: Period, Renewal status, Product, Country, Store, Paywall, Audience, Placement, Duration, Offer Type, Offer Discount Type, Offer ID, Segment, and Attribution.

Similar metrics

For a side-by-side comparison of these metrics, see the Metric comparison table.