The cost of goods sold journal entry moves the cost of what you sold out of inventory, an asset, and into cost of goods sold, an expense: debit Cost of Goods Sold, credit Inventory. How often you make it depends on your system. With periodic inventory, you make one adjusting entry at month end from your count: opening inventory plus purchases minus closing inventory. With perpetual inventory, every sale carries its own entry at the cost of the stock it used. A maker adds steps in between, as raw materials become finished goods. Below are both methods with numbers, the two common ways small businesses set up the periodic entry, a maker's perpetual entries, and write-offs.
The short version
- The entry: debit Cost of Goods Sold, credit Inventory, for the cost of what was sold.
- Periodic: one entry at month end, from opening + purchases − closing inventory.
- If purchases go straight to an expense account, the month-end entry adjusts inventory by the change instead.
- Perpetual: an entry with every sale, at the cost of the stock that left.
- A maker's batches move cost from raw materials to finished goods first.
- Waste and expired stock get their own entry, so they don't hide inside cost of goods sold.
- TaroStack gives you the numbers every entry needs: stock value at month end and the cost of each batch. More below.
The periodic method: one entry at month end
Windward Roots, the made-up taro business I use in these examples, counts and values its stock at the end of each month. October:
Opening inventory, Oct 1 $4,750.00
+ Purchases in October $6,400.00
− Closing inventory, Oct 31 $4,980.00
= Cost of goods sold $6,170.00
There are two common ways to book it, depending on where purchases go during the month.
Setup A: purchases go to Inventory. Each supplier bill is debited to Inventory. At month end, move the cost of goods sold out:
| Account | Debit | Credit |
|---|---|---|
| Cost of Goods Sold | $6,170.00 | |
| Inventory | $6,170.00 |
Inventory now reads $4,750 + $6,400 − $6,170 = $4,980, matching the count.
Setup B: purchases go straight to an expense account. Many small businesses' bookkeeping does this: each bill is debited to Cost of Goods Sold or Purchases as it comes in. Then the month-end entry only adjusts Inventory by how much it changed. Inventory rose from $4,750 to $4,980, so:
| Account | Debit | Credit |
|---|---|---|
| Inventory | $230.00 | |
| Cost of Goods Sold | $230.00 |
Cost of goods sold ends at $6,400 − $230 = $6,170, the same answer. If inventory had fallen, the entry would run the other way. Either way, the closing count drives the number, so the count has to be right; how to run it is in year-end inventory count.
The perpetual method: an entry with every movement
Inventory software that tracks cost keeps inventory current as things happen. For a maker, three entries do the work.
Buying ingredients and packaging. A delivery of taro, oil and pouches:
| Account | Debit | Credit |
|---|---|---|
| Inventory: Raw materials | $1,840.00 | |
| Accounts Payable | $1,840.00 |
Making a batch. A day's frying turns $812.00 of taro, oil, salt and pouches into 580 bags of chips. With $406.00 of labor and overhead included in the cost, as many accountants do for a maker, each bag costs $2.10.
| Account | Debit | Credit |
|---|---|---|
| Inventory: Finished goods | $1,218.00 | |
| Inventory: Raw materials | $812.00 | |
| Labor and overhead applied | $406.00 |
Selling. A grocer buys 240 bags at $3.41, and the bags cost $2.10 each:
| Account | Debit | Credit |
|---|---|---|
| Accounts Receivable | $818.40 | |
| Sales | $818.40 | |
| Cost of Goods Sold | $504.00 | |
| Inventory: Finished goods | $504.00 |
The second pair is the cost of goods sold entry, made at the moment of sale with the cost of the bags that left. Which cost that is (the oldest layer, or an average) depends on your valuation method, explained in what is inventory valuation. How finished goods are tracked from made to sold is in finished goods inventory formula.
Write-offs and waste
Expired, spoiled or damaged stock comes out of inventory too, and it's worth its own account so it doesn't hide inside cost of goods sold. Twelve bags of chips past their best-by, at $2.10:
| Account | Debit | Credit |
|---|---|---|
| Inventory Write-offs (or Spoilage) | $25.20 | |
| Inventory: Finished goods | $25.20 |
Some businesses report write-offs as part of cost of goods sold; either way, a separate account shows you how much is lost. The tax side of writing off expired stock is in expired inventory tax write-off. This is general information, not tax or accounting advice; your accountant decides how your books are set up.
Where this stops working
Every one of these entries depends on a number someone has to produce: the closing inventory value for the periodic entry, the cost of each batch and each bag for the perpetual ones, the cost of what was thrown out. On a spreadsheet, the closing value comes from a month-end count priced at whatever cost was last typed in, the batch costs are an estimate, and the write-offs are whatever someone remembered. The journal entry is tidy; the number in it is a guess.
How TaroStack does it
TaroStack keeps the numbers your accountant's entries need, from the receipt to the sale, at what things really cost.
Month-end inventory, without the count night. Stock value is kept at what it really cost, per site and per item, split by type (raw materials, packaging, finished goods), with a month-by-month history. The closing figure for the periodic entry, or the balances to check a perpetual one, are on a screen at any month end. Stock is costed in FIFO layers or moving average, chosen when you set up and locked once stock has moved, and every delivery carries its freight and other landed costs.
The cost of every batch and every sale. Each batch takes ingredients off stock at their actual cost and puts the finished goods on at what they cost, which is the raw-materials-to-finished-goods entry, worked out for you. Margins are reported per product on what each one actually cost, so the cost of what sold is a number, not an estimate.
Write-offs with reasons. Every adjustment carries its reason (expired, spoiled, damaged, sample, found, correction), so the losses report shows what was lost, by reason, item and site, and what it cost: the write-off entry's amount, ready. Every list exports to CSV for your accountant, and your QuickBooks or Xero lists import when you set up.
| The entry needs | On a spreadsheet | In TaroStack |
|---|---|---|
| Closing inventory value | A count, priced by hand | Stock value at any month end |
| Cost of each batch | An estimate | From the lots it used |
| Cost of what sold | Averages | Margins on actual cost, per product |
| Write-offs | Whatever was remembered | Losses report, by reason and cost |
Stock value, FIFO or moving average, landed costs and the losses report are on every plan, from $49 a month; batches that carry their actual cost into finished goods are on Standard at $99. The first 30 days are free, with no credit card. If you'd like a hand setting up, ask, and we'll do it with you.
