← All posts

Cash flow

How to check your COGS in ten minutes

One SKU, two invoices, a calculator. If the cost sitting in Shopify matches your supplier's invoice to the cent, the audit has already told you something.

Marcus Volsted Marcus VolstedCo-founder, Restocio Published 11 September 2026Updated 11 September 20268 min read
How to check your COGS in ten minutes

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

Is your COGS wrong, and how would you know?

Open one product in Shopify, look at the cost per item field, and compare it with the supplier invoice plus the freight invoice for the same shipment. If it matches that invoice to the cent, your COGS is short by everything it cost to get those units onto your shelf. That is the whole test, and it takes about ten minutes once the invoices are open.

A Shopify bookkeeping firm described a live client file publicly this week. The cost per item matched exactly what had been paid to the manufacturer. No freight in it, no packaging, no payment processing fees. Recomputed, the real landed cost came out about 22 per cent above what was showing as COGS. One file, not a survey, so read it as an example.

Two failures put a wrong number in that field, and the audit catches both: a cost incomplete the day it was typed, and one that was right once and never moved while freight rates and supplier prices did. Checking against your most recent shipment tells them apart.

What you need in front of you

Pick one SKU, and not the interesting one. The high-volume one, because the error scales with units sold.

What to pullWhere it comes fromWhat you write down
One high-volume SKUShopify admin, sorted by units sold over 90 daysThe cost per item in the field
Its last supplier invoiceWherever paid invoices landUnits invoiced, and the goods total in the currency paid
The freight invoice for that shipmentThe forwarder, and the invoice rather than the quoteAmount billed, and this SKU's share of the shipment by weight
Clearance and brokerage, same entryYour customs brokerAmount billed, and the duty actually assessed
Anything per unit you buy separatelyYour own purchase recordsBox, insert, polybag, labelling

Finding the invoices is the work. Everything after this is division.

How do you work out the real per-unit cost?

Multiply each shipment-level invoice by this SKU's share of the shipment, then divide by the units of it that arrived. Share by weight is usual, because that is how the carrier priced the job. Add whatever is already per unit, and convert at the rate on the day you paid the supplier. Round numbers below, one container, one of three products in it.

Real cost = 11.00 + 0.68 + 0.05 + 0.55 + 0.30 = 12.58 a unit. The field says 11.00. The gap is 1.58, which is 14.4 per cent.

Notice where the gap came from. Freight is not the biggest piece at 0.68, while duty and the box together are 0.85. Fly the units instead and that ranking flips, which what a unit actually costs you covers.

How big a gap is normal?

Nobody can tell you honestly, and a benchmark quoted with confidence is worth being suspicious of. What exists is examples. That client file came out around 22 per cent high. The worked example above lands at 14.4. Yours depends on your lane, your commodity code and how much of your product is packaging.

The direction never varies, though. Every missing line is a cost, so a field filled from the supplier invoice understates and never overstates. The error is not random noise spread across a catalogue. It is systematic, and largest on whatever travelled furthest.

What does a gap that size actually break?

Your pricing, the ceiling you set on customer acquisition, and the cash you budget for the next order. All three read the same field, so all three inherit the error at full size. Keep the 1.58 and price the product at 27.50.

Pricing. You picked 27.50 to hit a 60 per cent margin on a cost of 11.00. The real margin is (27.50 − 12.58) ÷ 27.50, or 54.3 per cent. You did not pick 54.3. You picked 60 and were handed 54.3 by a field filled in once.

The ad spend ceiling. Gross profit per unit was 16.50 in your planning and is 14.92 in fact. Let acquisition cost run towards break-even and every customer bought between those two numbers lost money while the dashboard reported a win. Same 1.58, which is rather the point. More in what a product really earns after ad spend.

The reorder budget. Order 2 400 again and you plan for 26 400. What actually leaves is 30 192, because freight, duty and boxes get paid whether or not anyone budgeted for them. The quantity was never the part that was wrong, which is its own argument. The 3 792 never appears as a line item. It appears as a bank balance under the forecast, every cycle, which is the profitable-but-broke problem with an arithmetic cause underneath it.

What does Shopify do with the number?

It computes your margin from that field and from nothing else. The Help Center gives the product-page formula as ([price − cost] ÷ price) × 100, read 11 September 2026. Put 12.58 where 11.00 sits and every percentage on the platform moves. Whatever is in that one box is the entire cost side of every profitability figure Shopify will show you.

The instruction for filling it in is where an importer comes unstuck. Shopify's single example is “the price that you paid the manufacturer, excluding taxes, shipping, or other costs”. Follow it literally and you produce the file the bookkeepers found. Who it was written for is covered in the landed cost guide.

History decides what a correction buys you. Shopify's profit report documentation ties a sale's profit to the cost that was on record when it sold, so the cost is captured per order as the order happens. Fixing the field makes tomorrow's reports honest. The page does not say what happens to the quarter you already looked at, so open one old order and check. Why that report and your bookkeeper's still disagree afterwards is a separate reconciliation.

The lines we do not compute either

Restocio works out landed cost per unit from the goods and the freight on the delivery that actually arrived, blends it into the weighted average as stock is received, and can write that back into Shopify's cost field. A dry run is the default and a run shows the before and after per SKU, so nothing moves without you seeing it first. A jump big enough to look implausible is flagged as a large change rather than blocked, since a genuine price rise and a mistyped invoice look identical from the outside.

What it does not do, plainly: duty is a percentage you set for display and it does not feed the cost, and packaging is not modelled at all. Of the five cost lines above, our figure carries the supplier price and the freight properly, and clearance only if you folded it into the freight yourself. Run the audit with all five anyway. A check done by hand deserves to be more complete than any tool's automatic version, ours included.

What to do with the answer

Under a couple of per cent and you were already doing this properly. Double digits and the move is not to retype the catalogue tonight: correct the SKUs carrying the most units first, and note which invoices you used so somebody can check you. Then decide who keeps it current, because a corrected field drifts again with the next shipment at a different rate. Past a few dozen imported SKUs that stops being a job anyone does reliably by hand, which is roughly where the rest of the purchasing decision stops fitting in a spreadsheet.

Common questions

How do I check if my COGS is wrong in Shopify?

Pick one high-volume SKU and open three documents for its last shipment: the supplier invoice, the freight invoice and the clearance invoice. Multiply each shipment-level invoice by that SKU's share of the shipment by weight, divide by the units that arrived, add any per-unit packaging, and compare the total against the cost per item in Shopify. The difference, as a percentage of the field, is your gap.

Do I need software to audit my cost prices?

No. The audit needs two or three invoices, the cost per item from your Shopify admin and a calculator. Software matters for what comes afterwards, keeping the figure current as each new delivery lands at a different freight and exchange rate. It is not needed to find out whether the number is wrong today.

Which SKU should I audit first?

The one with the most units sold in the last 90 days, because a percentage error costs most where the volume is. If two are close, take the one whose selling price you set a long time ago and have not revisited, since a stale cost and a stale price compound rather than cancel.

Does fixing cost per item repair my old profit reports?

Probably not, and Shopify's own documentation does not say either way. It does tie a sale's profit to the cost that was on record when that sale happened, so the cost is captured per order as the order happens. Treat a correction as making future reporting honest, and open one old order to see how your own store's history behaves before relying on it.

How big is the gap between cost per item and real landed cost, usually?

There is no trustworthy average, and anyone quoting one should be asked where it came from. A Shopify bookkeeping firm reported one client file at about 22 per cent this week. A worked sea-freight example with duty and packaging included comes out at 14.4 per cent. The direction is the reliable part: a field filled from the supplier invoice understates the cost, never overstates it.

Should packaging be in my COGS?

If you buy the box separately from the goods, it is part of what a unit costs to be ready for sale, so it belongs in the cost basis alongside inbound freight and duty. Payment processing fees are a different animal. They are a cost of selling the unit rather than of getting it onto the shelf, so they belong in a margin calculation instead of in the stock value.

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