Subscription COGS on Shopify: How to Track It Right
Subscription products bend the standard Shopify profit model in two important ways. The first shipment is rarely the right unit of analysis, because the customer acquisition cost has to be amortised over an expected lifetime of refills, not absorbed entirely on day one. And the per-order COGS that Shopify writes on each recurring shipment is correct at the line item level but invisible at the cohort level, where the actual money is made or lost. This guide walks through the structural mismatch, the per-order layer that still has to be right, and the cohort layer that subscription brands need on top.
Why Per-Order Profit Breaks for Subscriptions
Shopify treats a subscription as a sequence of orders. The first order has the full acquisition cost baked in, often a 30 to 40 percent first-box discount plus paid ads spend per acquired subscriber. The second through Nth orders look healthy on their own, because there is no discount and the marginal cost is just COGS, fees, and shipping. Looking at any one order tells you nothing about whether the subscription cohort is profitable.
The underlying per-order math is the same as the one we cover in how to calculate true profit on Shopify. What changes is the unit of analysis. For a one-time order, the per-order number is the whole story. For a subscription, the per-order number is one data point in a cohort whose health depends on how many shipments arrive before churn.
Get the Per-Order Layer Right First
Before layering cohort math on top, the per-order COGS on every subscription shipment has to be correct. Subscription apps like Recharge or Shopify native subscriptions write the unit cost from the InventoryItem onto each recurring order. That means the accuracy at the cohort level depends entirely on the cost being current per variant. Five common ways this breaks:
- Stale unit costs after a supplier price change. A subscription product priced last year on $4 wholesale is now $5.25 wholesale, but the InventoryItem still says $4.
- New variants added with cost left blank. Particularly common when subscription tier additions get launched mid-quarter.
- Bundle subscriptions with the bundle COGS aggregating incorrectly. Each component variant needs its own cost; bundle apps that flatten this lose detail.
- Free gift-with-subscription items at zero recorded cost. They are not free to procure even when they are free to the customer.
- Tariff or duty changes, which we cover separately because they hit landed cost across the entire catalogue, not just subscriptions.
Fix these at the source on the InventoryItem. If you do not yet have real unit costs across the catalogue, that is a higher leverage week of work than any subscription analytics; the workflow lives in our Shopify COGS setup guide.
The Cohort Layer: Subscription Lifetime Margin
With per-order COGS clean, the question becomes how to roll up shipments into cohort margin. The formula is:
Cohort lifetime profit per customer = Sum of (per-shipment net profit) over expected shipments, minus acquisition cost
The two inputs that need attention are expected shipments and acquisition cost.
Expected shipments is your churn curve translated into a number. If the cohort retention curve says 70 percent retain after shipment one, 55 percent after shipment two, and so on out to a long tail, the expected shipment count for the cohort is the sum of those retention rates. Many brands stop at four or six shipments because the tail rarely contributes meaningful incremental profit per customer once you discount for time.
Acquisition cost includes the first-box discount, ad spend allocated per acquired subscriber, and any free-gift COGS. A common mistake is to count only paid ad spend; first-box discount is just as much a cash outlay against margin and should be in the same bucket.
Per-Order Profit Stays Useful, with a Caveat
Even though cohort margin is the headline metric, per-order profit on each recurring shipment still earns its keep. Three reasons:
- Detecting margin erosion in real time. If shipment 3 of a cohort suddenly turns negative because COGS shifted, you want to know before the churn shows up in next quarter's report.
- Identifying unprofitable subscribers. A small number of subscribers stack a permanent percent-off code with a free shipping perk; per-order profit catches them. We cover the pattern in how to identify unprofitable orders before they ship.
- Comparing subscription COGS to one-off COGS for the same SKU. Same product, different channel; the per-order lens lets you confirm the subscription cohort is materially more profitable than a one-off sale at the same SKU level.
The caveat: do not optimise individual subscription shipments to maximise per-order profit at the expense of cohort retention. A one-point lift on shipment two that drives a five-point drop in shipment four retention is a net loss.
Pairing the Two Views Operationally
Most subscription brands end up with two dashboards. The first is per-order profit, computed in real time on each recurring shipment, used for operational margin defence. The second is cohort lifetime profit, run weekly or monthly, used for marketing, pricing, and retention decisions.
Both depend on the same underlying inputs: clean unit costs, accurate payment fees per order, and shipping cost segmentation. The per-order layer is what we cover in detail in profit per order vs revenue; the cohort layer is the layer that subscription-specific tooling has to add on top. Brands that run both consistently know which sub categories of subscriber are funding the rest of the business and can defend pricing against the next supplier increase without panicking.
Frequently asked questions
Does Shopify track subscription COGS differently?
No. Shopify treats each subscription charge as a separate order, and the InventoryItem unit cost is applied per shipment. The structural problem is that the per-order profit lens misses the cumulative shape of subscription unit economics across the customer lifetime.
Should the first-order discount be subtracted from COGS over the lifetime?
Yes, when running cohort or LTV analysis. The first-order discount is a customer acquisition cost amortised over expected lifetime revenue. Build a separate LTV view alongside per-order profit so the discount does not look pure on day one or pure loss in isolation.
How do I model churn cost in subscription margin?
Use expected lifetime shipments rather than infinite. If a subscription cohort averages 4.2 shipments before churning, the per-customer profit is the sum of those 4.2 shipments minus acquisition cost. Marginal subscription profit beyond churn point should not be assumed.
What is the best subscription app for accurate COGS on Shopify?
Recharge and Shopify native subscriptions both write the unit cost from the InventoryItem onto the recurring order. The accuracy depends on the cost being current per variant. Subscription apps do not invent COGS; they consume what Shopify has.
Want per-shipment subscription profit, calculated in real time?
Profit Guard reads your real InventoryItem unit cost on every subscription order, including bundles, and flags any recurring shipment that has slipped below your margin floor. Free plan available.
Install Profit Guard on Shopify