← All posts

Cash flow

The cost price nobody ever updates

A cost typed in once and never touched again does more than misreport one margin. It sorts your catalogue, and it sorts it wrong.

Marcus Volsted Marcus VolstedCo-founder, Restocio Published 11 September 2026Updated 11 September 20268 min read
The cost price nobody ever updates

Every source on this page was opened and read, and each one is dated in the Sources section at the foot.

Why does Shopify's cost per item never update?

Because it is a box a person types in, not a number the platform maintains. Shopify holds one cost per variant, it moves only when somebody edits it, and nothing in the admin ever tells you it has gone out of date. Shopify says as much itself: the cost per item field “contains static data, which means that the data in your profit reports is only relevant to a specific point in time”, read 11 September 2026.

This is a different complaint from the usual one about landed cost. The usual one is that the number was incomplete the day it was typed, missing freight and duty, and that argument has its own page. This one is about a number that may well have been fine on the day and is not fine now.

Here is the shape, in the form a bookkeeper meets it in a client file. A cost goes in at 6.20. Fourteen months pass. The supplier raises the price twice, the freight rate moves, and one shipment comes by air to cover a gap. The unit now genuinely costs 8.10 to have on the shelf, and every sale of it still has its margin worked out against 6.20.

Nothing broke. No sync failed and no integration fell over. The field did what a text box does, which is keep whatever was put in it.

Which way does the error point?

Towards flattery, usually, and the starting point is the reason. Shopify's own instruction for the field points you at the supplier invoice and tells you to leave shipping out of it, which the ten-minute COGS audit quotes in full. Follow it, as nearly every importer does, and the number begins its life below what the unit actually cost you.

Then it stays there, because a correction has to be typed by someone who noticed. Price rises do not arrive as a prompt in the admin. They arrive as a line on an invoice, three weeks before the goods do, and the person reading that invoice is thinking about cash rather than about a reporting field.

Be careful with the general version of this claim, though. Freight rates fall as well as rise and suppliers do occasionally cut a price, so drift is not guaranteed to run one way. What is lopsided is where it starts and how it gets fixed.

What a frozen cost does to your margin ranking

This is the part that costs money, and it is not the per-unit error. Shopify works margin out from the selling price and that one cost box, nothing else, and its profit reports include Gross profit by product and Gross profit by product variant. The field is not decoration on a product page. It is the sort key on the report you use to decide what deserves attention.

Three variants in one store. The numbers are made up so the arithmetic stays checkable, and the only real difference between the rows is how recently someone touched the cost. C is the extreme case, still carrying the cost it launched with after two air shipments.

VariantCost in ShopifyLanded cost todayMargin on screenMargin in reality
A, priced 19.90, cost 14 months old6.208.1068.8%59.3%
B, priced 24.00, cost set at the last delivery9.109.1062.1%62.1%
C, priced 15.00, cost untouched since launch5.006.9566.7%53.7%

Read the screen and the order is A, C, B. Read reality and it is B, A, C. The one product whose cost is current finishes last on the report and first in the business, precisely because it is honest.

Now follow what you do with that ranking. A looks like the thing worth selling, so A gets the homepage slot and the ad budget. And when the purchase order goes out, A gets ordered hardest, because nobody deliberately buys deep into a thin margin. The stale cost is therefore not only misreporting a number. It is deciding where the attention and the cash go, and it keeps deciding until somebody retypes the field.

Worth separating this from the failure it gets confused with. A product that keeps selling out looks like a slow mover, because the sales rate was measured over days it was not available, and the replenishment guide covers that one. It bends the demand side. A stale cost bends the cost side, and one SKU can carry both at once, which is how a product ends up over-promoted and under-ordered in the same week.

Your stock value moves too. Shopify's Month-end inventory value report is the cost per item multiplied by the ending quantity, so a catalogue of old costs describes a warehouse worth less than it is. That one lands at year end.

How do you find your stale costs without buying anything?

You cannot sort by staleness, so the first instinct fails. Shopify keeps no history for this field: the inventory item carries created and updated timestamps for the record as a whole and nothing that says when the cost last changed. An afternoon and a spreadsheet still get an answer.

Start with a whole-store check that takes two minutes. Run the Month-end inventory value report and compare its total against the stock value your accountant last worked with. They are measured at different moments, so a small gap means nothing. A gap in the same direction month after month says the cost base is short across the catalogue, not on one product.

Then pick twenty rows by exposure, not by suspicion. Multiply units sold in the last 90 days by the cost you hold, sort descending, take the top twenty. That is where one cent of drift multiplies hardest.

Recompute those twenty by hand. Export your products and keep the SKU, the price and the Cost per item column. For each row, pull the most recent supplier invoice and the freight invoice for the shipment it came on, split that freight across the units by weight, and add. Put the result beside the cost Shopify holds.

Now the step that makes the case. Work out margin twice with Shopify's own formula, once on each cost, and sort the twenty both ways. Count how many of the top ten change position. That count is the finding, and it travels better to whoever signs off the ad budget than any per-unit figure, because it is a statement about decisions rather than accounting.

Mark which of the twenty have been reordered more than once since the cost was typed. Those will drift again by next quarter, which is the argument for a schedule rather than one cathartic afternoon.

How Restocio keeps the number current

When a delivery is received, Restocio blends the arriving batch into the existing average and shows the result per SKU first: what Shopify holds today, what is arriving, and what the new average would be. That preview has no write path in it.

Writing the average back into Shopify's cost field is a separate switch, Update Shopify cost automatically when goods arrive, off until you turn it on. A cost that doubles or halves against the current one is marked as a big jump on the preview and in the result, on a threshold you set, and it is still written: a real price rise and a slipped decimal look identical from inside software, so the guard names it rather than overruling you. The one case where the write is refused outright is a store whose Shopify cost already holds freight, because a goods-only price over a landed one corrupts your books silently.

The honest limit, and it is a real one. What we keep current is the supplier price plus that unit's share of the freight, which is not the whole landed cost. Duty is not inside the figure: it is a percentage you set, stored in your browser, shown rather than used. Packaging and payment processing fees are not modelled at all. So this fixes a number going stale, not a number being incomplete, and on FOB terms into a duty-rated line the average we maintain is still short by the duty.

Restocio is independent and is not affiliated with or endorsed by Shopify.

Common questions

Why is my Shopify cost per item not updating?

Because nothing updates it except a person, an import or an app with write permission on inventory. Shopify holds one cost per variant and treats it as static data, in its own words, so it keeps whatever was last put in it. A delivery arriving at a different price does not change it, and neither does a freight rate moving.

Does Shopify calculate an average cost price?

No. There is one cost field per variant and no moving average anywhere in the admin. The Admin API's inventory item carries the current unit cost and general created and updated timestamps, with no cost history to build an average from, so a weighted average has to be maintained outside Shopify and written back into that single field.

How often should the cost per item change?

Every time a delivery lands at a different landed cost, which for an importer is most deliveries. The supplier price moves, the freight rate moves, the exchange rate moves, and any one of those makes the blended cost of what is now on your shelf different from the blended cost of what was there yesterday.

How do I find which of my cost prices are stale?

You cannot sort by it, because Shopify keeps no record of when a cost was last changed. Rank by exposure instead: units sold in the last 90 days times the cost you hold, take the top twenty, and recompute those from the most recent supplier invoice plus that shipment's freight split across the units. Then sort the twenty by margin on the old cost and on the new one, and count how many of the top ten move.

Does a stale cost affect anything other than margin?

It affects your reported stock value, because Shopify's month-end inventory value report multiplies the cost per item by the ending quantity, so a catalogue of old costs describes a warehouse worth less than it is. It also affects purchasing, since the products that look most profitable are the ones that get ordered deepest.

Sources

Every source below was opened and read on the date shown against it. Rules, rates and schedules change, so check the current page before you act on a number that matters. If anything here is out of date or wrong, tell us and we will correct it.

Marcus Volsted
Marcus Volsted
Co-founder, Restocio

Marcus co-founded Restocio and works on it daily with a Swedish importer who plans their purchasing in it every working day. Restocio is built in Sweden by two founders, one Swedish and one Danish, and Marcus is the Danish one. Most of the examples on this blog come from that store's real ordering decisions rather than from a textbook. Why we are building it.

Related reading

Restocio plans purchasing for Shopify stores that import. It works out what to order, how much, and whether it should travel by sea, rail or air, so you pay air freight only for the units that genuinely cannot wait.

See pricingTalk to us