GMROI Explained: Measuring Inventory Profitability
GMROI answers what turnover cannot: how much gross margin each dollar of inventory returns. The formula, a worked example, and how to read it by category.
Inventory turnover counts how many times you sold through your average stock. It does not ask what came back with the money. A product can turn eleven times a year and return less per dollar invested than one that turns half as often, and if you are deciding where the next order goes, that is the comparison that matters.
GMROI, gross margin return on inventory investment, is the metric that joins the two halves. The site's guide to the inventory metrics worth tracking introduces it in a paragraph; this post is the calculation, worked end to end, plus the two decisions people get wrong when reading the result.
What GMROI answers
GMROI answers one question: for every dollar you have tied up in stock, how many dollars of gross margin does that stock produce over a period. A GMROI of 4 means four dollars of gross margin for every dollar of average inventory at cost. Below 1 means the stock returned less gross margin over the period than the money sitting in it.
That framing makes it a budget metric rather than an operations metric. Your inventory budget is finite. Every product in the catalogue is holding a share of it, and GMROI ranks them by what they give back for the share they hold. Turnover ranks them by speed, which is only the same ranking when every product carries the same margin.
The formula
GMROI = gross margin ÷ average inventory at cost
It is a standard retail formula, worth stating in its conventional form so you can check it against any textbook and find the same equation. The definitions of the two terms are where answers diverge.
Gross margin is net sales minus cost of goods sold for the period, in dollars. Not a percentage, and not revenue. If you have a 60 percent margin product doing $10,000 of sales, the numerator is $6,000, not 60 and not 10,000.
Average inventory at cost is the average value of the stock you held over the same period, valued at what you paid for it. The standard shortcut is beginning inventory plus ending inventory divided by two, and averaging monthly values instead gives a much more representative figure. The inventory turnover post goes through building that denominator from Shopify data in more detail; the same denominator serves both metrics.
The word "cost" in that second term is doing real work. Divide gross margin by inventory valued at retail and the arithmetic still runs, but the result no longer means dollars of margin per dollar invested. State the basis you used, every time.
State the period too. Gross margin over a quarter divided by average inventory gives a quarterly GMROI, a quarter of the annual figure at the same run rate. Neither is wrong; comparing one against the other is.
One rearrangement explains why the number behaves as it does. Multiply and divide by cost of goods sold, and GMROI splits into two familiar pieces:
GMROI = (gross margin ÷ COGS) × inventory turnover at cost
The first term is your markup on cost, the second is turnover. A product can reach the same GMROI by being cheap and fast or expensive and slow, and moving either term moves the result.
A worked example
Two products from an invented catalogue, chosen because they behave identically on every operational measure and differently on this one. The figures are illustrative.
Cedar & Fig, 250g. Sells 5 units a day at $18, unit cost $7. Stock cycles between 90 and 240 units, so average inventory is (240 + 90) ÷ 2 = 165 units, which at cost is 165 × $7 = $1,155.
- Annual units: 5 × 365 = 1,825
- Gross margin per unit: $18 − $7 = $11
- Annual gross margin: 1,825 × $11 = $20,075
- Annual COGS: 1,825 × $7 = $12,775
- GMROI: $20,075 ÷ $1,155 = 17.4
Turnover at cost for the same product is $12,775 ÷ $1,155 = 11.1 turns a year. Check it against the rearrangement: markup on cost is $11 ÷ $7 = 1.57, and 1.57 × 11.1 = 17.4. The two routes agree.
Linen Spray, 100ml. Same shelf, same policy, same velocity: 5 units a day at $18, average 165 units on hand. The only difference is that it costs $12 a unit instead of $7.
- Average inventory at cost: 165 × $12 = $1,980
- Annual COGS: 1,825 × $12 = $21,900, so turnover is $21,900 ÷ $1,980 = 11.1 turns, identical to Cedar & Fig
- Annual gross margin: 1,825 × $6 = $10,950
- GMROI: $10,950 ÷ $1,980 = 5.5
Same turns, same units out the door, same number of units on the shelf. Three times the return per dollar invested on one of them. Every operational report in the store would rank these two products level.
A third product makes the other half of the point. A Cedar & Fig gift tin at the same $7 cost and $18 price, held at the same average of 165 units, but selling one unit every five days: 73 units a year, $803 of gross margin, and $511 of COGS. Its turnover is $511 ÷ $1,155 = 0.4, and its GMROI is $803 ÷ $1,155 = 0.7. Same margin per unit as the store's best seller, and under a dollar of gross margin returned per dollar tied up.
| Product | Unit cost | Turnover (at cost) | GMROI |
|---|---|---|---|
| Cedar & Fig, 250g | $7 | 11.1 | 17.4 |
| Linen Spray, 100ml | $12 | 11.1 | 5.5 |
| Gift tin | $7 | 0.4 | 0.7 |
GMROI vs. turnover
The three rows above cover both failure modes of reading turnover alone. Rows one and two have the same turnover and a threefold gap in return, because margin differs. Rows one and three have the same margin and a gap of more than twenty times, because velocity differs. Turnover sees the second gap and is blind to the first.
This is why a fast-turning product is not automatically the better use of the budget. What the budget buys is gross margin, and a thin-margin product has to turn much faster to deliver the same amount of it. The fast-moving and slow-moving comparison covers how the two classes behave operationally; GMROI says which deserves the cash.
One limit worth stating plainly: GMROI stops at gross margin. It does not subtract what holding the stock costs while it waits, so the gift tin is worse than 0.7 suggests once storage, capital and the risk of going stale are counted. It is a ranking tool, not a profit measure.
Reading it by category
GMROI is most useful one level up from the SKU. Roll numerator and denominator up together, category gross margin over category average inventory at cost, and you get a ranking of where the buying budget is working. It is also less noisy there: one large delivery swings a single SKU's average inventory badly, while a category of thirty products absorbs it.
Which brings up the question everybody asks first. There is no defensible benchmark GMROI for a small Shopify store. No published figure we can find discloses a methodology, samples merchants of that size, and comes from somebody who is not selling inventory software. The three products above show why: they sit in one imaginary store under one set of policies and return 17.4, 5.5 and 0.7. A single line drawn across all three as "healthy" would mean nothing. Store-level and SKU-level figures are not comparable either, because a store-level denominator contains everything you own.
Two comparisons survive that objection. The first is cross-sectional: your own products and categories against each other, computed the same way on the same day. That holds your cost of money, your markup convention and your season constant, which is exactly what a cross-industry figure cannot. Ranked that way, GMROI pairs with ABC and XYZ segmentation: ABC grades products by revenue contribution, and GMROI asks whether the capital behind that revenue was well spent.
The second is longitudinal: the same category against itself, this quarter against the same quarter last year. Seasonality makes quarter-on-quarter comparisons misleading for most catalogues, so match the period.
Acting on a low GMROI
The formula has two terms, so a weak GMROI has two places to attack. Four levers follow.
Raise the margin. A price rise or a cost reduction moves the numerator, and on a thin-margin product a small move goes a long way. Linen Spray at $19 rather than $18 earns $7 a unit instead of $6: $12,775 of annual gross margin against the same $1,980 of average inventory, a GMROI of 6.5 instead of 5.5. Taking the same dollar off the cost side does slightly more, because it lifts the numerator and lowers the denominator at once: at $11 of cost, $12,775 against $1,815, a GMROI of 7.0.
Hold less of it. The denominator is a choice. Smaller, more frequent orders on the same demand lower average inventory without touching sales, and the ways to do that without raising your stockout risk are covered in growing revenue without adding inventory.
Sell it faster, or stop. On the gift-tin case, neither margin nor stock level is the real problem: 165 units of something selling 73 units a year is more than two years of cover. That is a demand-forecasting failure that became a buying failure, and the fix is either a genuine attempt to move the units or a decision not to reorder.
Move the budget. Once the categories are ranked, the last lever is the reallocation itself, shifting the next order's money from the bottom of the list toward the top. This is the only lever that requires no negotiation with anybody.
Most low-GMROI products got there the same way: the store bought against a guess about demand and the guess was high, so the denominator grew and never came back down. StockCue forecasts demand per SKU from your own sales history and sizes reorders against it, which is the input behind the denominator. It does not calculate GMROI, and no forecasting tool will tell you what a good one is for your catalogue.
Frequently Asked Questions
What is a good GMROI?
There is no published benchmark for a small Shopify store that discloses a methodology and samples stores like yours, and most of the figures in circulation come from companies selling inventory software. GMROI moves with your markup convention, your sales velocity and how much stock you choose to hold, so a number from another business tells you nothing about your own. The comparisons that do work are internal: this product against that one, this category against that one, and this quarter against the same quarter last year.
What is the difference between GMROI and inventory turnover?
Turnover counts how many times you sold through your average stock in a period and ignores what you earned on each sale. GMROI takes the same inventory investment and asks how much gross margin came back from it. Two products can post identical turnover and very different GMROI when their margins differ, which is why turnover on its own cannot rank products competing for the same buying budget.
Can I calculate GMROI for a single product?
Yes, and the arithmetic is identical: that product's gross margin for the period divided by its own average inventory at cost. The caution is noise. One product's average inventory swings hard around a single large delivery, so a SKU-level figure built from two snapshots can move a long way without anything real changing. Average monthly stock levels instead of start and end figures, and read the result as a ranking against your other products rather than a precise measurement.
What inputs do I need from Shopify to calculate GMROI?
Three: units sold and net sales for the period, the unit cost you actually paid your supplier, and your stock levels through the period so you can average them. Shopify's inventory reports include a month-end inventory snapshot, which is the natural source for that averaging, and if you raise purchase orders in Shopify the line-item costs and any cost adjustment recorded on receipt are the most reliable record of what you paid. Gross margin is net sales minus cost of goods sold for the same period, not a margin percentage.
STOCKCUE
The denominator in GMROI is how much stock you decided to hold. StockCue forecasts demand per SKU from your own sales history and sizes each reorder against it, on every plan including Free.
Install StockCue on Shopify →