Luseri / Guides
How to calculate MRR for a Shopify app
Shopify's Partner dashboard tells you what you earned and how many stores installed your app. It does not give you a monthly recurring revenue figure, or tell you why it moved. Both can be derived from the Partner API.
Updated
The two things Shopify gives you
- App events: installs, uninstalls, store closures and reopenings, and subscription events. A subscription event carries the charge: its name, its amount and currency, and the billing date.
- Transactions: what was actually billed and paid out. They come as
AppSubscriptionSale(with its billing interval),AppUsageSale,AppOneTimeSale,AppSaleAdjustmentandAppSaleCredit.
Events tell you the state of each store's subscription over time. Transactions tell you the money. MRR is built from the first, and checked against the second.
The calculation
- Replay the events of each store in order, and keep its current subscription: none, active, or frozen.
- For every store with an active subscription, take the price of its plan, brought back to a month (an annual plan divided by twelve).
- MRR on a given day is the sum of those monthly prices.
- Compare two dates store by store to name the movement: new, upgrade, downgrade, cancellation, or return of a former subscriber.
The traps
- Currencies. A plan can be priced in one currency while your payouts arrive in another. Keep two figures, the price of your plans and the money paid out, and never add them together.
- Test charges. Subscription charges carry a test flag. Leave them out.
- Trials. A store on a trial has an accepted charge but pays nothing yet. Count it as a trial, and as revenue only when the trial ends.
- Frozen stores. When Shopify freezes a store, its subscription is frozen too. It is neither revenue nor a cancellation.
- Uninstalls. A store that uninstalls stops paying even when no cancellation event follows. Treat the uninstall as the end of the subscription.
- Usage charges and one-time purchases. They are revenue, but not recurring. Report them next to MRR, not inside it.
MRR is not what lands on your account
MRR is the price of the active plans. What you receive is lower and later: Shopify's revenue share, taxes, refunds and payout timing all sit in between. Follow both, and expect them to differ.
Luseri does this replay for you from a read-only access to your Partner account, and shows the revenue, the movements and the payouts side by side.
Questions
- Can I get MRR from the payouts alone?
- Not reliably. A payout mixes subscriptions, usage charges, one-time purchases and adjustments, and it covers a billing period, not a day.
- How far back does the Partner API go?
- It returns the event and transaction history of your app, so the curve can be rebuilt from the start instead of from the day you begin measuring.
- Should annual plans count fully in the month they are paid?
- No. Spread them over twelve months, otherwise a single annual sale looks like a spike followed by a cancellation.