Inventory accounting for Amazon sellers: why purchases aren't an expense
If you’ve ever categorised a supplier payment as “Cost of Goods Sold” the day it left your bank account, you’ve made the single most common mistake in Amazon seller bookkeeping. It’s an easy mistake to make, because it feels intuitive — you bought inventory, inventory is for selling, so it must be a cost of selling. It also quietly breaks every number that depends on it.
Inventory is an asset, not an expense
When you buy inventory, you haven’t incurred a cost yet — you’ve converted cash into a different kind of asset. You still have the value; it’s just sitting on shelves instead of in your bank account. That’s why, on a proper balance sheet, inventory is an asset, not an expense.
The expense — cost of goods sold — doesn’t happen until the unit actually sells. That’s the point at which the value leaves your business in exchange for revenue, and it’s the only point at which “cost” and “sale” can be matched against each other.
Get this sequencing wrong and two things break at once.
Gross margin becomes meaningless. If you expense $10,000 of inventory the month you bought it, but only sell $3,000 worth of it that month, your books show a terrible month that didn’t actually happen — you spent cash on an asset, you didn’t lose money.
The balance sheet becomes wrong. If purchases go straight to expense, inventory never appears as an asset at all. Ask what a seller’s business is actually worth, inventory included, and the books simply can’t answer.
A worked example
Say you buy 100 units of a SKU at $8 each landed (more on “landed” in a moment). That’s a $800 purchase.
Wrong way (purchases as expense):
- Day of purchase: $800 hits “Cost of Goods Sold.” Your P&L takes an $800 hit immediately, whether or not you’ve sold a single unit.
- As units sell: no further cost is recorded, because it was already expensed. Revenue from each sale drops straight to the bottom line with no matching cost, overstating margin on every sale after the purchase.
Right way (purchases as inventory asset):
- Day of purchase: $800 moves from cash to inventory on the balance sheet. No P&L impact yet — you’ve swapped one asset for another.
- As each unit sells: $8 moves from inventory to cost of goods sold, matched against that unit’s revenue in the same period. Sell 30 units this month, and this month’s COGS is $240 — not $800, not $0.
The right way produces a P&L that reflects what actually happened each month, and a balance sheet that shows the 70 remaining units are still worth something.
What “landed cost” actually includes
The $8 in that example isn’t just the supplier’s unit price. Landed cost means everything it actually costs to get one sellable unit into inventory:
- Supplier price — the invoice cost per unit
- Inbound freight — shipping from supplier to you or to Amazon
- Duty — import tariffs, if applicable
- Prep — labelling, poly-bagging, bundling, whatever Amazon or your process requires before the unit is sellable
- Inbound placement fees — Amazon’s per-unit fee for the FBA inbound placement option you choose
Use only the supplier’s unit price and you’ll systematically understate cost — sometimes by a lot, especially on low-cost, high-freight items where inbound shipping can be a third of the landed cost or more. A product that looks like it’s making 35% margin on supplier price alone might be making 20% on true landed cost.
Moving weighted average, in one sentence
Most sellers buy the same SKU multiple times at different prices as supplier costs and freight rates change. Moving weighted average cost means every new purchase blends into a single running average cost per unit, recalculated each time you buy — so the cost released to COGS when a unit sells reflects a fair blend of what you’ve actually paid over time, not just the most recent invoice or the oldest one sitting in a spreadsheet.
It’s the standard, defensible method for exactly this situation, and it’s what makes cost-per-unit stay accurate as purchase prices move.
Why this matters more than it sounds like it should
Get inventory accounting wrong and every number downstream is wrong with it: gross margin, per-SKU profitability, the balance sheet, even cash flow forecasting, because “how much inventory do I actually have tied up, and what’s it worth” is a question the books can’t answer if purchases were never capitalised in the first place.
This is also the exact gap that turns an Amazon accountant’s job into archaeology every time a client hands over books at tax time — reconstructing what should have been tracked as inventory from a pile of expensed purchase transactions.
SellerTally treats every purchase as an inventory asset from day one: landed cost captured at purchase, moving weighted average maintained automatically, cost released to COGS only when the unit sells. It’s not a setting to configure correctly — it’s the only way the ledger works, which is the point.