When you lower stock outside an order - in the product's Pricing & stock or its Variants table, in the Prices & stock table of a product that sells by catalogue, with the bulk Sell by catalogue action, from a batch in «By batch» (or by deleting a batch entered by mistake), with a product or whole-site import, or from this tab - the decrease is recorded: which product, how many units, why, who did it, when and what the units cost. You always know why stock went down - especially with several people in the shop - and what the goods that never sold cost you. It works for every shop that tracks stock.
The records live in Products › Inventory › Write-offs.
What is not recorded
A deleted variant is not a decrease - it is not recorded; the same goes for a row of a catalogue product's price table that you remove, leave empty or switch to unlimited stock (∞). If units were damaged or went missing, write them off here with Write off.
The reasons
Every write-off has a reason, in two groups:
Not a loss
- Correction - you fix a number entered wrong. It is preselected.
- Sold elsewhere - you sold the goods in person or on another site. Their value is a cost of goods sold; enter the money as income. If you use the Profit report, that value counts there under Cost of goods, and the money with Add income.
- Returned to supplier - you sent the units back to the supplier, who refunds you or replaces them. In Profit, when goods are counted by purchase orders, their value comes off Purchase orders.
Loss
- Damaged, Lost or stolen, Expired, Sample or gift (the shop's own use too), Stock count (a count found fewer) and Other - «Other» requires a note.
Every reason also takes an optional note - for example «cracked lid» or an invoice number.
In Profit the losses are the Written-off stock line, at units × cost price on the write-off's date. An undone write-off does not count there.
What the losses cost you by reason, by product and by month - whether losses are rising, for example - is the Stock losses report in Reports.
The list
Each record shows its date, the product and its SKU, the units, the reason and the value:
- for a loss - what the units cost (units × cost price);
- for «Sold elsewhere» - the amount, marked «cost of goods»;
- for «Returned to supplier» - the amount, marked «not a loss»;
- for «Correction» - a dash: a fixed number is worth nothing;
- a product without a cost price shows a dash and «no cost price» - the value is unknown, not zero.
Press the arrow next to a record to see its note, the stock before and after, the date, who recorded it and where (the product editor - Selling, Variants or Catalogue, the bulk Sell by catalogue action, a product import, a whole-site import, a batch deleted or this tab), and in «By batch» the batch. A record from a row of the price table carries the row's name - for example «Phone case - Apple / iPhone 17 Pro».
Above the list you can search by product or SKU, pick one or several reasons, a period (the last 30 days by default) and an order - newest first, oldest first or highest value first. Download gives a CSV or Excel file with every record for the filters - handy for your accountant for scrapped goods.
Write off units
Write off takes units out of any product without opening it - after a stock count, for example. Pick the product (search by name or SKU), the units, the date, the reason and an optional note. The date is today by default; it can be earlier, never in the future. Before you save, the form says what the stock becomes and what the units are worth.
A product with variants is written off per variant - its stock lives there. A product with unlimited stock (∞) has nothing to write off.
A product that sells by catalogue is listed once. After you pick it, pick its Stock too - its own stock (Base values) or that of a model or group that keeps its own stock in the price table (for example «Apple / iPhone 17 Pro · 4 pcs»). A stock with 0 units cannot be picked.
Lowering stock in the product editor
When you lower the stock in Pricing & stock and save, you are asked why the stock goes down - «Correction» preselected, a note and a date. The decrease is recorded here. If you save without a reason (from an old open page, say), the decrease is still recorded - as «Correction». Raising the stock is not recorded.
The Pricing & stock card also lists the product's three latest write-offs (its variants' too). All in «Inventory» opens this tab with only its records - remove the filter with the product's name to see them all.
Lowering stock in the «Variants» table
When you lower the stock of one or more variants in the Variants table and press Save, you are asked one reason for all of them - «Correction» preselected, a note and a date. One variant shows as itself (before → after); several show as a list with each variant, how many units are written off and the total. Each decrease is recorded here as its own record, from «Product editor › Variants», and is undone on its own. If you save without a reason (from an old open page, say), the decreases are still recorded - as «Correction».
Not recorded: a rise, a new variant, a variant switched to unlimited stock (∞) and a deleted variant. In «By batch» a variant's stock comes from its batches - write units off from the variant's Batches.
A product that sells by catalogue
A product that sells by catalogue keeps its stock in two places: its own stock (the Base values row of the Prices & stock table) and each model or group you gave a stock of its own. When you lower one or more of them in that table and press Save, you are asked one reason for all of them - «Correction» preselected, a note and a date. One decrease shows as itself (before → after); several show as a list with each row of the table, how many units are written off and the total. Each decrease is recorded here as its own record, from «Product editor › Catalogue», and is undone on its own. Under the table you see the product's three latest write-offs.
Not recorded: a rise, a new row, and a row you remove («Custom» switched off), leave empty (it inherits from the row above) or switch to unlimited stock (∞).
The bulk Sell by catalogue action in Products › All products («Replace» mode) can lower stocks too - a product's own or a model's. Before it applies, it checks what goes down across all the selected products and asks one reason for all of it - with a list by product. The records come from «Products › Sell by catalogue». When nothing goes down (in «Merge» mode, say, which only fills empty values), the settings are applied straight away. A product whose stock lived on its variants until now gets a new stock of its own - that is not a decrease and is not recorded.
Lowering stock with a product import
When a spreadsheet you import in Import & export › Import › Products (or a Shopify export with "update it in place") lowers the stock of products or variants, the import preview lists every decrease (before → after) and asks one reason for the whole file - «Correction» preselected, a note and a date. Each decrease is recorded here as its own record, from «Product import», and is undone on its own. An import started without a reason records its decreases as «Correction». Increases are not recorded.
In «By batch» a lower stock from a spreadsheet is decided on the import's "Batches" step: Write off the difference takes the units from the oldest batch first - one record per batch, with the file's one reason. Details: Purchase orders.
Lowering stock with a whole-site import
An import in Import & export › Import › Full site under "Add missing" updates the Prices & stock table of the catalogue products the shop already has from the file. When the file lowers the stock of a model or group in that table, the decrease is recorded here from «Import › Full site» - as «Correction», dated the day of the import, because this import has no step to ask a reason in. The record carries who ran the import and is undone on its own - the units go back to the same row of the table. If units really were damaged or went missing, write them off here with Write off and the right reason before you import.
Not recorded: an increase, a new row, and a row the file removes, leaves empty or switches to unlimited stock (∞). The import does not change those products' own stock or their variants' stock.
«By batch (FIFO)»
When you keep stock in batches, the stock only changes through the batches. To write units off, open the batch's menu (three dots) in the product's Pricing & stock and press Write off - for a variant, the same sits in the variant's Batches, on the Variants tab. Or pick the product from Write off in this tab. Either way you choose the batch the units leave. The oldest (the one selling now) is preselected.
The units leave the chosen batch only - the others do not change, and the oldest keeps selling first. You cannot write off more than the batch has left.
A batch added by hand by mistake is deleted from its menu with Delete, while nothing has left it. Its units are recorded here as a «Correction» from «Batch deleted». More in Purchase orders.
Undo
If the units turn up, open the record and press Undo write-off. The units go back into stock (in «By batch», into the batch they left) and the record stays in the list as Undone, with who undid it and when.
Undo is not possible when the product was deleted, no longer tracks stock, or the batch the units left no longer exists (after switching how cost is counted, for example). The exception is a record from a deleted batch: undoing it brings the units back into stock but not the batch itself - they count in the oldest batch. If the batch was real after all, add it again with + Add batch instead of undoing. For a product that sells by catalogue the units go back to the row of the table they left - undo is not possible once that row no longer keeps a stock of its own (removed, empty or ∞).
On a phone
Each record is its own card - the product, the date and units, the value and the reason. Tap the arrow to open it; the undo and product buttons sit at the bottom.
Next step
How stock and low-stock alerts work: Variants & stock. Batches and purchase orders: Purchase orders.