How to Calculate Economic Order Quantity (EOQ) for E-commerce

The Problem with Ordering "By Feel"
Most e-commerce sellers order inventory one of two ways: they reorder whatever they ordered last time, or they eyeball current stock and guess. Both approaches leave money on the table -- ordering too much ties up cash and warehouse space, ordering too little means higher per-unit shipping and more frequent reorders.
Economic Order Quantity (EOQ) gives you a formula to find the sweet spot. But the textbook version was designed for factories in the 1910s, not for Shopify and Amazon sellers dealing with casepacks, MOQs, and variable demand. This guide covers the classic formula, where it breaks, and how to adapt it.
The Classic EOQ Formula
EOQ balances two costs that move in opposite directions: ordering costs (go down with larger, less frequent orders) and holding costs (go up with more inventory on hand).
EOQ = sqrt((2 * D * S) / H)
Where D = annual demand in units, S = fixed cost per order, and H = holding cost per unit per year.
What Goes Into Each Variable
Ordering cost (S) -- the fixed cost each time you place a PO:
| Cost Component | Example |
|---|---|
| Staff time to create PO | $15-50 per order |
| Shipping/freight flat fees | $150-500 per shipment |
| Customs brokerage | $75-200 per entry |
| Quality inspection + receiving | $75-225 per batch |
Domestic supplier S might be $50-100. Overseas supplier with freight forwarding and customs: $400-600. The difference matters. A lot.
Holding cost (H) -- the annual cost of storing one unit. A common shortcut: H = 20-30% of unit cost per year, covering warehouse rent, insurance, capital cost, shrinkage, and FBA storage fees.
Worked Example: Domestic Supplier
You sell a phone case on Shopify. Domestic supplier, simple logistics.
| Variable | Value |
|---|---|
| Annual demand (D) | 3,600 units (300/month) |
| Ordering cost (S) | $75 per order |
| Holding cost (H) | 25% of $4.00 = $1.00/unit/year |
EOQ = sqrt((2 * 3,600 * 75) / 1.00) = sqrt(540,000) = 735 units
That means roughly 5 orders per year. Compare the total cost across different strategies:
| Order Quantity | Orders/Year | Ordering Cost | Holding Cost | Total Cost |
|---|---|---|---|---|
| 300 (monthly) | 12 | $900 | $150 | $1,050 |
| 735 (EOQ) | 4.9 | $367 | $368 | $735 |
| 1,800 (biannual) | 2 | $150 | $900 | $1,050 |
EOQ saves $315/year on this single SKU. Across 200 SKUs, that is $63,000 left on the table if you are ordering monthly or biannually instead.
Worked Example: Overseas Supplier
You sell a yoga mat on Amazon FBA. Manufactured in China, shipped by sea.
| Variable | Value |
|---|---|
| Annual demand (D) | 12,000 units (1,000/month) |
| Ordering cost (S) | $450 per order |
| Holding cost (H) | 30% of $8.50 = $2.55/unit/year |
EOQ = sqrt((2 * 12,000 * 450) / 2.55) = sqrt(4,235,294) = 2,058 units
About 6 orders per year, or one shipment every 2 months. That lines up with how most overseas sellers actually operate -- they just never did the math to confirm it.
Why Classic EOQ Breaks for E-commerce
MOQs Override the Formula
Your supplier requires 3,000 minimum. EOQ says 2,058. You must order the MOQ and absorb the higher holding cost. Compare: cost at EOQ is $5,246/year; cost at MOQ 3,000 is $5,625/year -- a $379 annual penalty. That gap is acceptable. A 5,000-unit MOQ would change the math entirely.
Casepacks and Order Multiples
Your supplier ships in cases of 24. EOQ says 735, so you round to 720 or 744. The cost difference is negligible, but you still need to round. See Casepack Requirements and MOQ for how these constraints stack in ugly ways.
Variable Demand
EOQ assumes constant demand. A product selling 300 units in January might sell 800 in November. Use average demand for the EOQ baseline, but adjust order timing with your demand forecast. I treat EOQ as the quantity guide and the forecast as the timing guide.
Quantity Discounts
| Quantity | Unit Price |
|---|---|
| 1-499 | $8.50 |
| 500-1,999 | $7.75 |
| 2,000+ | $7.00 |
Classic EOQ ignores discounts. Calculate total cost (ordering + holding + purchase) at each price break and at EOQ, then pick the lowest. Sometimes ordering 2,000 units at $7.00 beats ordering 735 at $8.50, even with the extra holding cost.
Multiple SKUs, Shared Freight
If you buy 10 SKUs from one supplier in a single shipment, ordering cost S is shared. Use joint ordering: calculate a combined order cycle for all SKUs from one supplier, then allocate quantities by each SKU's demand.
A Practical EOQ Workflow
- Calculate raw EOQ per SKU using the formula
- Apply constraints -- round to casepack multiples, enforce MOQs, check price breaks
- Group by supplier -- combine SKUs shipping together
- Validate against working capital -- can you fund that much inventory?
- Cross-check with reorder points -- make sure EOQ covers enough days of supply given your lead time
- Add safety stock -- EOQ tells you how much; the reorder point tells you when
When EOQ Is Not Worth Calculating
Not every SKU needs this analysis. Skip it when:
- MOQ > EOQ: The supplier constraint already decides your quantity
- One-time or seasonal buys: No recurring cycle to think about
- Very low volume SKUs: Selling 20 units/year makes the cost difference trivial
- Dropshipped products: Zero holding cost means the formula does not apply
Focus EOQ analysis on A-items and B-items with meaningful order volumes. For everything else, your time is better spent elsewhere.
How ReplenishRadar Handles Order Quantities
We do not calculate a static EOQ and call it done. That would ignore half of what makes e-commerce ordering complicated.
ReplenishRadar generates suggested order quantities using rolling demand forecasts instead of the constant-demand assumption. The system applies supplier constraints -- MOQs, casepacks, order multiples -- automatically to every suggested PO. When you buy multiple SKUs from one supplier, it groups them into a single shipment and accounts for shared freight costs. And if a suggested order would blow past your budget, working capital caps flag it before you commit.
You configure your supplier constraints once. After that, every suggested PO respects them. No manual rounding, no spreadsheet formulas, no hoping you remembered the casepack size.
EOQ gives you a rational starting point. The real work is adapting it for MOQs, casepacks, price breaks, variable demand, and cash constraints. The sellers who get ordering right are not the ones with the fanciest formula -- they are the ones who account for every real-world constraint, every time.
Start your free 14-day trial ->
Related Reading:
Frequently Asked Questions
Ready to prevent stockouts?
Related Posts
Dead Stock: How to Identify, Prevent, and Liquidate Unsold Inventory
Dead stock ties up cash and warehouse space. Learn how to identify it, prevent it from accumulating, and liquidate what you already have.
Consolidating Multiple Amazon Accounts Into One View
How to unify inventory, demand data, and purchasing across multiple Amazon seller accounts -- and what you lose by keeping them separate.
Managing Inventory Across Multiple Shopify Stores
The operational reality of running 2+ Shopify stores from one warehouse. Workflows, team coordination, and what breaks at scale.