How do people decide how much inventory to buy?

I’m currently running a store and I’m struggling to figure out when to reorder popular items before they run out. Guessing and using moving averages doesn’t seem to work for me. What do people actually do?

Hi @byface.shop
I’d stop relying on a moving average alone and set a reorder point for each SKU based on three things: your actual sales velocity, supplier lead time, and a safety-stock buffer.

For example, if an item sells 10 units a day and your supplier takes 14 days to deliver, you already need to cover roughly 140 units during that lead time. Then add some safety stock for demand spikes or supplier delays. Shopify recommends this same basic approach for setting reorder points.

I’d also review the faster-moving or seasonal products more frequently instead of using the same rule for every SKU. That usually gives you a much better signal for when to reorder than simply waiting until inventory reaches a fixed number.

Hi @byface.shop Welcome To Shopify Community So Simple moving averages tend to fall apart because they smooth out everything equally, so a sudden trend shift (a product going viral, a seasonal spike, a slowdown) gets buried under weeks of older data before the average catches up, by which point you’ve already run out.

What tends to work better is combining sales velocity with lead time and a safety buffer, rather than just averaging past sales. The basic formula most people land on: (average daily sales × supplier lead time in days) + safety stock. The safety stock part is where most people get it wrong, it should scale with how unpredictable that specific product’s demand is, not be a flat number across your whole catalog. A steady, predictable seller needs less buffer than something spiky or seasonal.

Weighting recent sales more heavily than older sales also helps a lot, so a product that suddenly picked up in the last two weeks doesn’t get dragged down by a slower month three months ago. Even a simple exponential weighting (recent days count more) beats a flat moving average for this reason.

If you’re doing this manually in a spreadsheet, tracking days-of-stock-remaining per SKU (current stock ÷ recent daily sales rate) and setting a reorder point per product rather than a blanket rule across the whole catalog usually catches problems earlier than averages alone. Hope this helps solve your problem, and if it does, don’t forget to like and mark it as the solution. Thank you!

@byface.shop The useful distinction is when to reorder versus how much to buy.

When: trigger a reorder when days of cover falls inside the supplier lead time plus your safety buffer.

How much: choose a target cover window, then subtract both stock on hand and stock already on open POs.

Example: if an item sells about 8/day, lead time is 14 days, and you want 7 safety days, the reorder threshold is roughly 168 units. If your target after ordering is 30 days of cover (240 units) and you have 120 on hand plus 40 already inbound, the new PO should be about 80—not 240.

Weighting recent sales more heavily helps, but no formula knows about a promotion you have not told it about. I would override known campaigns/seasonality and review volatile SKUs more frequently.

Disclosure: I work on Inmana Restock, which automates this exact Shopify loop using recent 14/30/60-day sales velocity, supplier lead time, safety stock, and stock already on order. It does not currently claim promotion- or seasonality-aware forecasting. If maintaining the calculation in a sheet is the problem, the trial lets you compare its recommendations against a few SKUs before relying on it.

For every item, figure out how many are in a case, how long it takes to arrive, and how many you typically sell during that time. Then set a minimum stock level that triggers a reorder, with enough extra to cover unexpected sales or shipping delays.

Once you establish that for each item, you’re not really guessing anymore.

Personally, I built our reorder point off the ‘worst normal case’ scenario, not an average week. So, take the last 6-8 weeks, pull out the top and bottom outliers if they were one-off spikes, then look at the longest lead time the supplier has actually taken.

As an example… If an item sells 6 a day, lead time is 12 days, and you want 4 extra days of cover, your reorder point is 96 units. So you reorder when you hit 96 remaining.

The challenging part is that this obviously varies by SKU.

Fast movers with long lead times need a bigger gap, which also means more money tied up. Slow movers can be watched much tighter. Plus, anything seasonal should be checked against the same period last year instead of the last x days/weeks.

Worth checking what your average is dividing by before you change the formula.

Almost every reorder calculation, including the ones in this thread, starts with units sold divided by days. If those are calendar days, the number is wrong on exactly the products you’re asking about. An item that sold 30 units last month but sat at zero for eleven of them didn’t sell 1 a day. It sold 1.6 a day across the nineteen days anyone could actually buy it.

That’s a 37% gap and it runs the wrong way. The low number feeds the reorder point, the reorder point comes out short, the item runs out again, and next month has even more zero days in it. Each cycle trims the order a little further. Your best sellers run out the most, so they get trimmed the hardest. It looks like bad guessing. It isn’t. The arithmetic is quietly punishing the products that sell.

The fix is free. Divide by the days the item was actually available, not the days on the calendar.

You already have most of what you need. You know roughly when something hit zero, and you know when the restock landed because you placed that order yourself. Calendar days minus that gap is your denominator. Do it for the ten products that keep running out, not the whole catalog.

Going forward, log two dates every time one sells out. The day it went to zero and the day it came back. That’s the entire input, it takes seconds, and nothing keeps it for you if you don’t.

Then the formulas above will work. They were always right. They were being fed a velocity with your stockouts baked into it.

This is actually the main problem I built Replenly around.

It looks at sales velocity, supplier lead time, safety stock, what you have on hand and what’s already incoming, then gives you reorder recommendations grouped by supplier.

There’s a free plan for up to 100 SKUs, so you can try it without committing to anything.

Every answer above sizes the buffer off demand wobble. For most small retailers the bigger wobble sits on the other side.

Take a supplier who says fourteen days. Look at your last six deliveries from them and you will often find twelve, thirteen, fourteen, fifteen, twenty and thirty-one, so while demand for that product might move twenty percent week to week, the lead time moved by a factor of two and a half, and whichever number swings harder is what your safety stock actually pays for. Which points at your own receiving dates rather than the quoted figure. Order date to arrival date, every delivery, median across at least three.

Nothing keeps that for you.

And make the output a date. “Reorder point 168” tells you nothing on a Tuesday morning. “Order this by 12 September” is the same maths with the decision already taken.

Disclosure so you can weigh it: I build Binly (Binly ‑ Stocktake & Reorder - Stocky replacement: phone stocktakes, POs & smart reorder | Shopify App Store), which works those order-by dates out from a shop’s own receipt history.

My recommendations is to keep it simple: track daily sales for each SKU, add your supplier lead time plus a little safety stock and reorder before you hit that level. Just don’t count days when the item was out of stock, or you will underestimate demand.

@byface.shop Before replacing the moving average, try replaying one recent stockout. On the day you placed the last order, write down the stock available, the sales rate you expected, and the delivery date you expected. Then compare those with what actually happened. That separates an underestimated sales rate from a late order or a late supplier delivery; each needs a different fix.

One detail to add to the formulas above: if you only review buying once a week, demand keeps using stock during the gap between reviews. A rule that assumes daily checking can therefore trigger too late even when its average is reasonable.

Do you check purchasing daily or weekly, and for the last product that ran out, did the supplier deliver when expected? No private sales figures needed.

For transparency, this is the Skubase account. Skubase is currently in Shopify’s review process and is not yet listed in the Shopify App Store.

I’d stop relying on a simple moving average too. The biggest thing for me is separating demand from lead time. If a supplier takes 3 weeks to deliver, you need to know what you’re likely to sell during those 3 weeks, not just whether the current stock level looks low.

I’d track average daily sales, supplier lead time, current inventory, incoming POs, and then keep some safety stock on top. I’d also adjust that buffer depending on how reliable the supplier is. A supplier that sometimes takes 30 days shouldn’t have the same reorder point as one that consistently delivers in 7.

The other thing I’d watch is recent velocity. If a product suddenly starts selling 2x faster than normal, a 30 or 60 day average can make you think you have plenty of stock when you really don’t.

I use SiteGuru for the technical side of the store, and I like the same general idea here. I’d rather have a system flag the few SKUs that are actually at risk of stocking out than manually checking the whole catalog every day.

The ideal setup for me would basically say “reorder this SKU now, you have 11 days of stock left and the supplier takes 14 days” rather than just giving me another low-stock notification.

@Kim267 Skubase promotion: that prioritized stockout-risk list is one of the things our Shopify inventory-planning app does.

Skubase uses recent sales, stock on hand, and supplier lead-time/safety-stock settings to estimate days of cover and rank reorder priorities. Your “11 days left, 14-day supplier” example is exactly the comparison it helps surface, so you can focus on the products needing attention rather than manually reviewing the whole catalog. Seasonal swings and recent stockouts still need judgment; these are estimates, not automatic purchase orders.

Would a free inventory health check on five regularly restocked products be useful? No purchase obligation; ongoing app subscriptions are separate. If your workflow needs a missing feature, we can work with you to understand the gap and explore a practical solution.

Skubase is currently in Shopify’s review process and is not yet listed in the Shopify App Store.

I’d focus less on moving averages and more on your reorder point. Track your average daily sales, supplier lead time, and keep a safety-stock buffer for demand spikes. For example, if you sell 10 units/day, your supplier takes 7 days, and you want 30 units as safety stock, your reorder point would be around 100 units. I’d also review the numbers regularly rather than relying on one fixed f