Blog · 21 October 2026 · 7 min read

Restock Ops settings: last cost vs average cost, locations, velocity

The five Restock Ops settings and what each changes: last or average cost, default PO location, incoming projection, velocity window, days of cover.

Restock Ops has one Settings page and five settings on it. That is on purpose: almost everything that varies between stores lives on the supplier record or on a per-item rule, and the Settings page holds only the handful of decisions that apply to the whole store. Because there are so few, each one carries weight, and two of them, the cost method and the velocity window, quietly shape numbers you will look at every week.

This post goes through the page top to bottom. For each setting it says what the app does with the value, what the default is, what the limits are and what changing it later does to data you already have. The page also hosts two read-only sections, the Shopify write log and the cost history, which have their own posts and are only pointed at here.

Unit cost on receive

The first setting decides what Restock Ops writes into Shopify's cost per item field after a receipt. It has two options: Last cost paid, which is the default, and Weighted average with units on hand. The help text under the field says it plainly: the cost is written to the Shopify inventory item after each receipt, and every change is kept in cost history.

Last cost paid is the simple one. Whatever unit cost is on the receipt line, net of tax as explained in the post on what to include in cost per item, becomes the item's cost. Paid 4.20 this time, cost is 4.20, regardless of what the units already on the shelf cost you.

Weighted average blends the new delivery with what is already there. The app reads the units on hand at the destination before the receipt and the current cost per item in Shopify, then computes (on hand multiplied by the current cost, plus received multiplied by the receipt cost) divided by (on hand plus received), rounded to the cent. Twenty units at 4.00 plus ten received at 4.60 gives 4.20. Negative on-hand counts are treated as zero so a stock error cannot produce a nonsense average, and when the item has no cost in Shopify yet, or the receipt line has no quantity, the app falls back to the receipt cost because there is nothing to average against.

In both methods, if the computed cost equals what Shopify already holds, nothing is written, which keeps the write log and the cost history free of no-change rows. When something is written, a row appears in the cost history with the old and new values and the receipt that caused it.

Which cost method to choose

Changing the method does not recompute anything. It only affects receipts committed after the change, so you can switch at a quarter boundary without touching history. If your accountant wants average cost for the year-end valuation, switch before the first receipt of the new period and leave it.

Last cost paid vs weighted average
Last cost paidWeighted average
Best forPrices that move and stock that turns quickly; you want margin reports to reflect today's buying priceSlow movers and items bought in uneven batches; you want the cost on hand to reflect what the shelf actually cost
After a one-off expensive top-upCost jumps to the top-up price for every unit, including the cheap ones already in stockCost rises a little, in proportion to how many expensive units joined the pile
After a price drop from the supplierCost drops immediately; old stock now looks more profitable than it wasCost drifts down over several deliveries
Depends on accurate on-hand countsNoYes; an inflated on-hand figure under-weights the new delivery
MatchesWhat most people mean by current costWhat accountants usually mean by average cost of inventory

Default destination for new POs

The second setting is a location picker. Its default is First active location, meaning the first location Shopify returns for the store, and the alternatives are your named locations. When you create a purchase order, the destination field is pre-filled from here. It is only a default: every PO can be pointed at any location, and the location is frozen on the PO when it is created, as the post on destination locations and multi-location receiving covers.

Single-location stores never need to touch this. Stores with a shop and a warehouse should set it to wherever deliveries actually arrive, because the destination drives three things on receipt: which location's available quantity goes up, which location's incoming quantity goes down if projection is on, and which on-hand count the weighted average reads. A PO received at the wrong location is a stock transfer you did not mean to make.

Show ordered units as incoming in Shopify

The third setting is a checkbox marked Experimental. When it is on, marking a PO as ordered adds its outstanding units to Shopify's incoming quantity at the destination, so the product page in the admin shows them as on the way, and receiving or cancelling removes them again. When it is off, which is the default, Restock Ops never touches the incoming quantity and Shopify's own transfers remain the only thing that feeds it.

Turning it on mid-stream does not project POs that were already ordered; only POs marked ordered after the change are projected. Turning it off leaves any projections already made in place until those POs are received or cancelled. The full behaviour, including how the reorder report reads the result, is in the post on the incoming projection setting.

Sales velocity window (days)

The two Reorder settings feed the reorder report. The velocity window is the number of days of sales history the report divides by to get units per day. It accepts 7 to 365 and defaults to 30. The help text is the formula: units sold over this many days, divided by the days, is the velocity used by the reorder report.

A short window reacts fast and jitters; a long one is steady and slow. Thirty days suits most stores most of the year. Shorten it to 14 going into a season you know will be busier than the trailing month, lengthen it to 60 or 90 for a slow catalogue where thirty days contains too few sales to mean anything. What counts as a sale inside the window, and why some orders are excluded, is the subject of the reorder velocity post.

The window is store-wide. If one product needs a different horizon, the per-item rule has a manual Sales per day override, which bypasses the window entirely for that item.

Days of cover to hold

The last setting is the buffer the report aims for after a delivery lands. It accepts 1 to 365 and defaults to 14. The help text gives the formula: target stock after an order arrives equals velocity times supplier lead time plus these days, and a per-item rule can override it.

Read that as two parts. Lead time is the supplier's, taken from the supplier record, and covers the days between placing the order and shelving it. Days of cover is yours, and covers how long you want the shelf to last after that before the next order is due. Fourteen days with a weekly ordering rhythm leaves one missed order's worth of slack; seven is tight; thirty is for suppliers you order from monthly. The worked example in the post on reorder points and days of cover shows how the number flows into a suggested quantity.

What the page does with bad input

Both number fields are clamped rather than rejected. Type 3 into the velocity window and the app saves 7; type 1000 into days of cover and it saves 365; clear the field and it saves the default. There is no error message for an out-of-range number, so glance at the page after saving if you were typing quickly. The cost method and the projection checkbox cannot be set to anything invalid, and an unknown location value falls back to First active location.

Settings are saved per store the first time the page is opened, with the defaults above, so a fresh install behaves as if you had chosen last cost, first location, no projection, 30 days and 14 days. Nothing on the page changes data already in Shopify: it changes what the next receipt and the next report do.

The two sections below the settings

Under the settings sit the Shopify write log and the cost history. Neither is a setting; they are there because this is where people look when they want to know what the app has done to their store. The write log lists the fifty most recent writes to Shopify with their status and the receipt that caused them. The cost history lists every cost change with the method that produced it, which is also the fastest way to check what switching between last and average cost has actually done.

If you are setting up Restock Ops for the first time, the order that works is: pick the cost method before the first receipt, set the default location, leave projection off until the first few POs have gone through cleanly, and let the reorder settings sit at their defaults for a month before you tune them against what the report suggested and what you actually needed.

FAQ

Does switching from last cost to weighted average recalculate existing costs?

No. The setting only affects receipts committed after the change. Costs already written stay as they are, and the cost history shows which method produced each row.

Where does the weighted average get the units on hand from?

From Shopify's on-hand quantity at the PO's destination location at the moment the receipt is committed. If that count is wrong the average is weighted wrongly, which is the main argument for a stocktake before switching to the average method.

Can I set a different velocity window for one product?

Not as a window, but a per-item rule has a Sales per day override that replaces the computed velocity for that item. The window itself is one value for the whole store.

What happens if I type a number outside the allowed range?

It is clamped silently to the nearest limit: 7 to 365 days for the velocity window, 1 to 365 for days of cover. An empty or non-numeric value saves the default of 30 or 14.

Try it on your store. Restock Ops adds purchase orders with partial receiving, supplier notes, cost history, barcode labels, scanner stocktakes and a reorder report on top of Shopify inventory. From $19/month, 14-day free trial.

Install on Shopify Watch the demo

Sources