GMROI (Gross Margin Return on Inventory): The Formula, a Worked Example, and Good Benchmarks

GMROI (gross margin return on inventory) answers one blunt question: for every dollar you have tied up in stock, how many margin dollars does it earn back? It's the single number that tells you whether a product is pulling its weight or just squatting on your cash. Most operators track margin and track turnover separately, then miss the products that look fine on both but quietly lose money together.
Here's the formula, a worked example you can copy, how GMROI compares to the metrics it gets confused with, and what a healthy number actually looks like.
What GMROI actually measures
GMROI ties two things together that people usually look at in isolation: how much margin a product makes, and how fast the cash you spent on it comes back.
A product can have a fat 60% margin and still be a poor investment if it sits on the shelf for a year. Another product with a thin 20% margin can be a cash machine if it turns over twelve times. Gross margin alone doesn't see that. Turnover alone doesn't either. GMROI does, because it divides the margin you earned by the money you had parked to earn it.
That's why it's the number to lean on when you're deciding what to reorder, what to discount, and what to stop carrying.
The GMROI formula
Here it is:
GMROI = Annual gross margin dollars / Average inventory cost
Two inputs:
- Annual gross margin dollars. Your revenue for the product minus its cost of goods sold, over a year.
- Average inventory cost. The average value of that product's stock, valued at what you paid for it (cost, not retail), across the same period.
A GMROI of 2.0 means every dollar of inventory returned two dollars of gross margin over the year. A GMROI of 1.0 means you earned back exactly what you had tied up. Below 1.0, the product is generating less margin than the cash it's holding hostage.
The two levers
There's a useful way to rewrite the formula that shows what actually moves it:
GMROI = gross margin % x (annual sales / average inventory at cost)
The second term is a turnover measure. So GMROI goes up when either lever moves: you widen the margin, or you turn the stock faster. That's the whole point. You don't need a huge margin if you turn quickly, and you don't need blazing turnover if the margin is rich. You need the product of the two to clear your bar.
A worked example
Say you sell a mid-range office chair.
- Over the year you sell $120,000 of them.
- Your cost of goods sold on that is $78,000, so gross margin is $42,000 (a 35% margin).
- On average you hold $21,000 of these chairs in stock, valued at cost.
Plug it in:
GMROI = 42,000 / 21,000
GMROI = 2.0
So this chair returns $2.00 of gross margin for every $1.00 you keep invested in it. That's a solid product.
Now compare it to a premium standing desk that looks better on a margin report:
- Sells $90,000 a year.
- COGS of $45,000, so gross margin is $45,000 (a 50% margin, much prettier than the chair).
- But it's bulky and slow, so you carry $60,000 of it on average.
GMROI = 45,000 / 60,000
GMROI = 0.75
The desk has a higher margin percentage and higher total margin dollars, yet its GMROI is 0.75. It earns 75 cents for every dollar locked up in it. The plain-looking chair is nearly three times the investment. Without GMROI, the desk looks like your star. With it, you can see the chair is quietly funding the business while the desk drags.
GMROI vs the metrics it gets confused with
| Metric | What it tells you | What it misses |
|---|---|---|
| Gross margin % | How profitable each sale is | Ignores how much cash is tied up and how long |
| Inventory turnover | How fast stock sells through | Ignores whether the margin is worth it |
| GMROI | Margin earned per dollar invested in stock | Nothing on its own, but needs clean cost data |
Gross margin and turnover are both inputs to the real answer. GMROI is the answer. Track all three if you like, but when you have to make a call, GMROI is the one that reflects both profit and cash efficiency at the same time.
How to calculate GMROI across your catalog
- Pick a period. A rolling 12 months is standard and smooths out seasonality.
- Pull gross margin dollars per product. Revenue minus COGS for each SKU. Not margin percentage, actual dollars.
- Get average inventory at cost. Average your on-hand value across the period. Month-end snapshots averaged together beat a single point-in-time reading.
- Divide. Margin dollars over average inventory cost, per SKU.
- Sort and act. Rank your catalog by GMROI. The bottom of the list is where cash goes to die. The top is what you protect and reorder first.
- Repeat per location. Stock spread across warehouses can have very different GMROI in each place. A slow mover in one region can be a fast mover in another.
The math is trivial. Getting clean, current cost and inventory data per SKU per location is the actual work, and it's where a spreadsheet falls apart once you pass a few dozen products.
What good looks like
There's no universal target, because a grocer and a jeweler live in completely different worlds. But some honest reference points:
- Below 1.0: the product earns less margin than the cash it ties up. Investigate it. Discount, discontinue, or cut the quantity you carry.
- Around 1.0 to 2.0: paying its way, room to improve.
- Above 3.0: strong. Many general retailers use roughly
3.2as a rough health line, meaning $3.20 of margin per inventory dollar.
Compare a SKU to your own catalog average and to other SKUs in the same category, not to some industry number you found online. GMROI is most useful as a relative ranking inside your own business.
Where Inventoros fits
Calculating GMROI by hand once is easy. Doing it continuously, per SKU, per location, with live cost and stock data, is not. Inventoros tracks stock and cost across multiple locations out of the box, and because it exposes a full REST and GraphQL API, you can pull margin and average-inventory figures straight into your own GMROI reports instead of exporting to a spreadsheet every month. It's open source and self-hosted, so the data stays on your infrastructure and there's no per-seat pricing to work around. The documentation covers install on cPanel, a VPS, or Docker.
FAQ
Should inventory be valued at cost or retail in the GMROI formula? At cost. GMROI measures the return on the money you actually spent buying the stock, so both the average inventory figure and the COGS side of your margin should be at cost. Mixing retail value into the denominator is the most common way people get a wrong, flattering number.
What's the difference between GMROI and inventory turnover? Turnover tells you how many times you sold through your average stock. GMROI tells you how much gross margin that stock earned per dollar invested. Turnover ignores whether the sales were profitable. GMROI folds margin and turnover into one figure, which is why it's better for deciding what to reorder or cut.
Can GMROI be below 1.0, and is that always bad? Yes, it can, and it usually signals a problem: the product is generating less margin than the cash sitting in it. It's not automatically a death sentence. A brand-new product still building sales, or a strategic item that drives other purchases, can justify a low GMROI temporarily. But if it stays under 1.0 without a reason, it's a candidate to discount or drop.
How often should I calculate GMROI? Monthly is plenty for most catalogs, using a rolling 12-month window for the margin and average-inventory inputs. Recalculate ahead of seasonal buying decisions so you're reordering based on what actually earns, not on gut feel.