ClearStock is live on the Shopify App Store.Install free →

← All blogs

Reorder Math9 min read

How much inventory to order: the order-up-to calculation, MOQs, and cash limits

Order quantity = velocity × days to cover, minus on hand and incoming. A worked example, then how MOQs, case packs, and a cash ceiling bend the number without breaking it.

InventoryX is in development and not available today. ClearStock is the live Shopify app.

How much to order has a formula: order quantity = (daily velocity × days to cover) − sellable on hand − units already incoming, where days to cover is your lead time plus a buffer plus the cover you want left when the delivery lands. That's the whole calculation. Everything else merchants argue about — minimum order quantities, case packs, cash constraints, supplier tiers — is a constraint applied afterward, and applying constraints to a number you haven't calculated is just guessing with extra steps.

Here's the calculation worked end to end, then the four constraints that legitimately change the answer and the two that only look legitimate.

The inputs, and which ones people get wrong

Four inputs, all obtainable:

  • Daily velocity — units per day, computed on days the SKU was available to sell. Calendar-day averages understate velocity, which undersizes the order.
  • Lead time — measured order-to-sellable, not the quote. A p80 (rather than average) is the right choice for anything you'd hate to run out of.
  • Safety days — the buffer expressed in days, sized to demand and lead-time variability.
  • Target cover — how many days of stock you want sitting there the day the delivery arrives. This is a policy choice, and the one most stores never make explicitly: 30 days is a common default for imported goods, 14 for domestic suppliers on weekly runs.

The two that are usually wrong are the first two. If there's one habit worth building, it's treating velocity and lead time as measured quantities with error bars rather than facts copied from a report and a brochure.

Worked example: the mug

MUG-GRN-12, an imported ceramic mug. Inputs and where they came from:

Input Value Source
Velocity 7.08 units/day 559 units ÷ 79 in-stock days
Lead time 40 days (p80) PO log, six deliveries
Safety days 7 days Buffer sized at ~50 units
Target cover on arrival 30 days Policy: about a month of shelf life
Sellable on hand 171 units Inventory page, available column
Incoming POs 96 units One PO, arriving in 3 weeks

Step 1 — days to cover.

40 (lead) + 7 (safety) + 30 (target) = 77 days

Step 2 — units for that many days.

7.08 × 77 = 545.2 → 545 units

Step 3 — subtract what exists and what's coming.

545 − 171 − 96 = 278 units

Step 4 — round to the supplier's case pack. Cases of 24:

278 ÷ 24 = 11.58 → 12 cases = 288 units

Step 5 — check the position it creates. After delivery: 171 + 96 + 288 = 555 units ÷ 7.08 = 78 days of cover, against a lead time of 40. That's 38 days of slack — lead time plus the 7-day buffer plus roughly the 30-day target, which is exactly what step 1 bought. The arithmetic checks itself this way; if the resulting position differs from your intended cover, an input is off.

Three details in that example carry most of the value:

  • Incoming stock was subtracted. Forgetting it is the classic double-order: the store that reorders against on-hand alone ends up with four months of a product it expected to be tight on. It's the single most common cause of "we bought too much" complaints that aren't actually buying errors.
  • Velocity was corrected. Using the calendar-day figure of 6.21/day instead of 7.08 would have produced 6.21 × 77 = 478, minus 267 = 211 units — 67 units short, about nine days of selling, on the SKU that already proved it can go dark.
  • The rounding was to a case, not a pallet. Twelve cases is +10 units (1.3 days of cover). A pallet might be +200 units, which is a cash decision pretending to be a logistics one.

Constraint 1: MOQs

If the supplier's minimum is 300 units and your calculated order is 278, the decision isn't "order 278" — you can't. It's one of three things:

  1. Take the MOQ and re-derive the cover. 300 units brings the position to 567 ÷ 7.08 = 80 days, versus the 77 you intended. Three extra days of cover for 22 extra units — often completely fine, and worth doing deliberately rather than resenting.
  2. Negotiate a mixed-SKU minimum. "300 units across your catalog" instead of "300 of one SKU" is a reasonable ask, especially from a supplier who wants repeat business, and it changes the arithmetic entirely: your 278 could split into three SKUs and clear the minimum.
  3. Buy the MOQ and accept a longer cycle. Order less often, at a larger size. That's a legitimate strategy — fewer, bigger POs reduce freight and admin cost — as long as you've checked that the resulting cover matches your cash position and shelf life rather than just your shipping budget.

What's not legitimate is quietly letting the MOQ set your order size forever. If the MOQ is double what your velocity justifies, your real problem is product-supplier fit, not order quantity.

Constraint 2: case packs and inner packs

Round up to the pack. The rounding error in the example (10 units on 278) is noise against a 40-day lead time. Two traps:

  • Rounding up twice. Rounding to a case pack, then to a full layer, then to a pallet can double the order. Round once, to the smallest unit the supplier actually sells in.
  • Mixed-case minimums. Some suppliers ship a case of 24 but require 6 cases of assorted colours; that turns a per-SKU calculation into a per-product one, and the case-pack rounding has to happen after the colour split, not before.

Constraint 3: cash

When you can't fund every SKU's calculated quantity, the wrong move is shaving every order by 20%. That starves your heroes to keep your tail comfortable, and it produces the worst of both outcomes: stockouts where demand is real, dead stock where it isn't.

The right move is ranking. Compute the calculated order for every SKU, then sort by urgency — days of cover minus lead time, ascending — and fund from the top down until the budget is spent:

SKU Cover (days) Lead time Cover − lead Calculated order Cost Funded?
MUG-GRN-12 24 40 −16 288 $2,419 Yes — full
BOWL-SAND-01 31 40 −9 240 $1,920 Yes — full
PLATE-WHT-04 52 40 +12 96 $816 Partial: 48 units
VASE-BLU-09 118 40 +78 0 $0 No — defer

Two things to notice. The lower half of the list often needs nothing, because it's already over-covered — the budget pressure usually comes from ordering everything on a fixed cadence rather than from genuine shortage. And a partial order on the third line is fine as long as it still clears the MOQ; a partial order that doesn't clear the MOQ isn't an order, it's an intention.

The discipline of deciding how much total inventory cash to commit before allocating it has a name — open-to-buy — and the open-to-buy guide works through the budget version of this table.

Constraint 4: shelf life and seasonality

For anything that expires or has a season, the calculated quantity needs a ceiling: no more than you can sell before the stock becomes unsellable or unsellable-at-full-price.

  • Expiry: max order = velocity × (days until expiry − freshness margin customers expect) − on hand. A 30-day target cover is meaningless on a product with 60 days of shelf life left.
  • Seasonality: velocity is an average, and an average across a seasonal ramp is wrong in both directions at once. Q4 stock computed from a September average is the most reliable way to be dark in November; spring stock computed from a December average is the most reliable way to be stuck in May. Use a seasonal index rather than the flat rate.

Neither constraint appears anywhere in the formula. They're clamps, and clamping after calculating is correct; clamping instead of calculating is how stores end up ordering "whatever fits the budget" every month.

Two constraints that aren't

Free-shipping thresholds. Adding units to clear a freight threshold can be rational, but the comparison isn't "freight saved vs nothing" — it's freight saved vs the carrying cost and markdown risk of the extra units. Run the extra units through days of cover first: on a 7-unit-a-day SKU, 84 extra units is 12 extra days of stock.

Volume discounts. A 10% unit price break on a 60-day-extra buy is real money and also real risk. Discount the discount by your realistic sell-through on the incremental quantity. If a third of the extra units end up marked down, the discount is gone.

Common questions

What's the formula for how much inventory to order? Order quantity = (daily velocity × days to cover) − sellable on hand − units already incoming, where days to cover is lead time plus safety days plus your target cover on arrival. Then round up to a case pack and check the resulting position against the cover you intended.

Should I subtract incoming purchase orders? Yes, always. Units on the water cover demand exactly like units on the shelf. Subtracting only on-hand stock is how stores double-order and end up with months of surplus on a product they thought was tight.

How do MOQs change the order quantity? An MOQ is a floor, not a quantity. Either take it and re-derive the cover the extra units buy, or negotiate a mixed-SKU minimum so the floor applies across your order rather than per item. Don't let the MOQ silently become your order size.

How much inventory should I order at once? Enough to cover lead time, a buffer, and your target cover at arrival — no more. On a 40-day lead time with a 7-day buffer and a 30-day target, that's 77 days of demand. Larger orders reduce freight and admin cost; they also lengthen the cash cycle and increase markdown risk.

What if I can't afford the full order? Rank SKUs by cover minus lead time, fund from the top down, and defer anything already over-covered. Avoid shaving every order by the same percentage — that under-funds your best sellers while keeping the tail comfortable.

Next step

Run the five-step calculation on your next real PO, using p80 lead time and in-stock-only velocity, and compare the result to what you were about to order. If the numbers differ by more than a case pack, the difference is either a stale input or an unexamined constraint — and both are cheaper to find now than in a warehouse in March. To check the timing side of the same decision, the reorder point formula uses the same two inputs.