Shopify cost per item: include tax, freight or neither?
Cost per item drives Shopify's profit figures, but the field has no rules. How to treat tax, freight and discounts, and how Restock Ops writes it.
Shopify gives every variant a single field called cost per item. Reports that show margin or profit subtract it from the selling price, and nothing else in the admin checks whether the number makes sense. A supplier invoice, meanwhile, has a net price per unit, maybe a quantity discount, a tax line, a freight charge and sometimes duty. Which of those belongs in the field is the question most small retailers never settle, so their margin reports quietly mix three or four different definitions of cost.
This post sets out the choices, the reasons to pick one, and how Restock Ops writes the field when stock is received, so you can make the decision once and stop re-deciding on every delivery.
What the field is, technically
In Shopify's data model, cost lives on the inventory item behind a variant, as a single money value. There is one per variant for the whole shop, not one per location, and there is no history: when it is changed, the old value is gone. Apps change it with the inventoryItemUpdate mutation, and the InventoryItem object exposes it as unitCost. Shopify's own purchase orders let you type a cost per line and will set it when you receive, but they do not define what the number should contain either.
Because it is a single number with no rule attached, the only thing that makes it useful is consistency. A margin report comparing a product whose cost includes freight with one whose cost does not is comparing two different things.
The four things on an invoice, and whether they belong in it
Tax is the easiest call. For most registered businesses the tax on a purchase is recovered or never charged, so the cost that matters is the net price. Businesses that cannot reclaim tax (some small or exempt traders) genuinely do pay it, and for them including it is defensible. If you are unsure which you are, that is a question for your accountant, and the answer is the same for every product, which is what makes it safe to encode.
Freight is the real decision. A landed cost is more honest and is what most accountants will want for stock valuation, but allocating a single freight charge across forty lines takes either a rule (by value, by weight, by unit) or a spreadsheet. If your freight is small relative to goods, say under five percent, many retailers exclude it from cost per item and treat it as an overhead, accepting slightly flattering margins in exchange for a cost field that matches the supplier's price list line for line.
| Invoice line | Usual treatment | Why |
|---|---|---|
| Net unit price after line discounts | Include | This is what you actually paid per unit; a 10% volume discount is real and your margin report should see it. |
| VAT, GST or sales tax on the purchase | Usually exclude | If you reclaim VAT or buy for resale with a resale certificate, the tax is not a cost to you. Including it overstates cost and understates margin. |
| Freight and shipping | Decide once, then stick to it | Including it gives a landed cost and a truer margin; excluding it keeps cost equal to the supplier's price list and simpler to check. |
| Duty and import fees | Same decision as freight | Part of landed cost. Material for importers, zero for domestic buying. |
How Restock Ops writes cost on a receipt
A purchase order line in Restock Ops has a unit cost and a separate tax percentage. The tax is used for the PO total, so the document you send and the supplier's invoice agree, but it is not folded into the unit cost. When you receive stock, the unit cost on each received line is what gets written to Shopify, after the method chosen in Settings is applied: last cost replaces the Shopify value, weighted average blends units already on hand at the old cost with the received units at the new one. The mechanics and the history that is kept per receipt are covered in Inventory cost history after receiving.
That design encodes the tax decision for you: Shopify's cost per item is always net of the tax line. Freight stays your decision. Restock Ops does not allocate a freight charge across lines; if you want landed cost, divide freight across the lines and type the landed unit price on the receipt. The receiving screen lets you change the unit cost per line before applying, precisely so that the figure on the invoice, not the figure on the PO, is what reaches Shopify. When the delivery itself differs from the PO, see When a delivery does not match the purchase order.

A worked example
A candle shop orders 120 jars at 4.00 each, gets a 10% discount for the quantity, pays 20% VAT and a 36.00 delivery charge. The invoice shows 480.00 for goods, 48.00 off, 86.40 VAT and 36.00 freight: 650.40 in total.
- Net unit price: 3.60 (4.00 less the 10% discount). This is the Restock Ops line cost, and the tax field on the line holds 20.
- Excluding freight, the cost written to Shopify on receipt is 3.60 per jar under last cost. The shop sells the jar at 12.00, so the report shows a 70% margin.
- Including freight, 36.00 across 120 jars is 0.30 each, so the landed unit cost is 3.90. Type 3.90 on the receipt line and Shopify shows a 67.5% margin.
- Including VAT would give 4.32 or 4.68. For a VAT-registered shop that is wrong: the 86.40 comes back on the VAT return.
Keeping it consistent over time
- Write the rule down in one sentence, for example "cost per item is the net invoice price per unit, excluding tax and excluding freight", and keep it where whoever receives deliveries will see it.
- Do not switch between landed and ex-freight mid-year. If you decide to move to landed cost, do it at a stocktake or year end so the history has a clean break.
- Supplier currency matters. If a supplier invoices in another currency, convert at the invoice rate before typing the unit cost; Shopify's cost field is in your shop currency and does not convert.
- Match the invoice, not the PO. Prices move between ordering and delivery; the receipt is where you correct the figure. Tracking which invoices are paid against which POs is a separate problem, covered in Supplier invoice tracking.
- Check the first receipt of any new product. Shopify's margin report for a variant with an empty cost shows nothing useful, and a cost typed with the tax included on day one will persist until the next receipt replaces or averages it.
FAQ
Should Shopify cost per item include VAT or sales tax?
For a business that reclaims VAT or buys for resale tax-free, no: the tax is not a cost you bear, and including it understates your margin. Restock Ops keeps tax as a separate percentage on each PO line and writes the net unit cost to Shopify.
Should cost per item include shipping from the supplier?
It is a choice. Including freight gives a landed cost and a truer margin; excluding it keeps the field equal to the supplier's price list. Pick one, apply it to every product, and change it only at a stocktake or year end.
Does Restock Ops calculate landed cost?
No. It does not allocate a freight charge across lines. Divide the freight yourself and type the landed unit price on the receipt line; the receiving screen lets you change the unit cost per line before anything is written.
What happens to cost per item when I use weighted average?
Restock Ops blends the units already on hand at the current Shopify cost with the units received at the receipt cost, writes the result to Shopify and records both figures in the receipt history, so you can see how the number was reached.
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.