July 7, 2026
By 
Mike Le

How to Calculate EOQ for Your Brand

How to Calculate EOQ for Your Brand

Got the EOQ formula but not the inputs? Learn where to find annual demand, ordering cost, and holding cost in your own records, plus the pitfalls to avoid.

The EOQ formula is the easy part. Anyone can multiply three numbers and take a square root. The hard part is working out what your ordering cost actually is, and finding it somewhere other than the top of your head, which is where most brands' version of it currently lives.

To calculate EOQ for your own catalog you need three numbers from your records: annual demand from your sales history, ordering cost from what it really takes to place and receive a purchase order, and holding cost from storage, capital, and risk. Sourcing those inputs honestly matters more than the formula, and most brands get holding cost wrong.

Key takeaways

  • Your inputs already exist: all three live in systems you run, they have just never been pulled together.
  • Holding cost is the input that breaks the answer: leave out capital and you will over-order every time.
  • EOQ is a baseline, not an instruction: case packs, supplier minimums, and freight breaks all override it.
  • It fits steady movers: applying it to seasonal or new products produces a confident number built on a broken assumption.

Where do you find your EOQ inputs?

D, S, and H all live in systems you already run, which is the good news. The bad news is that none of them is sitting in a field labelled with its name, so each takes a small amount of assembly. Do that assembly once per product family rather than per SKU and the exercise stays manageable.

  • D, annual demand. where to find it: Storefront sales export, by SKU, twelve months; the mistake to avoid: Scaling a partial year that included a peak
  • S, ordering cost. where to find it: Finance and ops: admin time, freight setup, receiving labour; the mistake to avoid: Counting only freight and forgetting the labour
  • H, holding cost. where to find it: Cost of capital, storage rate, insurance, shrinkage history; the mistake to avoid: Leaving out the capital tied up, which is usually the largest part

D, from your sales export

Pull twelve months of unit sales per SKU from your storefront. Twelve is the right window because it captures a full seasonal cycle; anything shorter and you are extrapolating from a fragment. Two adjustments matter before you use the number. Strip promotional spikes that will not recur, since a Black Friday week at four times normal volume inflates the annual figure and pushes EOQ toward a batch you cannot sell through in an ordinary month. And add back demand you could not fill: weeks where the product was out of stock recorded low sales, not low demand, and using them uncorrected understates D. If you sell across channels, sum them, since EOQ is about how you buy rather than how you sell.

S, from finance and operations

Ordering cost is the fixed cost of putting one purchase order through the door, and almost nobody has it written down. Build it from four components: the time someone spends raising and approving the order, priced at their loaded hourly cost; any fixed freight or brokerage charge that does not scale with quantity; customs and documentation work; and the receiving, inspection, and put-away labour at the other end. Add them and you have S. It will probably be larger than you expected, because the labour is invisible in a way an invoice is not. An honest estimate within twenty percent is entirely good enough for this purpose.

H, as a percentage of unit cost

Holding cost is easiest to build as an annual percentage of what a unit costs you, then apply that percentage per product. Four things go into it: the capital tied up, priced at your real cost of money rather than a bank rate; storage and handling, from your warehouse or third-party logistics rate; insurance and any inventory taxes; and risk, meaning shrinkage, obsolescence, and the markdowns you historically take. Most brands land somewhere between fifteen and thirty percent per year. If you have never calculated it, start at twenty percent as a placeholder and improve it, but do not skip the capital component: it is usually the largest single piece and omitting it is what produces the systematic over-ordering this whole article is trying to prevent. What belongs in each bucket is broken down in inventory carrying cost.

What goes wrong when you apply EOQ?

The formula assumes steady demand and clean costs, which real catalogs rarely have. That is not a reason to abandon it, it is a reason to treat the output as a starting quantity you adjust. Three constraints override EOQ regularly, and knowing them in advance saves you defending a number that was never going to survive contact with your supplier.

  • Case and pallet rounding. You order in cartons of 24 or pallets of 480, not in EOQ-exact units. Round to the nearest practical pack. Because the total cost curve is flat near its minimum, rounding costs very little, so this is a constraint to accept rather than fight.
  • Minimum order quantities. If the supplier's minimum is above your EOQ, the minimum wins and EOQ becomes advisory. What it still tells you is how much that minimum is costing you in excess holding, which is a genuinely useful number to bring to a supplier conversation.
  • Freight breaks. A price step at a full container or a full truckload can outweigh the holding cost of the extra units. Compare total cost at the EOQ against total cost at the break point rather than assuming either wins.
  • Seasonal demand. EOQ assumes demand is spread evenly across the year. For a product selling most of its volume in one quarter, the annual average describes a month you never have, and the resulting quantity will be wrong in both directions at different times of year.

Rule of thumb: if a constraint forces you more than about thirty percent away from EOQ, the constraint is now the real decision and EOQ is just telling you what it costs. Below thirty percent, take the practical number and move on.

How do you put EOQ to work across the catalog?

EOQ is a baseline you adjust, not a rule you apply blindly, and the way to keep it useful is to be selective about where it runs at all. Calculating it for every SKU produces a lot of numbers, most of which will be overridden by a case pack or ignored on a product that sells eleven units a year.

Which SKUs EOQ actually fits

The good candidates share three traits: reasonably steady demand across the year, enough volume that order size is a real decision, and a supplier who will accept a range of quantities. That usually means your A and B items excluding anything strongly seasonal. On those, EOQ genuinely improves on ordering by habit, and the improvement compounds because you reorder them often. Slow movers, seasonal lines, and new products all break one of the assumptions, and for them a min/max rule or a season-based buy is the better tool. Sorting the catalog into those groups is what ABC analysis is for.

Where a system does this at catalog scale

The arithmetic per product is trivial and the maintenance is not, which is the same story as every other inventory calculation. D drifts as products trend, H moves with your cost of capital and storage rates, and S changes if your process does. A set of EOQs calculated once and left alone degrades exactly like a set of reorder points does, quietly, and without anyone getting an alert.

Conative AI's Buying Agent works out order quantities against current demand rather than an annual figure entered last year, and drafts the purchase order matched to your lead times, minimum order quantities, and supplier terms, so the constraints described above are applied rather than discovered afterwards. It drafts for approval; it does not place the order. Book a call to see it run on your own catalog through the inventory planning platform.

Frequently asked questions

Where do I get annual demand for a new product?

You do not, and EOQ is the wrong tool for a first buy. Use a look-alike approach instead, basing the initial quantity on comparable products by price, category, and audience, then switch to EOQ once you have several months of real sales. Applying EOQ to an invented demand figure produces false precision.

How do I estimate ordering cost?

Add four things for one typical purchase order: the time to raise and approve it at loaded cost, any fixed freight or brokerage charge, customs and documentation work, and receiving plus put-away labour. Exclude the cost of the goods, which scales with quantity. An estimate within twenty percent is accurate enough.

What percentage should I use for holding cost?

Most brands land between fifteen and thirty percent of unit cost per year. If you have never calculated it, twenty percent is a reasonable placeholder while you build a real figure. The component people omit is the capital tied up, which is usually the largest, and omitting it pushes every EOQ upward.

Do I round EOQ up or down to a case?

Round to whichever full case or pallet is nearer, since the total cost curve is flat around the minimum and a modest rounding costs very little. Operational simplicity is worth more than the last few units of theoretical optimisation. Only worry if the pack size forces you far from the calculated figure.

Does EOQ work for seasonal products?

Not well, because it assumes demand spread evenly across the year and seasonal products concentrate it. The annual average describes a month that never occurs. Plan seasonal items around the season itself, using pre-build and in-season chase logic, and reserve EOQ for your steady movers.

What if my supplier has a minimum order quantity?

The minimum wins, and EOQ becomes a measurement rather than a decision. Calculate it anyway, because the gap between your EOQ and the enforced minimum tells you what the constraint costs in extra holding each year. That figure is the strongest thing you can bring to a negotiation about lowering it.

Turn insights into cash

Time is money, save both.

By clicking Get Started you're confirming that you agree with our Terms and Conditions.
Thank you! Your submission has been received!
Oops! Something went wrong while submitting the form.