Collections

GMROI Formula: Find Which Products Earn Their Shelf Space

What the GMROI formula tells you

The GMROI formula is gross margin return on inventory investment: gross margin dollars divided by average inventory at cost. A result of 2.5 means each dollar tied up in that product returned $2.50 of gross margin over the period.

Sales volume alone does not answer whether a product earns its shelf space. Two SKUs can generate the same revenue and still produce very different returns if one sits in the warehouse longer or carries a thinner margin. GMROI puts those two facts in one number.

The standard formula, as defined by Investopedia, is:

  • GMROI = Gross margin / Average inventory cost
  • Gross margin = Net sales − Cost of goods sold
  • Average inventory cost = (Beginning inventory + Ending inventory) / 2

You can also write it as gross margin percentage multiplied by inventory turnover, but only if both pieces use the same definition. Sales-based turnover is net sales divided by average inventory at cost, and that figure multiplies by the gross margin rate (gross margin divided by net sales). COGS-based turnover is COGS divided by average inventory at cost, and that figure multiplies by gross margin divided by COGS, not by the sales margin rate. Use cost, not retail value, for the inventory denominator. Mixing retail inventory with cost-based margin inflates or deflates the ratio.

A GMROI below 1.0 for the period means gross margin dollars were less than average inventory at cost. It does not, by itself, prove the product lost money or destroyed cash: stock may still be on hand, and GMROI excludes operating costs.

How to calculate average inventory at cost

Average inventory is the stock you actually financed during the period, not the units on hand today. For a monthly or quarterly review, use beginning and ending inventory at cost. If those two snapshots miss a mid-period spike, average weekly or monthly ending balances instead.

For this calculation, use on-hand quantity from Shopify’s inventory records and the unit cost you already track, not a complete accounting ledger and not a figure pulled from adjustment history. Shopify’s inventory adjustment history records who made the change, when it happened, and how the change affected available quantities. It does not list the cost of that adjustment. Multiply quantity by unit cost at each snapshot date. If that unit cost is blank or stale, use the cost from your accounting system instead. Do not use retail price or compare-at price in the denominator.

Worked example: one product, one quarter

A candle brand tracks a bestselling 8 oz soy candle for Q1.

  • Net sales: $18,400
  • COGS: $7,360
  • Gross margin: $18,400 − $7,360 = $11,040
  • Beginning inventory at cost: $2,100
  • Ending inventory at cost: $1,500
  • Average inventory: ($2,100 + $1,500) / 2 = $1,800
  • GMROI: $11,040 / $1,800 = 6.13

Each dollar of average inventory returned $6.13 of gross margin in the quarter. Annualize only if you compare products on the same window. A quarterly 6.13 is not the same claim as an annual 6.13.

The two shortcuts reconcile to that same 6.13 only when the multiplier matches the turnover definition. Gross margin rate is $11,040 / $18,400 = 60%. Sales divided by average inventory is $18,400 / $1,800 = 10.22, and 0.60 × 10.22 = 6.13. COGS divided by average inventory is $7,360 / $1,800 = 4.09 turns. Gross margin divided by COGS is $11,040 / $7,360 = 1.50, and 1.50 × 4.09 = 6.13. Multiplying the 60% sales margin rate by the 4.09 COGS turns (0.60 × 4.09 = 2.45) mixes the two definitions and understates GMROI. Publish the direct division, $11,040 / $1,800 = 6.13.

Why similar sales can hide a weak GMROI

GMROI splits products that look equal on the sales report. The difference usually sits in how much stock you had to hold to produce those sales, and in how much margin was left after product cost.

Take two products in the same collection over 90 days. Both did about $12,000 in net sales. Only one deserves the hero slot.

MetricLinen throwCeramic vase
Net sales$12,200$11,800
COGS$4,880$7,080
Gross margin$7,320$4,720
Gross margin rate60%40%
Average inventory at cost$1,460$3,540
Inventory turns (COGS / avg inventory)3.342.00
GMROI5.011.33

The vase is not a failure on revenue. It is a weak use of cash and collection space. You needed more than twice the inventory investment to produce slightly less sales, and you kept less of each dollar after cost. The throw returned about $5 of gross margin per inventory dollar. The vase returned $1.33.

That gap is the merchandising decision. Promote and restock the throw. Do not give the vase equal ad budget or equal above-the-fold placement until you cut the stock you hold, raise price, or lower cost. Contribution margin per unit still matters for whether a single order is profitable after fees and shipping. GMROI answers a different question: did the inventory you financed earn its keep?

Restock, promote, or investigate

There is no universal GMROI cutoff that fits every Shopify catalog. Apparel with seasonal buys, consumables with fast replenishment, and made-to-order goods will not share one benchmark. Compare products inside the same collection, on the same time window, using the same cost basis.

Do not borrow a published range as your cutoff, and do not treat a GMROI above 1.0 as proof that cash is back in time for the next purchase order. GMROI compares period gross margin with average inventory at cost. It does not track when that margin actually hits the bank, when the supplier must be paid, or what the next order will cost in freight, duties, and minimums. Use it as a rough internal comparison: rank every SKU in the collection on the same period, drop the bottom quartile as the investigate set, and treat the collection median as the line a product must clear before it earns more stock or a higher tile. Then check cash timing and the next PO separately. A consumable that turns every few weeks can clear a higher ratio than a seasonal apparel buy held for months, even when both are healthy for their category.

Sort the collection into three actions

  1. Restock: GMROI is strong and sell-through is steady. Check days of cover against supplier lead time, and confirm you can fund the next purchase order, so a winner does not stock out before that PO lands.
  2. Promote: GMROI is strong but sessions or collection placement are low. The product earns its inventory. It is not earning enough traffic. Move it higher in the collection and point paid traffic at it.
  3. Investigate: GMROI is weak. Before you discount, separate thin margin from slow turns. A 25% gross margin rate with 8 sales-based turns (net sales divided by average inventory at cost) can beat a 55% gross margin rate with 1.2 sales-based turns, because 0.25 × 8 = 2.0 and 0.55 × 1.2 = 0.66.

Use this split when you review a collection, not a single hero SKU in isolation.

PatternWhat it usually meansNext action
High GMROI, low stock coverWinner at risk of a stockoutReorder before you increase ads
High GMROI, low trafficUnderexposed earnerPromote inside the collection and in campaigns
Low GMROI, high inventoryCash trapped in slow stockCut the next buy, bundle, or exit
Low GMROI, low margin, fast turnsPrice or cost problem, not a demand problemReprice or renegotiate before you demote
GMROI near 1.0 after a deep discountMargin was given away to move unitsStop repeating the promo on replenishment

Collection rank should follow this logic. A product that converts well but ties up three months of cost does not automatically deserve the first tile. A product with a modest conversion rate and a GMROI of 5 often does, as long as you can keep it in stock. Assortment choices get cleaner when you pair this ratio with a planned buy, which is the point of assortment planning.

Where GMROI misleads you

GMROI is a period average. It cannot see a stockout that happened in week three, a conversion drop after a price test, or ad spend that never touched gross margin. Read it next to sell-through, days of cover, and product conversion rate.

  • Stockouts inflate GMROI. Ending inventory near zero makes average inventory look small, so the ratio jumps even if you missed sales. Check units lost to out-of-stock before you celebrate a 9.0.
  • New products look terrible. A launch with a full inbound receipt and two weeks of sales will show a low GMROI. Judge it after at least one replenishment cycle, or compare it to other launches at the same age.
  • One-time receipts distort the average. A container that landed on day 2 and sold through by day 20 is not the same cash burden as stock that sat all quarter. Use more than two snapshots when receipts are lumpy.
  • Discounts can raise turns and crush margin at the same time. Recalculate GMROI on the promo window separately so a clearance event does not rewrite the regular-price decision.
  • COGS timing errors fake the result. If Shopify unit cost is blank, outdated, or includes shipping on some SKUs and not others, the ranking is noise. Fix cost before you demote a product.
  • GMROI ignores operating costs. Payment fees, pick-pack, returns, and ads sit outside gross margin. A 3.0 GMROI can still lose money on a high-return, high-ad SKU. Cross-check contribution margin before you scale spend.

Too much of the wrong stock, and too little of the right stock, both hit margin. GMROI is one way to see that split at SKU level. It is not a substitute for knowing whether the product converts when a shopper actually sees it.

On Shopify, the clean weekly habit is short. Export or sync net sales, COGS, and on-hand cost for the collection. Compute GMROI for every SKU above a minimum sales threshold so a $40 oddity does not outrank your core line. Then sort into restock, promote, and investigate. Tools that watch collection conversion and stock cover, including collection optimization, help you catch the cases GMROI misses: a high-GMROI product about to stock out, or a high-converter buried on page two.

A 30-minute GMROI review

  1. Pick one collection and one closed period, usually the last 90 days.
  2. Pull net sales and COGS per product. Gross margin is sales minus COGS.
  3. Average beginning and ending inventory at unit cost. Drop SKUs with missing cost.
  4. Divide gross margin by average inventory cost.
  5. Flag anything under your collection median, and anything above it with less than one lead time of cover.
  6. Promote underexposed high-GMROI products. Cut the next purchase on low-GMROI, high-cover products. Reorder winners before you raise ad spend.

Do that once a month on your top collections. The formula is simple. The decision is which products get the next dollar of stock and the next slot above the fold.