Honey keeps for years because it's low in water and high in sugar, so microbes can't grow in it, as long as its moisture stays low. Honey that's too wet, above about 18.6%, can ferment; that's why beekeepers extract capped frames and keep jars sealed. Honey also crystallizes, which isn't spoilage, and slowly darkens and loses aroma, which is why jars carry a best-by date at all. In the example below, a Wisconsin beekeeper's jars passed every test through day 960, and they say best by 720 days, a 25% margin. Below is what ends honey's shelf life, how storage changes it, the study, the date on the label, and a free template.
The short version
- Honey keeps for years if its moisture stays low.
- Above about 18.6% moisture, honey can ferment.
- Crystallizing isn't spoilage; gentle warmth liquefies it.
- Darkening and fading aroma set the date.
- Keep jars sealed: honey takes up moisture from the air.
- 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 |
|---|---|---|
| Fermentation | Wet honey froths and sours | Extract capped frames; check moisture with a refractometer; seal jars |
| Crystallizing | Turns solid and grainy; not spoilage | Gentle warming; creamed honey sells it on purpose |
| Darkening | Color deepens and flavor turns heavier over months | Cool, dark storage; never overheat when bottling |
| Taking up moisture | An open jar pulls water from the air | Tight lids |
What goes on the jar is in how to label honey for sale, and the jars in how to package honey for sale.
How it's stored
| Stored | In the example's tests | On the label |
|---|---|---|
| Sealed jar, room temperature | Passed every test through day 960 | Best by 2 years |
| Sealed jar, in a warm shop window | Darker and stronger by month 8 | Labels say store away from heat and light |
| Refrigerated | Crystallized within weeks | Not recommended on the label |
Many beekeepers also print "Do not feed honey to infants under one year of age," which has nothing to do with shelf life and everything to do with the customer.
An example: a shelf life study
Kettle Moraine Apiary, the made-up beekeeper in West Bend, Wisconsin, I use in these examples, kept sealed 12-ounce jars from one extraction on a shelf at room temperature and opened one at each pull:
| Test | Pass if | Day 0 | Day 240 | Day 480 | Day 720 | Day 960 | Day 1200 |
|---|---|---|---|---|---|---|---|
| Flavor score, 1 to 9 | at least 6 | 9 | 9 | 8 | 8 | 7 | 6 |
| Color change, 1 to 5 | at most 3 | 1 | 1 | 2 | 2 | 3 | 4 |
| Moisture, % | at most 18.6 | 17.2 | 17.2 | 17.3 | 17.3 | 17.4 | 17.4 |
| Signs of fermentation | at most 0 | 0 | 0 | 0 | 0 | 0 | 0 |
| All pass? | Pass | Pass | Pass | Pass | Pass | Fail |
Everything passed through day 960, more than two and a half years; at day 1,200 the color had darkened past the limit. The jars crystallized along the way, which the study didn't count as failing. Taking a 25% margin off day 960 gives 720 days, two years. How the pulls and margin are planned is in shelf life testing.
The date on the label
Honey's date is a quality date: "Best by" or "Best if used by". In California, food made from July 1, 2026 that shows a date uses "BEST if Used by" for quality, in sell by date law, and how to write the date is in best by date format. Pricing a jar is in how to price honey.
Get the template
Download the honey 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 honey. Wildflower, basswood and a creamed honey, extractions all summer, jars at three shops: someone has to date each extraction and send the oldest jars 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 honey 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 shop 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 shop | 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.
