HomeGuides

How to calculate Shopify app MRR from the Partner API

· AppDeck

Shopify does not hand you a field called MRR. You build it from subscription events and subscription sales on the Partner API. The result is the monthly value of subscriptions that are still active, for one app.

The records you actually need

  • The app id. It is the number in the app’s Partner or Dev Dashboard URL, or a gid that looks like gid://partners/App/123. Without it, you have to hunt the app’s name through old sales.
  • Subscription charge events: activated, canceled, and the decline and expiry events if you also want a conversion view.
  • Transactions of type AppSubscriptionSale, including the billing interval and the gross amount.

You need a Partner API client with View financials and Manage apps. The setup is in how to create a Partner API token.

Find subscriptions that are still active

Sort charge events by time. When a SubscriptionChargeActivated event arrives, and it is not a test charge, that shop has an active subscription at that price. When a SubscriptionChargeCanceled event arrives for the same charge id, remove it. Walk the whole history. The shops left at the end are the active set.

Skip test charges. They are useful in development and they are not revenue.

Turn the price into a monthly amount

A subscription billed every 30 days contributes its price. A subscription billed once a year contributes that price divided by 12. Add those monthly amounts. That sum is MRR. ARR, in this model, is MRR times 12. It is a restatement, not a second measurement.

Read the interval from the latest AppSubscriptionSale for that shop since the charge was activated. The sale is where Shopify records billingInterval. If the shop has not been billed yet, you do not have a sale, so you do not really know the interval. Hold that shop with trial MRR instead of guessing.

Leave usage and one-time sales out

AppUsageSale and AppOneTimeSale belong in earnings. They do not belong in MRR. A busy usage month can dwarf subscriptions and then disappear. If you add it into MRR, next month looks like churn that never happened.

What this number is not

It is not the Partner payout. It is not the merchant’s store revenue. It is not an App Store ranking. It is the monthly value of this app’s active subscriptions.

AppDeck runs this calculation for each app you connect. See how the sync works, or compare it with pricing.

Questions

Do I include a subscription that was activated and canceled on the same day?

No, if you replay events in order and the cancel refers to that charge. It was active for a few hours and it is not active now, so it is not part of current MRR.

Why divide annual plans by 12?

Otherwise one annual signup looks twelve times healthier than twelve monthly shops paying the same per month. Dividing by 12 keeps the plans comparable.

See it on your own apps

AppDeck runs this from the Partner API for every app in the portfolio, with trials kept separate from paying shops.

More guides