Subscription analytics is the one report in a DTC business where two dashboards can both be right and still disagree. Your subscription app says churn was 6% last month. Your store data says the same cohort retained better than that. Neither number is broken. They are counting different events, over different populations, with different ideas of what a cancellation is.
That gap is not a reporting bug. It is structural, and it comes from the fact that a subscription app measures billing while a store measures buying. Most guidance on this topic hands you a list of metrics, MRR, churn, LTV, AOV, and stops there. The list is not the hard part. The hard part is knowing which system can legitimately produce each number, and what every system on your stack is blind to.
This guide covers the three layers your subscription data sits in and what each one cannot see, the four separate events hiding inside your churn rate, why order rank beats calendar month for subscription cohorts, and the reconciliation procedure that gets your app and your store to agree on one number you can take to a board meeting.
| Layer | What it can measure | What it is blind to | The metric that breaks |
|---|---|---|---|
| BillingYour subscription app | Subscription status, charge attempts, retries, intervals, skips, pausesThe only layer that sees a state transition | No ad spendAlso blind to every one-time order you sell | Subscriber LTV:CAC, because CAC never enters this layer |
| StoreShopify | Orders, products, discounts, refunds, customer records, one-time and subscription revenue together | No lifecycleA renewal and an impulse order look almost identical | Repeat purchase rate, because renewals are counted as repeat decisions |
| BlendedA model you build or buy | Both of the above joined to media spend and cost of goods, keyed to one customer identity | Nothing structuralLimited only by the quality of the joins | Nothing, provided identity resolution holds |
Subscription analytics tracks how a recurring revenue programme acquires, retains, and monetises subscribers, and how that programme performs against the rest of the business it sits inside. The second half of that sentence is the part almost everyone drops.
Measuring a subscription programme is a solved problem. Your subscription platform ships a dashboard with active subscriptions, new subscriptions, churned subscriptions, and recurring revenue, and those numbers are accurate for what they cover. Measuring a subscription business is different, because the programme does not exist on its own. It shares customers, acquisition budget, inventory, and margin with everything else you sell.
A subscription metric that cannot be read against acquisition cost is a vanity metric with good manners. Recurring revenue that grows while blended payback lengthens is a business getting worse, and nothing inside a subscription dashboard will tell you that, because the acquisition cost never enters it.
Very few Shopify brands run a pure subscription model. The common shape is a replenishment or subscribe and save programme sitting alongside a one-time catalogue, sharing the same paid media, the same email list, and the same customers moving between the two.
That creates three populations, not one: customers who only ever buy one-time, customers who subscribe on their first order, and customers who buy one-time first and convert to a subscription later. The third group is usually the most valuable and almost always the least measured, because neither system owns it. Your store sees the first order and the second, but not that the second was a subscription signup. Your subscription platform sees the signup with no history attached, so the customer looks brand new on the day they subscribe.
The single most useful number a mixed model brand can build is the one-time to subscriber conversion rate, measured by acquisition cohort. It tells you whether your catalogue is a funnel into recurring revenue or a separate business that happens to share a warehouse. Neither platform can calculate it alone.
Every subscription number you report comes out of one of three layers, and each layer has a specific, permanent blindness.
The billing layer is your subscription platform: Recharge, Loop Subscriptions, Smartrr, Skio, Stay AI, Ordergroove, or whichever app runs your recurring charges. It holds subscription objects, charge attempts, statuses, intervals, and state transitions. It is the only place that knows a charge was retried three times before it succeeded, or that a customer skipped rather than cancelled. It has never seen an advertising invoice, so it cannot compute acquisition cost, and it does not know your one-time revenue exists.
The store layer is Shopify. It holds orders, products, discounts, refunds, and customer records. It sees every order, including the ones a subscription generated, but it sees them as orders. A renewal and an impulse purchase arrive at the store looking almost identical. The store does not hold the subscription lifecycle, so it cannot tell you whether last month's flat revenue was a stable subscriber base or a collapsing one propped up by new signups.
The blended layer is a model you build, or buy, that joins both to advertising spend and cost of goods. It is the only layer where subscriber lifetime value can be compared to what a subscriber cost to acquire, and the only one where contribution margin per subscription order is calculable. It is also the only layer that does not exist by default, which is why most brands operate without it and argue about churn instead.
Reading a number from the wrong layer is the most common way a subscription report goes quietly wrong. Retention read from the billing layer measures the health of your dunning process. Retention read from the store layer, with renewals left in, measures your dunning process again while calling itself customer loyalty.
Churn is reported as a single percentage, and inside that percentage sit four events that call for four different responses. Collapsing them is the reason so many retention programmes spend a quarter pushing on the wrong lever.
| Event | Is it churn? | What it actually signals | What moves it |
|---|---|---|---|
| 1Voluntary cancellation | Yes | A verdict on product, price or cadence. Usually a minority of the total. | Product changes, cadence options, pricing, win-back offers |
| 2Involuntary lapse | Yes, but different | A card expired or a bank declined. The customer never decided anything. | Card updater services, retry schedules, pre-dunning notices |
| 3Skip or pause | No | A healthy relationship on a slightly wrong cadence. Often invisible in reporting. | Cadence choice at signup, a visible skip control, date the event on its scheduled date |
| 4Deletion | Not really | Housekeeping in the app. Frequently the reason two dashboards will never reconcile. | Team process: cancel rather than delete, and document the residual gap |
A customer decides to stop and cancels. This is the only one of the four that is a genuine verdict on your product, price, or cadence, and it is the one every cancellation survey is built to explain. It is also usually a minority of the total. If you are treating your whole churn number as a product signal, you are over-reading it by a factor of two or more.
A card expires, a bank declines, a billing address goes stale, and the subscription lapses without the customer ever deciding anything. This is involuntary churn, and on a replenishment programme it routinely accounts for a large share of total cancellations.
It behaves nothing like voluntary churn. It responds to card updater services, retry schedules, and pre-dunning notifications rather than to discounts or product changes. Offering a win-back discount to a customer whose card simply expired is both wasteful and slightly insulting.
The metric worth building here is involuntary churn share: failed-payment cancellations divided by total cancellations, tracked monthly. Alongside it, dunning recovery rate, the proportion of failed charges eventually collected, tells you whether your retry logic is working. Both live in the billing layer and neither appears in a standard store report.
Skipping a delivery and pausing a subscription are the two most common things a replenishment subscriber does, and neither is churn. A skip is often a signal of a healthy relationship with a slightly wrong cadence. Read as churn, it triggers a save offer that discounts a customer who was never leaving.
There is a practical trap worth knowing about here, and it is subtle enough that it survives in production reporting for a long time. A skipped charge frequently carries no processed date, because it was never processed. It has a scheduled date and nothing else. Any report that filters on processed date, which is the natural default when you are counting revenue, silently drops every skip in the period. Your skip rate reads as zero, or close to it, and the conclusion is that customers are not skipping, when in fact they are skipping and your query cannot see it.
The fix is to date skip events by their scheduled date rather than their processed date. It takes a line of logic and it changes the number materially, which is a useful reminder that a subscription metric is only as honest as the timestamp it is bucketed on.
Merchants routinely delete subscriptions in their subscription platform rather than cancelling them, usually while cleaning up test records or handling a support request. Deleted subscriptions often behave differently from cancelled ones on the way out: some platforms keep them soft-deleted in their own reporting, so the merchant still sees them in the totals, while removing them entirely from the API that every external tool reads.
The consequence is that your subscription platform's dashboard and any tool reading its API will never fully reconcile, and the gap is not a bug in either one. It is worth knowing before you spend a week trying to close a variance that is definitionally uncloseable. Establish the size of the gap, document it, and stop re-litigating it every month.
Monthly recurring revenue was designed for software, where a plan has a fixed price and a customer on a $99 tier contributes $99 until they leave. Almost nothing about that holds for physical replenishment.
A subscriber can change quantity, swap products, add a one-off item to their next box, apply a loyalty discount, skip a cycle, or move from a four week to a six week cadence. Every one of those changes the amount you will actually collect, and none of them is a cancellation. MRR calculated from plan price is a contracted figure that your business does not collect. MRR calculated from the last charge is a trailing figure that misses everything scheduled.
The number worth reporting instead is recurring revenue realised: what you actually collected from subscription charges in the period, net of refunds and failed payments, with the forward book reported separately as scheduled revenue. Two numbers, honestly labelled, beat one number that quietly blends a promise with a receipt.
Scheduled revenue is genuinely useful on its own, because it is the closest thing a DTC brand has to a forecast that does not depend on a media plan. Read it with an expected dunning loss applied, not at face value.
Once the layers are clear, the metric set almost picks itself. The question for each one is not whether it is interesting, it is which layer can legitimately produce it and what breaks when it is calculated somewhere else.
| Metric | Question it answers | Layer that must produce it | Common failure |
|---|---|---|---|
| Active subscriber count | How big is the recurring base right now? | Billing | Counting subscriptions instead of people, so a two-plan customer counts twice |
| Recurring revenue realised | What did the programme actually collect? | Billing | Reporting contracted plan value rather than collected charges |
| Scheduled revenue | What is booked for the next 30 or 90 days? | Billing | Read at face value, with no expected dunning loss applied |
| Involuntary churn share | How much of my churn is a payments problem? | Billing | Never separated out, so retention spend goes to the wrong lever |
| Dunning recovery rate | Is my retry logic working? | Billing | Charges that settle across a period boundary get counted twice or not at all |
| Skip rate | Is my cadence wrong rather than my product? | Billing | Skips have no processed date, so date-filtered reports drop them entirely |
| Subscription order rank | At which delivery do subscribers leave? | Store | Replaced with calendar month, which averages away the cliff |
| One-time to subscriber conversion | Is the catalogue a funnel into recurring revenue? | Blended | Not calculated at all, because neither system owns both sides |
| Subscriber LTV to CAC | Is the programme worth what it costs to fill? | Blended | Compared against an unmatched one-time baseline, so selection reads as effect |
| Contribution margin per subscription order | Does recurring revenue carry its own cost? | Blended | Standing discount and higher shipping cost per unit left out |
Two of these deserve a note because they are the ones most often missing entirely.
Subscription order rank is the sequence number of a charge within a single subscription: first delivery, second, third. It is the axis along which subscription retention actually varies, and it is the one axis a calendar-based report cannot show you.
Contribution margin per subscription order matters because subscription orders are not margin-identical to one-time orders. They usually carry a standing discount, they often ship in smaller, more frequent parcels, and the shipping cost per unit of revenue is therefore higher. A subscription programme can grow revenue while diluting margin, and only an order-level margin calculation will show it.
Standard cohort analysis buckets customers by acquisition month and tracks them across calendar periods. For a one-time catalogue that is the right instrument, and it is how retention should be measured by cohort rather than as a single blended rate.
Subscriptions break the calendar version in a specific way. Subscribers arrive continuously and their delivery cadences differ, so month three for a four week subscriber is their third or fourth delivery, while month three for an eight week subscriber is their second. Averaging those two inside one column produces a curve that describes nobody.
Bucketing by order rank fixes it. Column one is everyone's first delivery, column two is everyone's second, regardless of when they signed up or how often they receive. The curve then answers the question you actually have: at which delivery do subscribers leave?
Order rank cohorts tend to expose a specific drop rather than a gentle decay, and the location of that drop is diagnostic.
A cliff at the second delivery is almost always a promotional artefact: a heavy first-order discount acquired customers who were buying a discount rather than starting a habit. A cliff at the third or fourth is usually cadence, the customer has more product than they can use and cancels instead of skipping, which is a product education problem and often a skip button that is too well hidden. A cliff much later, after the initial commitment period, is a pricing or value problem and it is the expensive one to fix.
A calendar cohort table smears all three of these into a single sloping line, which is why so many subscription retention programmes launch a lifecycle email campaign to fix what was actually a discount problem.
Every subscription vendor will tell you subscribers are worth several times a one-time buyer. The arithmetic is real. The causal claim underneath it usually is not.
Subscribers self-select. The customers who choose a recurring plan are disproportionately the ones who already intended to buy repeatedly. Comparing them to the average one-time buyer measures that self-selection at least as much as it measures any effect of the subscription itself. It is the retention equivalent of noticing that customers who join your loyalty programme spend more.
The comparison worth running instead holds intent constant. Take customers who bought one-time first, then split them by whether they later converted to a subscription, and match on first order value, first product, and acquisition channel. The gap between those two groups is a far better estimate of what the subscription programme is actually adding, and it is normally a good deal smaller than the headline multiple.
This matters commercially, not just intellectually. If subscriber lifetime value is mostly selection, the lever is conversion, getting more of your already-loyal customers onto a plan. If the gap survives matching, the lever is enrolment at first order, because the plan itself is changing behaviour. Those are different budgets. Getting Shopify LTV right is what tells you which one you are looking at.
This is the procedure that ends the two-dashboards argument. It is five decisions, and they need writing down rather than agreeing verbally, because every one of them will be re-litigated the first time a number moves.
Agree the customer key. A subscription platform and a store frequently key on different things, and the same person can appear as two customers if they checked out with a different email or on a different device. Until identity is stitched, every downstream comparison is measuring your matching quality rather than your customers. This is also where returning subscribers get counted as new, which inflates acquisition and deflates retention from a single cause.
Agree what a renewal is. Decide explicitly whether an automatic renewal counts as an order for the purposes of repeat purchase rate. There is a defensible answer either way, but a renewal is a billing event rather than a purchase decision, so the version most people want excludes it. Build the metric both ways and label them clearly.
Agree the charge taxonomy. This one catches people out. Subscription platforms classify charges into checkout and recurring buckets, and a genuinely new subscription that a customer added onto an existing charge can be labelled recurring rather than new. Count new subscriptions off that label without checking and you will understate acquisition for exactly the customers who are expanding.
Agree the churn date. A cancellation can be dated to the day the customer clicked cancel, the day the subscription became inactive, or the day the final paid charge covered. Those can sit weeks apart. Pick one, apply it to both systems, and expect a step change in the reported number the first time you do.
Then compare, and expect a residual gap. Deleted subscriptions, retried charges that settle across a period boundary, and refunds processed after cancellation all produce small permanent variances. Quantify the gap once, write down the expected range, and treat anything inside it as reconciled.
The tooling question follows from the modelling question, not the other way round. Three things determine whether your subscription analytics will hold up, and none of them is a dashboard.
Store subscription state as history, not as a snapshot. The single most valuable shape for this data is an event log at customer by subscription by charge grain, where every status change keeps its timestamp. A snapshot of current statuses answers today's question and destroys every question about how you got here. An event log supports revenue analysis, forecasting, retention curves, and cohort work off the same table, which is why it is worth the modelling effort up front.
Resolve identity before you calculate anything. Cross-device and cross-browser stitching sets the ceiling on how accurate any retention or lifetime value number above it can be. No amount of dashboard sophistication recovers a customer who was counted twice.
Attach margin and acquisition cost at order level. Subscription revenue joined to cost of goods and shipping at the order line, and to media spend at the cohort level, is what turns a subscription report into a profitability report. It is also the point at which you can finally answer whether the programme is worth what it costs to fill.
With those three in place, the reporting surface is straightforward: cohort tables that switch between retention rate, customers, orders, net sales, gross margin, lifetime value and LTV to CAC, on either calendar periods or rolling windows measured from each customer's own first order. That is the instrument. Everything above is what makes it trustworthy.
The sequence matters. Fix the definitions, fix the join, then buy a dashboard, and not in the other order. Once the numbers reconcile, the next useful move is forward-looking rather than descriptive: you can score at-risk customers before they lapse instead of counting them after they have gone.
