Roasted coffee doesn't spoil; it goes stale. Its aroma lives in oils and gases that start leaving the bean the day it's roasted, and oxygen dulls what's left. Whole beans in a one-way valve bag hold up for a couple of months; ground coffee goes flat in a couple of weeks. That's why roasters print a roast date as well as a best-by. In the example below, an Oregon roaster's sealed bags of whole beans passed every test through day 80, and they say best by 60 days from roasting, a 25% margin. Below is what ends roasted coffee's shelf life, how storage changes it, the study, the dates on the bag, and a free template.
The short version
- Roasted coffee goes stale; it doesn't spoil.
- Aroma leaves the bean from the day it's roasted.
- One-way valve bags let gas out and keep air out.
- Whole beans keep far longer than ground.
- Print the roast date and a best-by date.
- Run a real-time study and leave a margin before the date.
- TaroStack gives every batch its date from the shelf life you set. More below.
What ends its shelf life
| What ends it | What happens | What slows it |
|---|---|---|
| Staling | Aroma fades; the cup tastes flat and papery | Valve bags; whole beans; sell within weeks of roasting |
| Oxidation | Oils oxidize; stale, rancid notes | Sealed bags; little headspace; cool storage |
| Grinding | Exposes far more surface; stales in days | Sell whole bean; grind to order |
| Heat and light | Speed every change | Opaque bags; cool shelf |
Pricing a bag is in how to price coffee, and the roastery's food safety plan in coffee roasting haccp plan.
How it's stored
| Stored | In the example's tests | On the label |
|---|---|---|
| Whole bean, sealed valve bag, room temperature | Passed every test through day 80 | Best by 60 days from roasting |
| Ground, sealed valve bag | Flat by day 14 in a side study | Best by 14 days; ground to order only |
| Opened bag, rolled shut | Not part of the study | "Best within 2 weeks of opening" |
Cafés get whole beans within a week of roasting, which is when the roaster thinks it tastes best.
An example: a shelf life study
Driftwood Coffee Roasters, the made-up roaster in Bend, Oregon, I use in these examples, kept sealed 12-ounce valve bags of whole beans from one roast on a shelf and brewed two at each pull:
| Test | Pass if | Day 0 | Day 15 | Day 30 | Day 60 | Day 80 | Day 120 |
|---|---|---|---|---|---|---|---|
| Aroma score, 1 to 9 | at least 6 | 9 | 9 | 8 | 7 | 6 | 4 |
| Cup score, 1 to 9 | at least 6 | 8 | 9 | 8 | 7 | 6 | 5 |
| Stale or papery notes, 1 to 5 | at most 2 | 1 | 1 | 1 | 2 | 2 | 3 |
| All pass? | Pass | Pass | Pass | Pass | Pass | Fail |
Everything passed through day 80; at day 120 the aroma and cup fell below 6 and stale notes came through. The cup score rose in the first two weeks as the beans finished degassing. Taking a 25% margin off day 80 gives 60 days. How the pulls and margin are planned is in shelf life testing.
The date on the label
Coffee bags carry a roast date, which buyers look for, and a quality date: "Best by" or "Best if used by". In California, food made from July 1, 2026 that shows a quality date uses "BEST if Used by", in sell by date law, and how to write the date is in best by date format. The margins are in coffee business profit margin.
Get the template
Download the coffee shelf life study template. One sheet: the product, the lot tested, the day it was made, how it's stored and the margin to leave; then each test with its limit and the result at each pull. It marks each pull pass or fail, finds the last day everything passed, takes the margin off, and gives the shelf life for the label and the date for a batch made today. It's an ordinary Excel file with no macros, and it works in Google Sheets, LibreOffice and Numbers.
Where this stops working
The study gives one date for one coffee. Eight coffees, roasts four days a week, bags at cafés and on the website, and subscribers who want this week's roast: someone has to date each roast and send the freshest to subscribers and the oldest to the shelf first.
How TaroStack does it
TaroStack gives every batch its date from the shelf life you set, and sends the oldest out first.
Dates from the shelf life. Each coffee carries its shelf life in days, and each batch's lot gets its production date and the date that follows from it.
First-expired-first-out. Orders take the oldest lots first by default, and a café can be set to take only stock with enough days left.
What's coming up. A forecast shows what will expire unsold and what it costs, and anything thrown out is recorded with its reason, expired or spoiled, so waste shows by item.
| The job | Spreadsheet | In TaroStack |
|---|---|---|
| The date on a batch | Worked out by hand | From the shelf life, on the lot |
| Which batch goes out first | Dates on tape | First-expired-first-out |
| Stock with enough days for a café | Checked by hand | The customer's shelf-life rule |
| What expired last month | Not counted | Waste by reason |
Lots, dates, first-expired-first-out and the expiry forecast are on every plan, from $49 a month. 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.
