How to calculate landed cost per SKU for Shopify (2026)
Landed cost per SKU = (supplier price of the line, converted to your store currency + the line's share of freight, insurance, duties, broker and bank fees) ÷ units received. Each cost is shared across the lines of the receipt with a key that fits it (weight or volume for freight, value for insurance and duties), then the unit result goes into the variant's Cost per item in Shopify. Shopify does not do the allocation for you: its help center describes Cost per item as a single, static value per product or variant.
What goes into the landed cost
IAS 2 (paragraph 11) defines the cost of purchase of inventory as the purchase price, import duties and other non-recoverable taxes, transport, handling and other costs directly attributable to the acquisition, minus trade discounts (IFRS Foundation, IAS 2). For US sole proprietors, IRS Publication 334 lists freight-in on merchandise you purchase as part of cost of goods sold (IRS Pub. 334).
| Cost on the receipt | Usually included | Typical allocation key |
|---|---|---|
| Supplier price (invoice lines) | Yes | It is the line itself |
| Inbound freight to your warehouse | Yes | Weight (air, courier) or volume (sea) |
| Cargo insurance | Yes | Value |
| Import duties | Yes | Value, or value × duty rate when lines have different HS codes |
| Customs broker / clearance fees | Yes, if directly attributable | Value or equal per line |
| Bank wire and FX fees on the supplier payment | Depends on your accountant's policy | Value |
| Recoverable VAT / GST paid at import | No (you get it back) | — |
| Outbound shipping to customers | No (it is a selling cost) | — |
Shopify's own product page help says you can enter the price paid to the manufacturer "excluding taxes, shipping, or other costs" (Shopify Help Center, product details). That is a simplification: if you want margins in Shopify's profit reports to reflect what the goods really cost, use the landed figure.
Step by step
- List the receipt lines: SKU, quantity received, unit price, currency, and weight or volume if freight will be spread that way.
- Convert to the store currency with the rate you actually paid (bank statement or payment confirmation). Convert the invoice total once, then spread it over the lines, so the converted lines add up to the converted total.
- Collect the additional bills of the shipment: freight invoice, insurance certificate, customs entry, broker invoice, bank fees. Convert each to the store currency.
- Choose a key per cost (table above) and compute each line's share: cost × line key ÷ total key.
- Round to the cent without losing cents: round every share down, then give the leftover cents to the lines with the largest fractional parts (largest remainder method). The shares of each cost then add up exactly to the bill.
- Add up per line and divide by quantity: landed line total ÷ units = landed cost per unit.
- Update Shopify: bulk editor, or a product CSV import (see below).
Worked example
Example receipt, store currency USD, freight 100.00 spread by weight, duties 20.00 by value, broker 35.00 by quantity:
| SKU | Qty | Goods | Weight | Freight | Duties | Broker | Landed total | Per unit |
|---|---|---|---|---|---|---|---|---|
| A | 10 | 50.00 | 10 kg | 25.00 | 5.00 | 10.00 | 90.00 | 9.00 |
| B | 20 | 50.00 | 10 kg | 25.00 | 5.00 | 20.00 | 100.00 | 5.00 |
| C | 5 | 100.00 | 20 kg | 50.00 | 10.00 | 5.00 | 165.00 | 33.00 |
| Total | 35 | 200.00 | 40 kg | 100.00 | 20.00 | 35.00 | 355.00 |
Check before you import anything: goods 200.00 + costs 155.00 = 355.00. If the allocated column totals do not equal the bills, a line was skipped or a rounding was lost.
Getting the numbers into Shopify
Shopify's product CSV has a Cost per item column; the required columns to update products are URL handle and Title, and with "Overwrite products with matching handles" ticked, "existing values will be replaced for all columns included in the CSV" (Shopify: using CSV files, Shopify: importing products). Two cautions from the same pages:
- A non-required column that is blank in your file overwrites the store value with blank; a column that is absent keeps the store value. So import a file with only the columns you need.
- If the SKU column is present without the Option1 name / Option1 value columns, Shopify deletes the variant options. Keep the option columns next to SKU.
A safe update file therefore contains Title, URL handle, the option name/value columns, SKU and Cost per item, built from your own products export. The landed cost calculator builds that file from a Shopify export and the allocated receipt, and shows the full allocation before any download.
FAQ
Should I include the bank's FX fee in landed cost?
It is directly linked to paying the supplier, so many sellers include it, spread by value. Some accountants book it as a financial expense instead. Pick one rule and keep it for every receipt.
What if the freight bill arrives after I received the goods?
Recalculate the receipt when the bill arrives and update Cost per item. Shopify's profit report only uses the cost recorded at the time of each sale (Shopify profit reports), so sales made before the update keep the old cost.
How do I handle a SKU that already has stock at another cost?
Use a weighted average: (units in stock × current cost + landed total of the new units) ÷ (units in stock + new units). Use the stock count from before the receipt.
Is the CSV import limited in size?
Shopify states that a product CSV can't exceed 15 MB; split larger files (Shopify: importing products).