A kitchen waste log has one line for everything that goes in the bin, gets eaten by staff or is given away: the date, the item and its lot, how much, the reason, what it cost, who recorded it, and what would have prevented it. Total it by reason and by item once a week, and the biggest line tells you what to change. In the month filled in below, a small kitchen threw away $105.24, and 44% of it was one thing: bread that didn't sell.
The short version
- Log it when it happens, by the bin, not from memory at the end of the week.
- Give every line a reason from a short fixed list, so the reasons add up.
- Put a cost on every line. A count of loaves doesn't change behavior; a dollar figure does.
- Read the totals weekly and fix the biggest one. Ignore the rest until it's fixed.
- In TaroStack, every write-off carries its reason, lot and cost, so this summary is a report. More below.
The columns
| Column | Why it's there |
|---|---|
| Date | So patterns by day show up (Monday's bread, the weekend's dairy) |
| Item and lot | The lot ties waste back to a delivery or a batch |
| Quantity and unit | In the unit you'd count it in |
| Reason | From a fixed list: unsold, expired, spoiled, damaged, dropped or spilled, quality reject, sample, staff meal |
| Cost per unit and value | What it cost you, not what you'd have sold it for |
| Recorded by | So a strange line has somebody to ask |
| What would have prevented it | The only column that saves money next month |
Samples and staff meals aren't waste in the usual sense, but they leave the shelf without a sale, and if they're not written down the stock count comes up short and nobody knows why. Put them on the log with their own reasons.
A month, filled in
Here's Windward Roots, the made-up taro business I use in these examples, in September 2026:
| Date | Item | Lot | Qty | Reason | Value | What would have prevented it |
|---|---|---|---|---|---|---|
| Sep 1 | Taro sweet bread | 260831 | 6 loaves | Unsold | $15.60 | Monday is slow: bake 18, not 24 |
| Sep 3 | Heavy cream | HC-0825 | 2 qt | Expired | $6.50 | Order 8 qt, not 12 |
| Sep 5 | Kūlolo | K260905 | 6 packs | Quality reject | $11.52 | Pan cracked: cool 20 minutes before cutting |
| Sep 8 | Bread flour | 2608-207 | 20 lb | Dropped or spilled | $10.00 | Bag split on the dolly |
| Sep 10 | Taro sweet bread | 260909 | 4 loaves | Unsold | $10.40 | |
| Sep 14 | Coconut milk | CM61207 | 1 can | Damaged | $2.25 | Swollen: should have been caught at the door |
| Sep 15 | Taro paste | TP-0908 | 3.2 kg | Spoiled | $12.29 | Made too much on the 8th |
| Sep 17 | Taro sweet bread | 260917 | 2 loaves | Sample | $5.20 | Market tasting: worth it |
| Sep 19 | Kūlolo | K260915 | 4 packs | Unsold | $7.68 | Market rained out |
| Sep 24 | Taro sweet bread | 260923 | 5 loaves | Unsold | $13.00 | |
| Sep 26 | Eggs | E-0922 | 1 doz | Dropped or spilled | $3.00 | |
| Sep 28 | Taro sweet bread | 260926 | 3 loaves | Staff meal | $7.80 |
The bread is costed at $2.60 a loaf, which is what the steps in recipe costing work out for it, and kūlolo at $1.92 a pack, the materials in one twelfth of a pan.
What the totals said
| Reason | Entries | Value | Share |
|---|---|---|---|
| Unsold | 4 | $46.68 | 44% |
| Dropped or spilled | 2 | $13.00 | 12% |
| Spoiled | 1 | $12.29 | 12% |
| Quality reject | 1 | $11.52 | 11% |
| Staff meal | 1 | $7.80 | 7% |
| Expired | 1 | $6.50 | 6% |
| Sample | 1 | $5.20 | 5% |
| Damaged | 1 | $2.25 | 2% |
| Total | 12 | $105.24 |
By item, taro sweet bread was $52.00 of it: 15 unsold loaves ($39.00), plus the tasting and the staff lunch.
So the month's lesson isn't spills or expired cream. It's that the bake is sized for a busier day than some days turn out to be. Three of the four unsold lines are bread. Baking six fewer loaves on the slow days would have saved most of $39 a month, and the production schedule example is how to size the bake by day instead of by habit. The taro paste is the second lesson: one batch made too big, $12.29 gone, and making paste twice a week instead of once costs nothing.
$105 a month sounds small. It's $1,263 a year, from a kitchen this size, and it's only what got written down.
Get the template
Download the waste log. It has this month filled in, a drop-down for the
reason, and a Summary tab that totals by reason and by item with SUMIF and COUNTIF, so a new line counts the
moment it's typed. It's a plain Excel file with no macros, and it works in Google Sheets, LibreOffice and Numbers.
Value =IF(OR(D2="",G2=""), "", D2*G2)
Value by reason =SUMIF('Waste log'!$F:$F, A2, 'Waste log'!$H:$H)
Keep the clipboard version by the bin and type it up weekly, or keep the sheet on a tablet in the kitchen. Either way, the log only works if writing a line takes less effort than not writing it.
Waste and your stock count
Every line on the log is stock that left the shelf. If it isn't taken off your records too, the next count comes up short by exactly the waste, and it'll look like a mystery. That's cause 3 in why inventory doesn't match. For the books, written-off stock isn't in your closing inventory, which is how it reaches your cost of goods sold; there's more on that in how to calculate cost of goods sold for a bakery.
Where this stops working
The log lives by the bin, and the stock records live somewhere else, so every line has to be written twice: once on the log and once as a write-off in the stock sheet. The second one is the one that gets skipped. The cost column needs a current price for every item, which goes stale. And the most expensive waste, stock that expires quietly at the back of the walk-in, only reaches the log after it's already lost.
How TaroStack does it
In TaroStack the waste log and the stock records are the same record. When something is thrown out, it's written off in the app with its reason (expired, spoiled, damaged, sample, lost and the rest), from the lot it came from, at what that lot actually cost you. The stock goes down as you record it, so the next count matches, and waste can be reported by reason, item and site whenever you want this month's totals. Corrections are recorded as corrections, and can be undone.
The bigger saving is the waste that never happens. TaroStack forecasts what will expire unsold at the rate each item really leaves each site, and what it will cost, so the taro paste is a warning on the 12th rather than a line on the 15th. Alerts for lots about to expire come to the app and your email, and expired or held stock stops counting as available, so it isn't sold or baked by mistake.
Write-offs, lots and expiry are on every plan, from $49 a month. The first 30 days are free, and your items import from a spreadsheet. If you'd like a hand setting up, ask, and we'll do it with you.
