Inventory Shrinkage Accounting: Where Losses, Damage and Returns Belong on Your P&L
In 2021 I was showing someone an early profit report, and I used my own catalog as the example. “I had helmets that had really good margin, like 75%, and the actual margin was way lower because it was subject to high returns due to having size and colors.” I went on: “So it’s always subject to high returns and losses, customers return, it has scratches, et cetera.”
Nothing in my books was wrong in total. The cost of every scratched helmet and every unit that went missing was in there. It was just in the same line as the cost of the helmets I sold, so the line said one thing and the shelf said another. That is the whole subject of this guide. Inventory losses are real costs, and they need to be visible as what they are.
This guide covers what counts as a loss, where each kind goes, the journal entries with worked numbers, how returns and Amazon FBA fit in, the mistakes I see most often, and a short check you can run on your own books. The last part shows how SKU.io handles it, with the guides.
What counts as an inventory loss
Shrinkage is the gap between the stock your records say you have and the stock that is really there, when the gap is a real loss. People use the word loosely, so it helps to split it by cause, because each cause is a different fact about your business:
- Shrinkage, lost or stolen. Units that are gone and are not coming back. A count finds 30 fewer than the system expects.
- Damaged. Units that are still there but can’t be sold as new. Dropped in the warehouse, crushed in transit, or broken on the shelf.
- Expired. Units past their date. Common in food, supplements and cosmetics.
- Counting mistakes. A picker took the wrong item, a receipt was keyed short, a label was wrong. The stock did not leave. The record was wrong.
- Returns. A sold unit comes back. Some go back on the shelf, some can be sold as seconds, some go in the trash.
- Marketplace stock. Units at a marketplace’s warehouse that it loses, damages, sends back to you, or destroys on your instruction.
The first three are losses. The fourth is not a loss at all. It is a correction to a cost you already booked, and it belongs back in cost of goods sold (COGS). The last two are where most books go wrong, so they get their own sections below.
The standard: losses get their own lines, by reason
Here is the practice most ecommerce accountants expect. The inventory system records each adjustment and count with a reason. The reason decides the account. Shrinkage goes to an inventory shrinkage account. Damage goes to a damage write-off account. Expired stock goes to its own write-off account. Counting mistakes go back to COGS.
Where should those accounts sit? I keep them in direct costs, next to COGS and above gross margin. Some accountants put shrinkage below gross margin as an operating expense. I think that flatters the gross margin. If you sell physical goods, losing some of them is part of what it costs to sell them, and a buyer looking at your gross margin should see it. Whichever you pick, pick it once and keep it, so this month compares with last month.
The journal entries, with worked numbers
Take one month for an invented store. Revenue is $100,000. The cost of the units it shipped is $42,000. At month end it counts stock and records the gaps:
| Reason | Units | Unit cost | Cost |
|---|---|---|---|
| Lost or stolen | 30 | $12.00 | $360.00 |
| Damaged in the warehouse | 15 | $20.00 | $300.00 |
| Expired | 8 | $9.00 | $72.00 |
| Picking error (found 5 extra of one item) | +5 | $12.00 | −$60.00 |
The entries, one per reason:
| Entry | Debit | Credit |
|---|---|---|
| Lost or stolen | Inventory Shrinkage $360 | Inventory $360 |
| Damaged | Inventory Damage Write-Offs $300 | Inventory $300 |
| Expired | Expired Stock Write-Off $72 | Inventory $72 |
| Picking error | Inventory $60 | Cost of Goods Sold $60 |
Now look at what the P&L shows. With everything posted to COGS, it says COGS of $42,672 and a gross margin of 57.3%. With the losses on their own lines, it says product COGS of $41,940, shrinkage of $360, damage of $300 and expired stock of $72. The total is the same $42,672, and so is the gross margin.
That is the point people miss. Separate loss accounts don’t make you more profitable. They show you that you lost $732 of stock in a month, which is 0.7% of revenue, and they show you which kind. A rising damage line is a packing or handling problem. A rising shrinkage line is a security or receiving problem. You can’t act on either when both are hidden inside COGS.
There is more on the entries, including what to do when an account isn’t set up yet, in the inventory shrinkage journal entry guide. The difference between writing stock off and writing it down is in inventory write-off vs write-down.
Returns: what comes back, and at what cost
When a customer returns a unit, two separate things happen. The refund reverses revenue. The unit, if it comes back in a state you can sell, reverses its cost.
Say the store sold a unit for $50 that cost $20. When it comes back in new condition, the cost entry is:
| Debit | Credit |
|---|---|
| Inventory $20 | Cost of Goods Sold $20 |
When it comes back scratched, it can still be worth something. The usual answer is to restock it as a separate “blemished” product, so it never gets sold as new, and keep it at its original cost to start with. If it will only sell for $8, the $12 difference is a write-down, and it should be its own entry rather than a lower cost typed onto the unit. Keep it as a separate product and your average cost for the good units stays clean.
Units that come back unsellable add nothing to inventory. Their cost stays in COGS, where it went when the unit shipped.
Blemished stock has one more trap, and it is an operational one. It gets forgotten. Of the seconds in my own business, I said on a 2025 call: “I just wanted to get all this stuff off the books because before it was like forgotten about sometimes for like two years, three years.” A separate SKU makes those units visible, on reports and on counts. The rest is in accounting for returned inventory.
Amazon FBA: removals, losses and reimbursements
FBA stock is your inventory in someone else’s building. Three events at Amazon each need a different entry.
A removal you ask for is a transfer, not a sale. When Amazon ships units back to you, they are still yours. Their cost moves from FBA inventory to inventory in transit, then into your warehouse when they arrive. If you book the removal to COGS, you overstate COGS in the month Amazon ships and understate it when the units come back and sell again. I described how SKU.io values it on a 2024 call: “it’s not valued at Amazon anymore. This would be valued in the, in transit of your warehouse destination.” The worked entries are in FBA removal orders are transfers, not COGS.
A disposal or liquidation is different. You asked Amazon to destroy or sell off the units, so they are gone, and their cost leaves inventory.
A unit Amazon loses is a loss with two halves. The cost of the unit has to leave your FBA inventory. The cash Amazon pays you for it arrives on a settlement, next to your sales and fees. Those two halves are booked in different places, often weeks apart, and they rarely net to zero. Amazon does not always put lost units back in your stock when it finds them, either. As I put it on that same 2024 call: “When it’s found, they’re going to sell it themselves and undercut you and take the buy box.”
Two FBA items are harder to book than the rest. Reimbursements can arrive without the product they pay for, so the cost can’t follow the cash. And removal reports can change depending on when you run them.
Amazon’s reports have changed over the years. The question is still the right one to ask of every reimbursement: which units is this payment for? The practical fix for the second problem is simple. Run the removals report on the same day every month, for the month before, so the numbers you book are the numbers you can find again. Amazon FBA reimbursements in your books has the entries.
The mistakes I see most often
- Every loss in COGS. The total is right and nobody can tell what happened. This is the helmet problem.
- Every count difference treated as a loss. A mis-pick is not shrinkage. If counting mistakes go to the shrinkage account, the shrinkage line gets noisy and stops being useful.
- Writing a unit down by typing a new cost on it. It changes the average cost of the good units beside it. Keep the damaged unit as its own product and write it down there.
- FBA removals booked as COGS. Two months come out wrong instead of none.
- Treating Amazon’s “unsellable” as worthless. Amazon decides a unit is unsellable before anyone has looked at it. I said in 2024 that writing those down up front is “probably not worth it because then you’d have to make an assessment twice because you don’t really know the condition. It could be in perfectly new condition and Amazon just declares it unsellable until you actually get it returned.” Value it when you have seen it.
- No counts. Shrinkage you don’t count for is still there. It just shows up all at once in the month someone finally counts.
How to check your own books
You can do this in an hour with your accounting software and your inventory system side by side.
- Open last month’s P&L. Is there any line for shrinkage, damage or expired stock? If there isn’t, every loss is inside COGS or somewhere worse.
- Pull last month’s inventory adjustments. Does each one carry a reason? Total them by reason and compare that with the P&L. If the adjustments say $700 of damage and no damage line exists, you have found the gap.
- Find the counting corrections. Are mis-picks and receiving errors landing in a loss account? They should land in COGS.
- Tie inventory to the ledger. The inventory system’s stock value at month end should equal the inventory account in the general ledger. A difference that grows each month is often unrecorded losses.
- Check one FBA removal. Find a removal Amazon shipped back to you. Did its cost go to COGS, or through in transit? Then check one reimbursement: where did the cash go, and where did the cost of the lost units go?
- Check when you last counted each location. If you can’t answer that, any shrinkage number is a guess.
How SKU.io handles it
SKU.io keeps the inventory and works out the cost, and it posts summarized journals to Xero or QuickBooks Online. Your accountant still owns the ledger. Here is what it does with losses, and what it doesn’t.
Losses by reason
Mappings under Accounting → Settings → Nominal Code Mappings send losses to their own accounts. Shrinkage, Lost and Stolen go to Inventory Shrinkage. Damaged goes to Inventory Damage Write-Offs. Expired goes to Expired Stock Write-Off. Counting-mistake reasons, and a loss with no reason, go to COGS. Each line on a stock take carries its own variance reason, so one count can send some lines to shrinkage, some to damage and the rest to COGS. The mapping applies to losses you record from the day you set it. Anything already recorded keeps the account it first posted to, so a closed month doesn’t change. The steps are in the guide to sending inventory losses to their own accounts.
Returns
A return restocked as a separate blemished SKU posts Dr Inventory and Cr COGS at the same cost as a normal restock, in its own journal entry. On the inventory reconciliation, both kinds count under customer returns, so a receipt that mixes them still reconciles. The table of what each return choice does to stock and to the ledger is in the returns reconciliation reference. Note that SKU.io restocks the blemished unit at its original cost. A write-down below that is a separate decision.
Damage, in one step
You can record a damaged return or a damaged shelf item in one step. It moves to a blemished SKU, the loss is written down, and a draft credit claim to the supplier can be raised. The claim posts nothing until you authorize it, which you do once the supplier agrees. See capturing damaged items and claiming from the vendor.
FBA removals
A return-type removal order travels through Inventory In Transit, not COGS. When Amazon ships the units, their FBA cost moves to Inventory In Transit. When you receive them, it moves into the receiving warehouse at the receipt’s unit cost. Units you mark discarded go to your FBA inventory loss account. Disposal and liquidation orders still go to COGS. If your accountant wants disposals in a loss account instead, agree with them how to reclass those entries. The steps are in the guide to receiving FBA removal orders. There is no video for that guide yet.
Checking the totals
The books health check compares SKU.io’s figures with your Xero or QuickBooks trial balance month by month, including COGS and the inventory balance, and grades each difference. It is read-only and free. Count trust rates each warehouse’s counts month by month, from the physical counts you recorded. It does not cover FBA or AWD stock yet.
Who this is not for
If you sell under $1M a year on one channel, keep your stock in one place, and count it once a year, you don’t need a system to route losses by reason. A shrinkage account and a year-end count entry will do. Zoho Inventory or inFlow will hold the stock. If you sell through FBA and your own warehouse, and your accountant keeps asking what is inside COGS, book a demo and bring last month’s adjustments.
This is the losses part of the ecommerce accounting standards, the full list of what accountants expect from a seller’s books. The posts in this series each answer one question:
- Inventory shrinkage journal entry: lost, stolen and expired stock by reason
- Inventory write-off vs write-down
- FBA removal orders are transfers, not COGS
- Amazon FBA lost and damaged inventory: reimbursements in your books
- Blemished returns: accounting for returned inventory you can still sell
For the FBA side in more depth, FBA inventory reconciliation covers Amazon’s inventory ledger, and the accounting overview covers what SKU.io posts to the books.