TraceLot Logo
Integrations
Industries
PricingLog inBook a demoStart free

/

Expired stock

Stock movements

Expired stock

What happens automatically when a batch passes its expiry date, and how to clear it out.

Updated 2026-09-03

Tracelot doesn't wait for you to notice an expired batch. A daily job checks every batch's expiry date and zeroes out anything that's passed, so expired stock stops being offered to orders on its own.

A product's History tab showing a depleted batch alongside its expiry date
An expired batch in a product's History tab

What happens at expiry

Once a batch's expiry date has passed, Tracelot's expire-batches job writes an EXPIRY ledger entry that reduces its remaining quantity to zero — the note reads "Batch expired on {expiry date}." Source: tracelot-inventory/src/jobs/ExpireBatches.ts and BatchService.expireBatches in tracelot-inventory/src/services/batch/service.ts.

Because FEFO order allocation only ever considers batches with remaining quantity above zero, an expired batch is excluded from allocation as soon as it's zeroed — there's no separate "is this expired" check at allocation time, so a batch with stock left the day after its expiry date isn't skipped until the job runs. Source: findAvailableBatches in tracelot-inventory/src/services/allocation/service.ts.

Note

If a connected channel has been opted in to receive expired-stock updates (an account setting per channel connection), Tracelot also pushes the same zeroing to that channel. Otherwise, the change stays local to Tracelot. Source: findChannelsForExpirySync in tracelot-inventory/src/services/batch/service.ts.

Finding expired stock

Once the job has run, an expired batch shows up in its product's History tab — the same tab that lists any other batch with a remaining quantity of zero — rather than in Active. Its expiry date is still shown on the batch, so you can tell an expired depletion apart from one that simply sold through.

To catch batches before they expire, see Expiration risk and Stock alerts.

Disposing of it

The expire-batches job only zeroes the ledger balance — it doesn't delete the batch or remove it from your records. If you're physically discarding expired product and it still shows a remaining quantity (for example, you caught it before the daily job ran), record that with a correction using the reason Expired inventory and a negative quantity. If the stock is instead moving elsewhere — back to a supplier, or out of tracking entirely — use a transfer or the Returned to supplier correction reason instead.

Corrections · Expiration risk · Batches