FEFO vs FIFO: which stock to issue first
FEFO (first expired, first out) means you issue the batch with the earliest expiry date first, even if it arrived later. FIFO (first in, first out) means you issue the oldest delivery first. The two give the same pick until a later delivery has an earlier expiry date, and then FIFO lets stock expire on the shelf. For anything with a shelf life, follow FEFO.
The difference in one table
| FIFO | FEFO | |
|---|---|---|
| Issue first | the delivery received first | the batch that expires first |
| Date it reads | receipt date (GRN date) | expiry or best-before date |
| Use it for | goods without an expiry date: packaging, spare parts, hardware | food, drinks, medicines, cosmetics, chemicals, adhesives, anything with a shelf life |
| What it prevents | old stock ageing at the back of the store | stock expiring on the shelf while newer stock is issued |
| What it needs | a receipt date on each pallet or bin | batch number and expiry date recorded at receiving and on every label |
Worked example: FIFO loses 50 units, FEFO loses none
A store has two batches of the same item, 100 units each. The second delivery came from a supplier who sent older stock, so it expires first.
| Batch | Received | Expiry | Qty |
|---|---|---|---|
| A | 1 March | 30 June | 100 |
| B | 5 March | 15 May | 100 |
From 6 March the store issues an even 15 units a week (about 2.1 a day), and no new stock arrives.
| FIFO: A first, then B | FEFO: B first, then A | |
|---|---|---|
| First batch used up | A, about 22 April | B, about 22 April (before its 15 May expiry) |
| Second batch | B from 22 April; only about 50 units are used by 15 May | A from 22 April; all 100 used by about 8 June (before 30 June) |
| Expired and written off | about 50 units of B | none |
The same 200 units, the same demand, the same dates. The only difference is which batch the picker took first. The working: 100 units at 15 a week last 100 ÷ 15 × 7 ≈ 47 days, so the first batch runs out on about 22 April; from 22 April to 15 May is 23 days, enough for about 49 units, so about 50 are left to expire.
How to run FEFO in a warehouse
- Record batch and expiry at receiving. Write both on the goods received note for every line, as dates, not as text. A batch without an expiry date cannot be issued by FEFO. See the goods received note guide.
- Label every pallet and bin. Put the expiry date in large print on the side the picker sees. Do not mix two batches in one location unless your records hold both.
- Slot so the earliest expiry is easiest to reach. When a new pallet arrives with a later expiry, it goes behind or above the existing one, never in front.
- Tell the picker which batch to take. Sort the pick list by expiry date, so the choice is not left to whichever pallet is nearest.
- Review near-expiry stock every week. List every batch expiring in the next 30, 60 and 90 days and act early: sell or use it first, move it to a faster site, or return it to the supplier if your agreement allows.
- Block expired stock. Move it to a quarantine or damaged location so it cannot be picked, and record the write-off.
- Check the customer’s shelf-life rule. Many customers only accept goods with a minimum remaining shelf life. Stock below that limit cannot be sent to them even before it expires.
FEFO in an Excel stock sheet
Keep one row per batch with its item code, batch number, expiry date and quantity on hand. With the expiry date in column D, add two columns:
| Column | Formula (row 2) |
|---|---|
| Days left | =IF(ISNUMBER(D2),D2-TODAY(),"No date") |
| Status | =IF(NOT(ISNUMBER(D2)),"CHECK DATE",IF(D2<TODAY(),"EXPIRED",IF(D2-TODAY()<=30,"NEAR EXPIRY","OK"))) |
Sort the sheet by item code, then by expiry date, oldest first. The first row of each item is the batch to issue. “CHECK DATE” catches expiry dates typed as text, the most common reason FEFO fails in a spreadsheet.
Common mistakes
- Using the receipt date as if it were the expiry date. A later delivery can expire first, as in the example above.
- Putting the new pallet in front. The older batch behind it is forgotten until it expires.
- Expiry dates typed as text. Excel cannot sort or compare a date typed as text; check that the column holds real dates.
- Different date formats. 05/03 is 5 March in most of the world and 3 May in the US. Use one format on labels and in your records, such as 05-Mar-2026.
- Counting expired stock as available. It stays in the balance until it is moved and written off, so reorder figures look better than they are.
Written and checked by a warehouse supervisor with about 15 years of hands-on experience. Last updated: November 2026. See the methodology.