Economic Order Quantity (EOQ) is the order size that minimizes the joint cost of placing orders and carrying inventory. It is one of the foundational results of operations research, formalized by Ford W. Harris in 1913 and still widely taught in operations and supply-chain courses.
Quick answers
What is the Economic Order Quantity? EOQ is the order quantity that minimizes the total cost of ordering plus the cost of holding inventory. Order in smaller batches and you pay more in ordering costs (more POs, more receiving, more processing). Order in larger batches and you pay more in carrying costs (capital tied up, warehouse space, spoilage). EOQ is the mathematical balance point.
What is the EOQ formula? EOQ = √(2DS/H) where D is annual demand in units, S is the cost per order (admin + receiving + payment processing), and H is the cost to carry one unit in inventory for a year (unit acquisition cost multiplied by an annual carrying rate, plus any separately measured annual per-unit holding costs). The square root means EOQ scales sub-linearly with demand — doubling demand only increases the optimal order size by ~41%.
How do you calculate EOQ quickly? Multiply 2 × annual demand × order cost, divide by annual holding cost per unit, then take the square root.
EOQ = sqrt((2 × D × S) / H)
| Symbol | Meaning | Practical source |
|---|---|---|
| D | Annual demand in units | POS sales, ecommerce orders, production usage, or a rolling consumption forecast |
| S | Cost to place one order | Buyer time, supplier follow-up, receiving labor, AP processing, payment fees |
| H | Annual holding cost per unit | Capital cost, storage, shrinkage, spoilage, insurance, and obsolescence |
For example, if annual demand is 12,000 units, ordering cost is $25, and holding cost is $0.60 per unit per year, EOQ is sqrt((2 × 12,000 × 25) / 0.60) = 1,000 units.
When does EOQ apply? Classical EOQ assumes known constant demand, replenishment arriving as a complete batch, no shortages, fixed ordering cost and a constant annual holding cost per unit. Unit purchase price is constant in the basic model. A known fixed lead time determines when to order, while the formula sizes the batch. Check feasible pack quantities, supplier minimums and other constraints before using the result.
EOQ vs reorder point — what's the difference? EOQ tells you how much to order. Reorder point tells you when to order. They're complementary: under a continuous-review (Q, R) policy, an order of size Q is triggered when the relevant inventory position reaches R. EOQ can inform Q; shelf stock alone can miss orders already due.
Should you buy software just to calculate EOQ? Usually no. EOQ is one input. A serious replenishment system also needs live sales data, supplier lead times, pack sizes, minimum order quantities, perishability, safety stock, and receiving history. If the software stops at EOQ, it will not fix the ordering workflow. If the problem is turning POS sales and supplier constraints into reviewed purchase quantities, see inventory management software.
Copy-paste EOQ formula and source
Use this version when you need the formula directly:
EOQ = sqrt((2 * D * S) / H)
Where:
D= annual demand in unitsS= ordering cost per purchase orderH= annual holding cost per unit
The formula is often written as √(2DS/H) or sqrt(2DS/H). Those are the same expression. The model is commonly traced to Ford W. Harris's 1913 lot-size paper, "How Many Parts to Make at Once." INFORMS' Operations Research later published a historical article and reprint: Ford Whitman Harris and the Economic Order Quantity Model.
The formula, derived
The annual ordering-plus-cycle-stock holding cost has two parts. Constant purchase cost is omitted because it does not change the minimizing quantity in this basic model:
Total cost = (D / Q) × S + (Q / 2) × H
where Q is your order quantity. The first term (D/Q × S) is the annual ordering cost — placing D/Q orders per year at S each. The second term (Q/2 × H) is the annual carrying cost — averaging Q/2 units in inventory at H per unit per year.
Take the derivative with respect to Q and set to zero:
d(Total cost)/dQ = -DS/Q² + H/2 = 0
H/2 = DS/Q²
Q² = 2DS/H
Q = √(2DS/H)
That's EOQ.
A worked example
In a fictional example, a retailer sells 12,000 units of a SKU per year (D = 12,000). The cost to place an order — combining the AP person's time, the receiving cost, and the payment processing — is $25 per PO (S = 25). The unit cost is $5, capital cost is 8% per year, storage is 4% of unit cost, spoilage is negligible — so H = $5 × 0.12 = $0.60 per unit per year.
EOQ = √(2 × 12,000 × 25 / 0.60) = √1,000,000 = 1,000 units
Under these assumptions, 1,000 units per order gives 12 orders per year: $300 annual ordering cost and $300 annual cycle-stock holding cost. An MOQ of 500 does not constrain this result. An MOQ of 2,000 does: ordering 2,000 gives $150 ordering cost plus $600 holding cost, or $750 annually. The $150 difference is a modeled relevant-cost increase, not the extra cash paid on one PO.
How to calculate EOQ in a spreadsheet
You only need three clean inputs. The hard part is not the square root; it is making sure each input reflects the business you actually run.
| Spreadsheet field | Formula or source | What to avoid |
|---|---|---|
| Annual demand | daily usage × 365 or trailing 12-month unit sales | Mixing units, cases, and packs in one column |
| Order cost | buyer time + receiving time + AP/payment cost | Treating ordering cost as zero because no one writes a check |
| Holding cost | landed unit cost × annual carry percentage | Using purchase price only and ignoring freight, shrink, decay |
| EOQ | =SQRT((2*D*S)/H) | Taking the number literally when pack size or MOQ makes it impossible |
The unit of measure has to stay consistent. If D is bottles, H must be annual holding cost per bottle, and pack rounding happens after the EOQ result. If D is cases, H must be annual holding cost per case. Many bad EOQ calculations come from mixing "we sell 12 units a day" with "the supplier sells cases of 24" in the same formula.
Once the raw EOQ is calculated, run three operational adjustments:
- Compare feasible pack multiples. If EOQ is 1,000 and cases contain 144, compare 864 and 1,008 using the cost function. Here their annual relevant costs are about $606.42 and $600.02, so 1,008 is lower under the model. Rounding up is not universally optimal.
- Apply MOQ and packs together. An MOQ of 1,200 with packs of 144 requires at least 1,296 units. Raising a rounded quantity to 1,200 would violate the pack constraint.
- Check shelf life, space and cash. A cap below the supplier minimum makes the proposed order infeasible. Negotiate, change supplier or redesign the policy instead of silently capping the quantity and assuming the supplier will accept it.
EOQ should be a decision input, not an automatic purchase instruction.
EOQ with quantity discounts
Supplier discounts complicate EOQ because a larger order can reduce unit cost enough to justify more carrying cost. The safe method is:
For an all-units quantity discount, calculate the holding cost and EOQ for each price tier. Find feasible candidates within each tier, including its qualifying boundary and applicable pack multiples. Compare annual purchase cost plus ordering and holding costs across those candidates. Incremental discounts, where only units above a threshold receive the lower price, require a different purchase-cost calculation.
The mistake is to chase the lower unit price without calculating the inventory cost. A 6% discount can be a bad deal if it forces 120 days of extra stock, ties up cash, increases shrink, or creates expiry risk. Stable demand can make the comparison easier. Perishability, uncertain demand and expiry restrictions require additional costs or constraints; the winning option depends on the actual inputs.
EOQ by operating model
EOQ behaves differently across business types:
| Business type | Where EOQ helps | Where EOQ is dangerous |
|---|---|---|
| Specialty retail | Stable replenishment SKUs, accessories, supplies | Seasonal items, trend-led products, slow-moving variants |
| Restaurants and cafes | Dry goods, packaging, disposables | Fresh produce, dairy, proteins, baked goods |
| Ecommerce brands | Core SKUs with reliable sell-through | Launch products, influencer-driven spikes, products near redesign |
| Light manufacturing | Standard components and consumables | Long-lead custom parts with supplier allocation risk |
| Regulated retail | Non-expiring accessories and stable consumables | Lot-tracked or expiry-sensitive goods where compliance state matters |
This is why EOQ belongs beside ABC analysis, coefficient of variation, decay rate, and minimum order quantity. The formula works best when the item is stable enough for the assumptions to hold.
Where EOQ falls apart in practice
The classical EOQ formula assumes constant demand and constant lead time. In real ordering workflows:
- Demand is variable. Your bestseller's weekly sales swing 20% week to week. EOQ as derived assumes σ = 0.
- Lead time is variable. Suppliers slip. EOQ doesn't model lead-time variability.
- Quantity discounts exist. Compare feasible quantities and total costs under the actual discount schedule, as described above.
- Pack sizes are fixed. You can't order 1,000 units when the case pack is 144. Compare feasible pack multiples around the model result and any minimum; always rounding up is not a general cost optimum.
- MOQs override. When the supplier minimum exceeds EOQ, you order MOQ.
- Perishability matters. EOQ ignores spoilage. An annual holding-cost estimate can include expected loss, but do not add a daily decay percentage directly to annual rates. Shelf life and time-dependent loss can require a different model. Decay rate covers this.
- Landed cost is the correct H base. EOQ's holding cost H should be calculated from landed cost per unit — purchase price plus freight, duties, insurance, and handling — not purchase price alone. Using invoice price understates carrying cost and produces an EOQ that is larger than the result using the full holding cost.
A replenishment target based on demand and an order-frequency setting is a different policy from minimizing the EOQ cost function. ABC inventory analysis identifies value concentration; it does not establish demand stability or select an optimal ordering method by itself. Review the assumptions for each item, whatever its ABC class.
Apply this to a real purchasing record
LineNow's purchasing workflow connects purchase orders, supplier replies, receiving and accounting handoff. In a demonstration, inspect the order-frequency target, supplier minimum and case-pack rounding; the current engine does not claim a classical EOQ cost optimization.
Use the result to agree the fields, decision owner and exception process. A linked purchasing record supplies evidence for this analysis; it does not by itself prove a particular dashboard, financial outcome or automatic approval policy.
When EOQ becomes a software problem
EOQ becomes commercially relevant when the team has more than one buyer, more than a handful of suppliers, or enough SKU/ingredient movement that manual order quantities start causing stockouts, waste, or excess cash tied up in inventory.
At that point, the buying question is bigger than "what is the EOQ formula?" The operator needs:
- POS or sales data to measure consumption rate
- lead-time history by supplier
- reorder points and PAR levels by item
- supplier pack sizes and MOQs
- purchase orders created from the recommendation
- supplier replies captured after the PO is sent
- receiving and accounting updated from the final order state
That is the difference between an EOQ calculator and inventory management software or procurement software that can run the order loop.
Related
- PAR level — a replenishment target with a different policy basis
- Reorder point — when to order
- Safety stock — buffer for variability
- Minimum order quantity (MOQ) — when supplier minimums override EOQ
- Inventory Management Software — POS-synced usage and reorder workflows
- Procurement Item Software — supplier packs, MOQs, and costs mapped to sellable products
- Procurement Software
- Closed-loop procurement, in plain English
- PAR Level Calculator