Guides

Nobody Has Updated That Cost Field in Two Years

A unit cost entered at launch never throws an error. It just keeps telling your reports what a product cost the last time anyone checked.

Nothing flags an old cost

The cost field on a product gets filled in once, when the product is created or a catalog is imported. After that, nothing in the normal running of a store asks anyone to look at it again. Orders go through, stock moves, and the number sits where it was left.

It isn't idle, though. Two Shopify reports read Cost per item. Profit reports use it to work out margin on each sale, and the month-end inventory value is calculated as cost per item multiplied by the ending quantity for each variant. Both reports take whatever is in the field at face value. Neither can tell a cost you checked last week from one copied off a supplier quote the day the product went live.

A blank cost fails differently, and worse. Shopify only reports profit for variants that had a cost recorded when they sold, so sales of a variant with no cost simply drop out of the profit report. The report is just quietly smaller than your sales.

What should go into the field in the first place, the unit price plus freight, duty and the rest, is covered in What a Unit Actually Costs: Landed Cost on the PO Line. This post is about what happens to that number after it's entered.

Which cost basis to plan with

At least four different figures can end up in the cost field, and they don't age the same way. Some move on their own as you buy; others stay put until a person changes them.

CostWhat it reflectsWhen it changesRisk if never refreshed
Quoted at setupThe price on the table when the product was createdOnly when someone types in a new oneDescribes a deal that may no longer exist
StandardA fixed figure you chose on purposeWhen you deliberately revise it at a reviewThe gap to real purchase prices keeps widening unnoticed
Weighted averageA blend of every receipt so farRecalculated on each receiptLags a real increase, because older, cheaper receipts dilute it
Last paid (from the PO)What the most recent receipt actually costEach time a purchase order is receivedLow, as long as the refresh actually happens after each receipt

Four cost bases and how each one ages between refreshes.

If you keep a standard cost, the gap between what you paid and the standard is the purchase price variance. A large unfavorable variance is often the first sign the standard is out of date.

For planning, last paid is usually the honest choice. The next order will cost roughly what the last one did, not what was quoted when the product was set up. That is a planning decision only. Which costing method your books use is a separate question for your accountant, and nothing here should change it.

How a cost drifts while nobody touches it

Staleness doesn't need anyone to make a mistake. Suppliers raise prices. Freight rates swing. A currency moves against you, a supplier's tax treatment changes, you switch suppliers, or a new minimum order quantity or pack size changes what a unit costs to bring in. Each of these moves the real cost while the field stays exactly where it was.

A cost field entered once stays flat while the cost on each purchase order steps upward cost field (entered once) cost on each received PO drift time
The field keeps the number it was given; each purchase order records what the stock really cost.

Shopify records the cost at the time of sale, so correcting the field today fixes reports from today forward. It does not rewrite the margin on orders you've already sold. When prices are rising, the gap widens with every month since the last refresh, and every sale in that stretch keeps the old, higher margin for good. That is the argument for refreshing on a schedule.

gross margin = (price − unit cost) ÷ price

Worked example

A SKU sells at $40. The cost field says $14, so margin reads as ($40 − $14) ÷ $40 = 65%. The last purchase order landed at $17, which puts real margin at ($40 − $17) ÷ $40 = 57.5%. Margin on that product reads 7.5 percentage points too high, and each unit received on that order is valued $3 below what it cost. (Illustrative numbers.)

Which SKUs to check first

You don't have to audit the whole catalog to remove most of the risk. Work in order of how much is at stake. Start with your highest-revenue SKUs, since a per-unit error there repeats across the most sales. Next come the SKUs with the most stock on hand, because they carry the most weight in inventory value. Then anything whose supplier or currency has changed since its cost was entered. Then every variant with a blank cost, because those are missing from profit reports entirely.

Add one more group: products you haven't reordered in a long time. Their cost may be a quote that has never been tested against a real order.

Assisty's AI Report Builder can produce the first two lists. Ask Atlas for a sales report by product or variant over the last 90 days to rank by revenue, or an inventory levels report to rank by stock on hand. The other three groups are lists you put together yourself. The check is the same for every SKU on any list: find what you last paid, compare it with the field, and update the field if they differ.

Refresh against the last purchase order

Tie the refresh to two triggers. The first is receiving a purchase order, because that is the moment you know what the stock actually cost. The second is a periodic sweep, quarterly being a sensible default, since standard costs are typically reviewed quarterly or annually, to catch products the first trigger misses.

In Assisty, the purchase order you received against carries tax types and landed cost on each line. The landed unit cost on that line is the figure to put in Cost per item. Copying it there is the step this guide is about.

The two triggers cover different products. Refreshing on receipt keeps fast movers current, because they are reordered often. The sweep is for everything else, which is why it is worth running from a list rather than from memory. Adjust the interval to how fast your costs move: if suppliers reprice often or you buy in a foreign currency, check the top of the list more often than once a quarter.

A list that arrives on its own removes the hardest part of starting. Save a sales report by product or variant and schedule it for monthly email delivery. Each month, a revenue-ranked list to start from lands in your inbox, so the quarterly sweep never starts from a blank page.

Record what each order really cost

Install Assisty. Every purchase order line carries its tax types and landed cost, and you receive against it when stock arrives.

Install on Shopify