Guide

Can Shopify Track Two Costs for the Same Product?

L

Landara Team

Import Operations Experts

||10 min read
ONE PRODUCT, THREE PURCHASE PRICESA FIELDShopify Cost per item$10.00$11.40CURRENT$12.00One value. Each updateoverwrites the one before it.The units you sold at $10.00are now costed at $12.00.A LEDGEROne row per receipt12 MAR400 units @ $10.00OLDEST29 MAY600 units @ $11.4003 AUG500 units @ $12.00SALENothing is overwritten. A newdelivery is a new row.March units keep the March cost.Shopify counts your stock. The cost side needs the other shape.

No. Shopify stores one Cost per item on each variant, and a new value overwrites the old one. Buy the same product at $10.00 and later at $12.00 and only the most recent number survives, including for the units you already sold at the older price.

This is one of the most common questions asked by anyone who buys the same thing more than once: multiple locations, seasonal reorders, two suppliers for one product, or a buy-sell-trade store where the cost changes every week.

It is worth understanding why the answer is no, because the reason is not a missing checkbox. It is the shape of the data, and that determines which workarounds can possibly help.

Why Does One Product Have Two Costs?

Because you bought it twice. Nothing about the product changed, but the money you paid did, and there are more ways for that to happen than most catalogues allow for:

  • The supplier repriced. Raw materials moved, or your order quantity crossed a break.
  • The exchange rate moved. Same invoice in the supplier's currency, different number in yours.
  • Freight moved. One container at $5 a unit, the next at $3, for identical goods.
  • Duty moved. A tariff change repriced every shipment that landed after it.
  • You used a second supplier for the same item, at a different price.

So the same SKU genuinely has several true costs sitting in your warehouse at once. That is not an error to be tidied up. It is the actual state of your inventory, and any number that reduces it to one value is throwing information away.

What Happens When You Update Cost Per Item

Shopify gives each variant one field called Cost per item. It holds a single current number. When the second shipment lands cheaper or dearer and you update it, the previous value is not archived anywhere. There is no version history, no effective date, and no way to ask what the field said in March.

The consequence catches people out, because it works backwards as well as forwards. Every report built on that field, including Shopify's own profit reporting, prices every historical order at whatever the field says today. Update the cost after a price rise and last quarter's margin quietly gets worse, on sales that already shipped at the old cost.

A field is not a ledger

Shopify is not missing a setting here, it is missing a data structure. A field holds one value and overwrites. A ledger holds one row per event and never overwrites. You cannot reach the second by being more disciplined with the first.

What Is a Cost Layer?

A cost layer is one receipt of stock, recorded with the quantity you took in, what each unit cost, the date and the location. Every delivery creates a new layer rather than editing an old one, so nothing is ever overwritten.

When you sell, the layers deplete in a defined order. Under first-in-first-out that is oldest first, so the units you ship today are costed against the delivery that has been sitting longest. Sell 500 units when your oldest layer holds 400 and the sale draws 400 units at the old cost and 100 at the next one, which is the correct answer and one that a single field cannot produce.

This is why it matters for the questions you actually get asked. What did the units I sold in March cost, given they arrived in January? What is my stock on hand worth right now, when half of it landed at $11.40 and half at $12.00? What number goes to cost of goods sold this month? All three need history, and history means rows rather than a value.

Is a Cost Layer the Same as a Batch?

No, and the two get confused constantly because one event usually creates both. A delivery arrives and it is a batch and a cost layer at the same moment. They come apart immediately afterwards.

 Batch or lotCost layer
What it isA physical factA financial fact
Question it answersWhich physical units are these?What did these units cost?
Created byA production runA receipt of stock
CarriesProduction date, serial range, expiryQuantity, unit cost, date, location
Who needs itRegulators, recalls, traceabilityAccountants, valuation, margin
Two purchases, one runStill one batchTwo layers

Buy the same production run twice, three months apart, at different prices, and you have one batch and two cost layers. Split a single delivery across three locations and the batch is still one batch. Repack or rebadge and the physical identity survives while the cost identity changes.

Which one you need depends on who is asking. A regulator or a customer tracing a defect needs batches. Your accountant, your bank and your own margin report need cost layers. Food, pharmaceuticals and cosmetics need both, and they are two systems rather than one system wearing two hats.

There is one genuine overlap worth knowing. FIFO costing draws stock down in the same oldest-first order that expiry-dated goods physically ship, so the two often agree about which units left. That is a useful coincidence, not the same feature.

Four Workarounds, and Why They Fail

Every store that hits this problem tries at least one of these. Each fixes something real, and each has a cost worth knowing before you commit to it.

A Separate SKU Per Purchase

The most confident wrong answer in the category, and it is offered in good faith because it is technically true: a SKU with one cost is a cost you can trust.

In practice, if you carry 2,000 products and buy each three or four times a year, within twelve months you are carrying 8,000 SKUs. Your barcode stops identifying a product and starts identifying a purchase. Staff pick the wrong one. The storefront lists the same item four times. Your reorder report becomes meaningless, because demand for one product is split across four rows that look like four products.

And the original problem is not solved, only moved. The moment you sell one, you still have to work out which of the four it was. A SKU identifies a thing you sell; cost is a property of when you bought it. Overloading one with the other produces an item master nobody can use.

A Spreadsheet Beside Shopify

This is where almost everyone starts, and the maths in it is usually right. The formulas work. What fails is operational.

A spreadsheet cannot see a sale. Your store sells forty units today and the file has no idea, so the layers only draw down when a human remembers to draw them down. The freight invoice that arrives three weeks after the stock rarely makes it back into anything, because the units it belongs to have already shipped. And the moment two people touch the same file, or the person who built it leaves, the whole thing becomes archaeology.

Just Use Average Cost

Perfectly legitimate, and the default in most retail systems for a reason: average cost never errors. It always returns a number, never asks which delivery a unit came from, and never blocks anything.

The trade-off is that it blends. If your costs are stable and domestic, the blend is close enough to the truth that nobody is misled. If you import, and freight, duty and currency move between shipments, the blend hides exactly the movement you needed to see. It also does not help with the thing that triggered this question, because a rolling average still needs the receipts underneath it, and Shopify does not keep them.

Keep the Field Updated

The most tempting one, because it feels like a discipline problem. It is not. Updating Cost per item correctly, on time, every time, still destroys the previous value and still reprices your history. Doing it more carefully makes the current number better and the historical record no better at all.

WorkaroundWhat it fixesWhat it costs you
A SKU per purchaseEach SKU has one trustworthy costCatalogue bloat, split demand, mispicks, and you still have to know which sold
A spreadsheetReal per-receipt history, at no software costIt cannot see a sale, so it is only as current as the last person to update it
Average costOne defensible number, always availableBlends away the cost movement that mattered; still needs receipts underneath
Updating the fieldThe current cost is accurate todayReprices history every time, so old sales silently change margin

FIFO or Weighted Average?

Both are accepted accounting methods, and this choice comes after you have a ledger rather than before. Neither can be computed from a single field.

 FIFOWeighted average
Cost of a saleThe oldest unbroken receipt still on handA rolling average across all stock on hand
Best whenCosts move: imports, currency, tariffs, variable freightCosts are stable and domestic
Margin per orderTraceable to a receiptIndicative
EffortNeeds a layer per receipt, drawn down in orderNeeds the same receipts, then one calculation

If you import, FIFO usually earns its keep, because the whole point is that this container did not cost what the last one did. How to track FIFO COGS on Shopify covers the mechanics in more detail.

How to Get Per-Receipt Costs on Shopify

The workable answer is to leave Shopify doing what it does well and keep the cost history somewhere that is built for it. Shopify remains the source of truth for quantity, and a cost ledger sits beside it holding one layer per receipt.

That is the job Landara does. It connects to your store, creates a dated cost layer every time stock is received, and depletes those layers oldest first as orders ship, so every order is costed against what those specific units actually cost. Freight, duty and clearance are landed into the layer before it forms, which is what makes the number worth trusting in the first place: your cost of goods sold is only as good as your cost.

At month end it produces a ready-to-post Dr COGS / Cr Inventory journal for Xero or QuickBooks Online. You decide when it posts; Landara never writes to your ledger on its own.

It does not take inventory management away from Shopify, and it is not lot or expiry tracking. If you need batch traceability for a regulator, that is a different system and you should run both.

Frequently Asked Questions

Can Shopify store more than one cost for the same variant?

No. Shopify stores a single Cost per item value on each variant. It is one current number, and saving a new value overwrites the old one with no history kept. That is a data model decision rather than a missing setting, so no amount of care in the admin will produce a second cost for the same variant.

What happens to my old cost when I update Cost per item?

It is gone, and not only for future sales. Any report built on that field, including Shopify's own profit reporting, prices every historical order at whatever the field says today. Update it after a price rise and last quarter's sales quietly reprice themselves to the new, higher cost.

Is a cost layer the same as a batch or lot number?

No. A batch is a physical fact about which units were manufactured together, and it drives recalls, traceability and expiry. A cost layer is a financial fact about what a particular receipt of stock cost you, and it drives cost of goods sold and inventory valuation. One delivery often creates both at once, but they separate as soon as you buy the same production run twice at different prices.

Does creating a separate SKU for each purchase price work?

It gives every SKU a trustworthy cost, and it breaks almost everything else. Your barcode stops identifying a product and starts identifying a purchase, demand for one product splits across several rows so reorder reports stop meaning anything, staff pick the wrong variant, and the storefront lists the same item several times. It also does not answer the original question, because you still have to know which of them sold.

Do I need FIFO, or is weighted average good enough?

Weighted average is a legitimate accounting method and is enough for many stores with stable domestic costs. FIFO earns its keep when unit costs move: imported goods, currency swings, tariff changes, or freight that varies shipment to shipment. Both need per-receipt records underneath them, which is the part Shopify does not keep, so the choice of method comes after you have a ledger rather than before.

Can I just keep a spreadsheet of costs beside Shopify?

Many stores do, and it is where most start. The limit is not the arithmetic, it is that the spreadsheet cannot see a sale. Your store sells forty units and the file has no idea, so the layers only draw down when someone remembers to update them, and the freight invoice that arrives three weeks after the stock rarely makes it back into anything.

The short version: one product can have many costs, and Shopify can hold one of them. Everything else is a decision about where the other ones live.

One SKU, Every Cost It Actually Had

Connect your store and Landara costs every order against real FIFO layers, with freight and duty landed in, then hands your bookkeeper a ready-to-post journal. Free tier available.

Try Landara Free
L

Written by Landara Team

Import Operations Experts

The Landara team is dedicated to helping Shopify merchants and importers get finance-grade cost of goods sold without running an inventory system.

Related Articles

THE FORMULA DOES NOT COMPUTE COGS. IT BACK-SOLVES IT.TWO VERY DIFFERENT QUARTERSQuarter A750 units sold to customersnothing lostQuarter B700 units sold to customers50 units gone, nobody knows howTHE SAME THREE INPUTSBeginning inventory$4,800+ Purchases$9,600- Ending inventory$4,000COUNTED, NOT CALCULATED250 units on the shelf, either waybecause the 50 are not there to countONE ANSWERCost of goods sold$10,400Quarter A revenue $24,000Quarter B revenue $22,400$800 of loss, filed as cost of salesWhatever is missing from the count becomes cost of goods sold, by definition.And every receipt of stock arrives at a different price, so all three inputs are valuations.
Guide

COGS Formula: What It Calculates, and What It Hides

11 min read

THE ENTRY TAKES TEN SECONDS. THE AMOUNT TAKES A LEDGER.RECEIPTS OF STOCK12 March600 units, goods $6,000freight, duty, clearance $1,200$12.0028 April400 units, goods $4,800freight, duty, clearance $1,400$15.50MAY SALES, OLDEST LAYER FIRST450 units shipped150 x $12.00 = $1,800300 x $15.50 = $4,650$6,450the cost of the units that leftTHE JOURNALDr Cost of Goods Sold$6,450Cr Inventory$6,450A COST PER SKU WOULD HAVE SAID450 x $10.00 = $4,500$1,950 of margin you never hadEvery receipt of stock arrives at a different price, and your store keeps one.Cost of sales plus closing stock has to add back to what came in. A report never has to.
Guide

COGS Journal Entry: How to Prepare One You Can Defend

8 min read