ClearStock is live on the Shopify App Store.Install free →

← All blogs

Guides7 min read

GMROI: the formula that tells you if your inventory is actually paying you

GMROI shows how many gross margin dollars each inventory dollar earns you. The formula, a worked example on two product lines, and what moves the number.

InventoryX is in development and not available today. ClearStock is the live Shopify app.

GMROI — gross margin return on inventory investment — is the number of gross margin dollars you earn for every dollar you have tied up in inventory: GMROI = gross margin dollars ÷ average inventory at cost. A GMROI of 3.0 means each inventory dollar returned $3 of gross margin over the period. Margin percentage alone can't tell you that, because a fat margin on stock that sits is worse than a thin margin on stock that flies.

GMROI in retail exists because the two halves of your P&L fight each other. High margin usually means slow turn. High turn usually means thin margin. GMROI is the metric that makes them compete on one scoreboard.

The formula, precisely

  • Gross margin dollars = net sales − cost of goods sold, for the period you're measuring.
  • Average inventory at cost = the average value of your inventory (at what you paid, not retail) across the same period.

For an annual calculation, average inventory is best taken as the average of monthly (or at least quarterly) snapshots, not just (beginning + ending) ÷ 2 — a single BOP/EOY average hides seasonal swings. Note what's not in the formula: freight-in, storage, labor. GMROI as conventionally computed uses COGS-based inventory value and gross margin only; overhead lives elsewhere. If you want a fuller cost picture, that's carrying-cost territory (see inventory carrying cost).

Worked example: why turnover beats margin

You run two lines out of one Shopify store. Here's a full year:

Soy candles — high margin, slow mover:

  • Retail sales: $60,000
  • Gross margin: 55% → $60,000 × 0.55 = $33,000 margin
  • COGS: $60,000 × 0.45 = $27,000
  • Average inventory at cost: $15,000
  • Inventory turns at cost: 27,000 ÷ 15,000 = 1.8 turns/year

GMROI = 33,000 ÷ 15,000 = 2.2

Ceramic mugs — thin margin, fast mover:

  • Retail sales: $48,000
  • Gross margin: 40% → $19,200 margin
  • COGS: $48,000 × 0.60 = $28,800
  • Average inventory at cost: $6,000
  • Turns at cost: 28,800 ÷ 6,000 = 4.8 turns/year

GMROI = 19,200 ÷ 6,000 = 3.2

The candles are your "better" product by margin and they lose on GMROI. Every dollar sitting in candle inventory returns $2.20 a year; every dollar in mug inventory returns $3.20. If you had $10,000 of buying budget to allocate between them at these economics, the mugs earn $32,000 of annual gross margin capacity against the candles' $22,000 — a $10,000 difference on the same capital. This is the whole argument for the gmroi calculation: it converts "I like this product" into "this product earns X per dollar invested."

What moves GMROI

GMROI = margin rate × inventory turn at cost. Algebraically: (gross margin ÷ sales) × (COGS ÷ avg inventory). So there are exactly three levers:

Lever Action What it does to GMROI
Margin up Raise prices, renegotiate supplier cost, cut discounting Raises GMROI on the same turn rate
Turn up Buy less per order, reorder more often, cut slow SKUs Raises GMROI on the same margin
Both Usually the real answer — a small price move plus smaller, more frequent buys compounds Multiplies

Two practical notes on the levers:

  • Turn is usually the bigger lever for spreadsheet-run stores, because the typical failure mode is over-buying, not mispricing. Cutting average inventory from $15,000 to $12,000 on the candle line moves GMROI from 2.2 to 2.75 with zero customer-facing changes.
  • Discounting is the silent killer. A 20% off event can cut your margin rate from 55% to 44% — that flows straight into GMROI unless the promotion also speeds the turn enough to pay for itself. Sell-through rate tells you whether it did; the metric and its reading are in our sell-through guide.

Computing GMROI from Shopify exports

Shopify doesn't have a native GMROI report, but every input is exportable:

  1. Cost per item — fill this in on every variant; it's the "at cost" half of the whole exercise (the product CSV has a Cost per item column, per the Shopify Help Center, accessed October 2026). If your costs are stale or missing, your GMROI is fiction — the fix starts with getting inventory cost right in Shopify.
  2. Gross margin dollars — Shopify's native profit reports use cost per item to compute margin per product; export sales and margin by product for the period.
  3. Average inventory at cost — Shopify shows on-hand quantities but not a dated inventory valuation history, so snapshot it yourself: export on-hand quantities (and cost per item) on the 1st of each month, multiply out, average the twelve numbers.

Then one spreadsheet: annual gross margin per SKU ÷ average inventory value per SKU. Do your top 20 SKUs first; a full catalog GMROI on 2,000 SKUs is an afternoon and honestly a category-level number is more actionable anyway.

Honest limits

  • GMROI is backward-looking. It scores the inventory you had, not the inventory decision you're about to make. Use it to set buying budgets and kill lists, not as a reorder trigger — reorder timing math is different (it's covered alongside the other metrics in our KPI set for Shopify stores).
  • It ignores carrying cost. Two lines at the same GMROI aren't equal if one occupies half your shelving and demands more handling. GMROI doesn't know.
  • Seasonality distorts it. A holiday line bought in September shows terrible GMROI through October and great GMROI by January. Measure seasonal lines on a season window, or you'll kill products that simply haven't sold yet.
  • It's a category metric more than a SKU metric. Per-SKU GMROI gets noisy fast; per-category or per-vendor it starts telling you where to put next quarter's cash.

Common questions

What is a good GMROI? There's no single good number, and any figure quoted online without context is an assumption, not data. The honest method: compute GMROI by category for your own last 12 months, rank your categories, and treat your own top quartile as the target. A "good" GMROI depends on your margins, your rent, and your capital cost — set your baseline from your own data before chasing an industry number.

How do you calculate GMROI in Excel? Three inputs: annual gross margin per SKU or category, monthly inventory values at cost averaged across the year. One formula: =MarginDollars/AvgInventory. Export cost per item and on-hand quantities from Shopify monthly for the second input, and margin by product from the profit reports for the first.

Is GMROI the same as inventory turnover? No. Turnover counts units of cost flowing through (COGS ÷ average inventory); GMROI counts the margin those dollars earned (gross margin ÷ average inventory). A store can turn fast at zero margin and have a GMROI near zero, or turn slowly at high margin and still do fine — GMROI captures what turnover misses.

Can GMROI be negative or above 10? GMROI goes negative when you sell below cost. Very high numbers (say above 8–10 on a full-year, full-catalog basis) usually mean under-buying — you're running so lean you're losing sales you could have made, which shows up as lost revenue from going out of stock rather than as a bad GMROI. Suspiciously high GMROI is a signal to check availability, not celebrate.

Should I calculate GMROI per SKU or per category? Start per category. Per-SKU GMROI on anything slower than a monthly mover is mostly noise, and per-SKU average inventory is only reliable if you've been snapshotting monthly for a year. Category-level GMROI is stable enough to make buying-budget decisions, which is what the metric is for.

Next step

Pull last year's sales by category, fill in cost per item where it's blank, and compute GMROI for your three largest categories using the candle-vs-mug method above. The lowest one is where your next buying reduction comes from — and the metrics that round out the picture live in our Shopify inventory KPI guide.