Inventory Fundamentals

Economic Order Quantity (EOQ): The Formula That Sets Your Order Size

7 min readBy Inventoros Team
Economic Order Quantity (EOQ): The Formula That Sets Your Order Size

Economic order quantity (EOQ) answers one question: how many units should you buy per order so your total inventory cost is as low as it can go? Order too much and you tie up cash and shelf space. Order too little and you pay to place orders again and again. EOQ is the math that finds the point where those two costs cancel out.

It's a 111-year-old formula (Ford Whitman Harris published it in 1913), and it still holds up because the trade-off it describes never went away. If you carry physical stock, you're paying both to order and to hold, whether you've named those costs or not.

The EOQ formula

EOQ balances two opposing costs. Every time you place an order you incur a fixed ordering cost (labor to raise the PO, receiving, inbound freight, inspection). Every unit you keep on the shelf incurs a holding cost (capital tied up, storage, insurance, shrinkage, obsolescence). Order in big batches and you order rarely but hold a lot. Order in small batches and you hold little but order constantly.

The formula that minimizes the sum of both:

EOQ = sqrt( (2 * D * S) / H )
  • D = annual demand in units
  • S = ordering cost per order (a flat cost, not per unit)
  • H = holding cost per unit per year

That's it. Three inputs. The square root is what makes doubling your demand grow the order quantity by only about 41%, not 100%, which surprises people the first time.

A worked example

Say you sell a single SKU with steady demand.

  • Annual demand D = 12,000 units
  • Ordering cost S = $50 per order
  • Holding cost H = $3 per unit per year

Plug it in:

EOQ = sqrt( (2 * 12,000 * 50) / 3 )
    = sqrt( 1,200,000 / 3 )
    = sqrt( 400,000 )
    = 632 units

So you order about 632 units at a time. That means:

  • Orders per year = 12,000 / 632 = about 19 orders
  • Time between orders = 365 / 19 = about every 19 days
  • Annual ordering cost = 19 x $50 = about $949
  • Annual holding cost = (632 / 2) x $3 = about $949

Notice the two costs are equal at the EOQ. That's not a coincidence, it's the defining property. The minimum total cost always lands where ordering cost meets holding cost.

Why 632 wins

The easiest way to trust the formula is to test order sizes on either side of it and watch total cost rise. Same numbers as above:

Order size (Q) Orders/year Ordering cost Holding cost Total annual cost
200 (order often) 60 $3,000 $300 $3,300
632 (EOQ) 19 $949 $949 $1,897
2,000 (bulk buy) 6 $300 $3,000 $3,300

Ordering in small 200-unit lots keeps holding cost tiny but you're placing 60 orders a year, so ordering cost balloons. Buying 2,000 at a time flips the problem: you barely order, but you're sitting on inventory for months. Both extremes cost you $3,300. The EOQ cuts that to $1,897, a 43% saving, just by picking the right batch size.

One more useful property: the total-cost curve near EOQ is flat. Order 550 or 720 instead of 632 and your cost barely moves. So round to something practical (a pallet quantity, a case pack, a supplier minimum) without guilt. EOQ gives you the target, not a number you have to hit to the unit.

EOQ tells you how much, not when

A common mix-up: EOQ is a quantity, not a schedule. It says how many to buy per order. It says nothing about when to fire the order. That's the reorder point's job:

Reorder point = (average daily demand * lead time in days) + safety stock

With demand of 12,000 units a year, you're selling about 33 a day. If your supplier's lead time is 10 days and you keep 100 units of safety stock, you reorder when stock hits (33 x 10) + 100 = 430 units. When you hit 430, you place an order for your EOQ of 632. The two work as a pair: the reorder point triggers, the EOQ sizes.

Where EOQ breaks down

EOQ is a model, and every model makes assumptions. Know them before you bet a purchasing budget on it.

  • Demand is assumed constant. If you sell 3x more in December, a single annual EOQ hides that. Segment seasonal items or recompute per period.
  • Costs are assumed known and stable. Most teams have never measured true ordering cost or true holding cost, so they guess. A rough number is fine (EOQ is forgiving because the curve is flat), but garbage inputs still bias the output.
  • No quantity discounts. Plain EOQ ignores price breaks. If a supplier knocks 5% off at 1,000 units, you compare the EOQ total against the discount-tier total and take whichever is cheaper. That's the "EOQ with price breaks" variant, and the discount often wins.
  • No supplier minimums. If the MOQ is 1,000 and your EOQ is 632, the MOQ decides. EOQ still tells you whether that MOQ is quietly costing you.
  • One SKU at a time. EOQ optimizes each item in isolation. It won't combine orders to hit a free-shipping threshold or fill a container. Treat it as an anchor, then adjust for the real constraints.

None of this makes EOQ useless. It makes it a starting number you adjust, which is exactly how sharp buyers use it.

How to run this on your own stock

  1. Pull 12 months of sales per SKU to get annual demand (D).
  2. Estimate ordering cost (S): total annual purchasing-team cost plus inbound handling, divided by number of orders placed.
  3. Estimate holding cost (H): typically 15% to 30% of unit cost per year once you add capital, storage, and shrinkage.
  4. Run the formula per SKU. Start with your top 20 items by value, not all 5,000.
  5. Compare the EOQ total against any discount tiers and supplier MOQs, then set your final order quantity.
  6. Pair it with a reorder point so the system knows when to trigger.

That last part is where a real inventory system earns its keep. Inventoros tracks per-SKU demand, holding cost fields, and multi-location stock out of the box, and it's free, open source, and self-hosted, so your purchasing data stays on your own server. You can compute EOQ and reorder points from the sales history it already stores, then automate the reorder triggers through the REST and GraphQL API. The documentation walks through stock fields and webhooks if you want to script the whole loop.

FAQ

What is a good EOQ number? There's no universal "good" EOQ, it's specific to each item's demand and cost structure. A good EOQ is simply the one that minimizes total cost for that SKU. The better check is comparing your current order size to the EOQ: if you're ordering far above or below it, you're leaving money on the table.

What's the difference between EOQ and reorder point? EOQ is how much to order. Reorder point is when to order. EOQ sizes the batch to balance ordering and holding cost. The reorder point watches your stock level and fires the order when it drops low enough to cover demand during lead time. You need both.

Does EOQ work with quantity discounts? Not directly. Standard EOQ assumes a fixed unit price. When suppliers offer price breaks, you calculate the EOQ, then compare its total cost against the total cost at each discount quantity, including the lower unit price and higher holding cost. Pick the cheapest. The discount tier often beats the plain EOQ.

How often should I recalculate EOQ? Recompute when your inputs move meaningfully: a demand shift of more than 20%, a new supplier cost, or a change in storage rates. For stable items, quarterly is plenty. For seasonal or fast-moving SKUs, recalculate each planning period so a single annual average doesn't hide the swings.