What is the economic order quantity formula?
EOQ is the order size that makes the yearly cost of ordering equal to the yearly cost of holding stock, which is where their total is lowest. Order more often and you pay for more POs. Order bigger and you pay to hold more stock.
EOQ = √(2 × D × S ÷ H)
| Term | Meaning | Where to get it |
|---|---|---|
| D | Annual usage in units, net of returns | 12 months of issue and return transactions |
| S | Cost to place and receive one order | Your own estimate of buyer, approval, receipting, invoice matching and freight booking time and cost |
| C | Unit cost | Contract rate or last price paid |
| i | Holding cost rate per year | Your finance team's figure for capital, storage, insurance and obsolescence |
| H | Holding cost per unit per year = i × C | Calculated |
Total yearly cost of an order size Q = (D ÷ Q) × S + (Q ÷ 2) × H + D × C. The last term is the purchase cost. It does not change with Q unless there is a price break.
Worked example: what is the EOQ for a fast moving filter?
Example with made-up figures: a hydraulic filter element.
- D = 1,200 units a year (net of returns).
- S = $120 per order.
- C = $85 per unit, i = 25% a year, so H = 0.25 × $85 = $21.25 per unit per year.
- 2 × D × S = 2 × 1,200 × 120 = 288,000.
- 288,000 ÷ 21.25 = 13,552.9.
- EOQ = √13,552.9 = 116.4, so about 116 units, or roughly 10 orders a year.
Here is what different order sizes cost each year, before purchase cost:
| Order size | Orders a year | Ordering cost | Holding cost | Total |
|---|---|---|---|---|
| 25 | 48 | $5,760 | $266 | $6,026 |
| 50 | 24 | $2,880 | $531 | $3,411 |
| 100 | 12 | $1,440 | $1,063 | $2,503 |
| 116 (EOQ) | 10.3 | $1,241 | $1,233 | $2,474 |
| 300 | 4 | $480 | $3,188 | $3,668 |
| 600 | 2 | $240 | $6,375 | $6,615 |
At the EOQ, ordering and holding cost are almost equal. That is the check that you have done it right. If a site is ordering this filter 25 at a time, it is spending about $3,550 a year more than it needs to on this one line, mostly in PO handling.
How accurate do the EOQ inputs need to be?
Not very. The total cost curve is flat near the EOQ, so being 20% off costs only a few percent.
| Order size | Yearly cost | Versus EOQ |
|---|---|---|
| 93 (20% under) | $2,537 | +2.5% |
| 116 (EOQ) | $2,474 | base |
| 120 (rounded to a pack of 24) | $2,475 | +$1 |
| 140 (20% over) | $2,516 | +1.7% |
That is good news. A rough but honest order cost and holding rate is enough. Round the EOQ up to the pack size or minimum order quantity without worrying. What matters is the order of magnitude: ordering 25 when the answer is 116 is the real problem.
How do price breaks change the economic order quantity?
When a supplier offers a lower unit price above a certain quantity, calculate total yearly cost including purchase cost at each price level, then pick the lowest.
Example: the same filter drops from $85 to $80 for orders of 250 or more.
- EOQ at $80: H = 0.25 × 80 = $20, EOQ = √(288,000 ÷ 20) = 120. That is below 250, so at $80 you must order 250.
- Cost at 250: ordering (1,200 ÷ 250) × 120 = $576, holding (250 ÷ 2) × 20 = $2,500, purchase 1,200 × 80 = $96,000. Total $99,076.
- Cost at 116 and $85: ordering $1,241, holding $1,233, purchase $102,000. Total $104,474.
- Taking the price break saves about $5,398 a year.
Before you take it, check three things: the shelf life of the part, whether you have the space, and whether the $80 is actually what you will be charged. A price break is only worth it if the invoice matches. See PO contract rate checking.
What does it really cost to place an order on a mine site?
More than most people assume, and it changes EOQ a lot. Build S from the steps one order actually takes at your site.
- Raising the requisition and getting it approved.
- Buyer time to create the PO and send it.
- Expediting and chasing.
- Freight booking, and the freight itself if it is charged per delivery.
- Receiving, inspection and put away.
- Invoice matching and resolving any price or quantity difference.
For a remote site where each delivery carries its own freight charge, S might be several times the figure for a site near Perth. Example: if S rises from $120 to $450 for the same filter, EOQ rises from 116 to √(2 × 1,200 × 450 ÷ 21.25) = 225. Same part, same usage, nearly double the order size. Work out S separately for each site.
When should you not use EOQ for mining spares?
EOQ assumes steady, predictable usage. Many mining spares do not have it. Use EOQ for consumables and steady wear parts, and something else for the rest.
- Low usage, high value parts. A $16,000 component used twice a year gives an EOQ of √(2 × 2 × 120 ÷ 4,000) = 0.35. Order 1 at a time.
- Lumpy demand. Parts issued rarely and several at a time break the steady usage assumption. Order quantity should at least cover one typical issue.
- Critical and insurance spares. Held on risk, not usage. EOQ does not apply. See critical and rotable spares.
- Shelf life items. Hoses, seals, belts and some lubricants age on the shelf. Cap the order at what you use before it expires.
- Contracted call offs. If a supply contract already fixes delivery frequency, EOQ is a check on the contract, not an ordering rule.
- Returns and transfers in D. Gross issues inflate D. Net returns and ignore transfers between warehouses, or the EOQ will be too high.
EOQ also says nothing about when to order. That is the reorder point, covered in safety stock calculation and how to set min max levels. EOQ usually becomes the gap between min and max.
How do you calculate EOQ in Excel from an ERP export?
One row per stock code, one formula for EOQ, then round to the pack size and minimum order quantity.
- Export 12 months of issues and returns. Net them to get annual usage D per stock code in column B.
- Add unit cost in column C, ideally the contract rate.
- Put your order cost S in cell K1 and holding rate i in K2, or one per site if freight differs.
- Holding cost in column D:
=$K$2*C2. - Raw EOQ in column E:
=IFERROR(SQRT(2*B2*$K$1/D2), 0). - Pack size in F and minimum order quantity in G from the supplier.
- Order quantity in column H:
=MAX(G2, CEILING.MATH(E2, F2), 1). - Flag rows where E2 is under 1 or where usage came from fewer than 4 issue events. Those should not use EOQ.
How does Source Digital automate order quantities for mining spares?
Source Digital builds order quantity, reorder point and max calculations into a stock level engine inside your own data platform. Each line is classed first, so EOQ is only applied where it belongs.
- Uses your contract prices: unit cost comes from a contract price book built from your own contract history. See the contract price book case study.
- Matches your experts: at an international tier 1 mining operator, the stock level engine matched the site inventory expert's spreadsheet 99.8% of the time.
- Deterministic maths, person approves: formulas calculate the numbers, the AI explains them, and a person signs off every change.
Getting started is a free 15 minute call with Tristan, or a quick enquiry. No obligation and no pitch. He asks what you run and what is costing you, then tells you straight whether there is something worth fixing. Work is charged at a consulting day rate. The price depends on your sites, systems and data, so you talk first, then Tristan sets out what he would build, how many days it takes and what it costs. See how the stock level engine works on the mining spares optimisation page.

