Your COGS report says goods cost nothing
Why stock baselined from Shopify often has no cost, how to fill the costs in for every product at once, and why sales you have already shipped are re-costed automatically.
Updated 29 August 2026
You connected Shopify, synced your opening stock, and started selling. A few days later the COGS report shows sales, shows units, and shows a cost of goods of $0.00.
Nothing is broken, and nothing is lost. Here is what happened and how to put it right in a couple of minutes.
Why it happens
When you sync opening stock, Landara asks Shopify what each product costs. Shopify has a Cost per item field, and most stores leave it empty.
Where it is empty, Landara creates the cost layer anyway, at a cost of zero. That is the honest thing to do: you certainly hold the stock, so the quantity belongs in the ledger, and Landara will not invent a price for it. But it means anything you sell from that stock is costed at nothing, and your gross profit looks like the entire sale price.
This is not the same as uncosted units, which is a separate figure on the report. Uncosted means Landara had no cost layer to draw from at all. A cost layer that says zero draws normally, so the sale looks complete. The report now flags these separately, but if you are on an older report or looking at an exported CSV, that is the difference to watch for.
Fixing it
-
Go to Dashboard → COGS → Cost layers.
-
The layers with no cost are highlighted. Click set them all at once.
-
Type the real unit cost for each product, or paste a price list (one line per product: SKU, then cost, separated by a comma or a tab, so two columns copied out of a spreadsheet work).
-
Check the effective date, then Apply.
Each change is recorded in your cost change history with who made it, what it was before, what it is now, and when. That history is on the Cost Layers page.
Landara tells you what the change will do
Setting a cost one at a time, you will see the effect before you save it. It matters because a cost change does two things at once, and they land in different places.
| What moves | Where it goes |
|---|---|
| Inventory value, for stock still on the shelf | Nowhere. No journal is needed, because nothing ever told your accounting software the goods cost the old figure. It shows up as a smaller difference on your Valuation page |
| Cost of goods sold, for units this receipt has already sold | Your books. If the period has no journal yet, the next one is simply correct. If it does, you need a correction journal |
So a layer you have never sold from is a quiet change, and a layer you have been selling from is not. Landara says which one you are making before you commit, and asks for a reason once a receipt has started costing sales, because at that point you are restating a period you may already have reported.
Sales you have already shipped are re-costed for you
This is the part worth knowing, because it saves you looking for something that does not exist.
Landara never stores your COGS. It recalculates it from your cost layers and your Shopify movements every time you open the report. So the moment you set a cost, every sale that drew on that stock is re-costed, including orders you shipped days ago and orders that are long since delivered.
There is nothing to re-run, nothing to reprocess, and nothing to backdate. Refresh the report and the numbers are right.
If you already posted a COGS journal for those days at $0, Landara will now show you that your books and your ledger disagree, and by how much. Post a correction journal for the difference. Do not post the period again, because the units are already in your books and would be counted twice.
Some costs cannot be edited here, on purpose
You will notice that stock which came from a purchase order or supplier invoice has no Correct cost option. It offers Fix on the shipment instead.
That is deliberate. Those costs are not a price somebody typed; they are landed costs your shipment calculated, which is the supplier price plus that line's share of freight and duty. Two things follow:
- Editing the layer would not last. The next time you sync costs to Shopify, Landara recalculates that layer from the shipment and your edit disappears without telling you.
- It would be the wrong fix anyway. Changing the answer while leaving the workings alone means your shipment and your ledger disagree, with nothing to reconcile them.
If a landed cost is wrong, correct the quantities or costs on the shipment and calculate it again. Landara rebuilds the cost layers from the new result, and everything stays in step.
The other case: no cost layer at all
If Landara had no layer for a product when you sold it, the report shows those units as uncosted rather than as costing zero. Adding a cost layer afterwards fixes that too, but there is one thing you have to get right.
Date the layer when the goods actually arrived, not the day you got round to entering it.
Landara replays your receipts and your sales in date order, and a sale can only draw on stock that had arrived by then. That rule is there for a good reason: without it, an order could be costed against a delivery that had not turned up yet. But it does mean a layer dated after a sale will never cost that sale.
| You enter the layer | Dated | Sales on the 2nd and 3rd |
|---|---|---|
| On the 6th | The 6th | Stay uncosted. The stock had not arrived yet, as far as the ledger is concerned |
| On the 6th | The 1st, when it arrived | Costed correctly, automatically |
Every way of adding a layer lets you set the date: manual layers, Add from PO/invoice, and a shipment import.
Do not date a layer before your opening stock sync. That sync is a snapshot of everything you held at that moment, so stock received earlier is already counted in it. A receipt dated before it adds the same goods a second time and overstates your inventory from then on. If the stock predates your baseline, the baseline is where it belongs.
Bundles and multipacks
If you sell a bundle, a multipack or a "box of 6" built from a product you also stock on its own, how Landara costs it depends entirely on what your bundle app tells Shopify.
Most bundle apps break the bundle into its parts in the cart. A customer buys one box of six, and the order arrives in Shopify as the single product with a quantity of six. That is the behaviour you want. Landara sees your normal SKU, draws six units from its cost layers, and the sale costs correctly. There is nothing to set up.
A few keep the bundle as its own line. The order then arrives under the bundle's own SKU instead of the component's. Landara has no cost layer under that code, because you never bought anything under it, so the sale reports as uncosted even though the stock has genuinely left your shelf in Shopify.
Check this before you rely on it. Place one test order for a bundle, open the order in Shopify, and look at the line items. If you see the component product with a multiplied quantity, you are fine. If you see the bundle itself, tell us: those sales will show as uncosted on your COGS report and we would rather hear it from you than have you find it at month end.
Buying in cartons and selling singles is a different question. That one is about the supplier invoice rather than the sale: your supplier bills you for 10 cartons, and Shopify sells 60 singles. Adjust the quantity and unit price on the shipment before you calculate, so the line reads 60 at a sixth of the carton price. The total value stays the same, which is what your landed cost is spread on.
If the period is closed
If you have closed your books through a date that covers these layers, Landara refuses the change rather than quietly restating a period you have already filed. Correct it with a journal in the open period instead.