Applies to: All tiers · Last reviewed: 2026-08-26
What this is
How to track stock by lot and expiry date, and how to hold a lot back so it cannot reach a customer. This matters if you handle food, supplements, cosmetics, medical supplies or anything else where a batch has to be traceable and a date has to be respected.
Recording a lot at receiving
Lot and expiry are captured per line on a receipt, not per product. That is deliberate: the same SKU arrives as different batches over time, and each batch has its own number and date.
- Build a receipt as usual at Inventory > Receipts.
- On each line, enter the Lot # and the Expiry date alongside the product, location and quantity.
- Confirm the receipt to apply the stock.
If one delivery contains two batches of the same product, add a line for each. You can send them to different bins on the same receipt, which keeps them physically separated as well as separated in the system.
Lot and expiry are optional. Stock received without a lot number cannot be traced by lot afterwards, so decide which products are lot controlled before the first delivery arrives rather than after.
Print receiving labels
Once a receipt is confirmed, a Print receiving labels button appears on it. This produces 4x6 labels carrying the quantity, lot, date and bin, so what is written on the pallet matches what is in the system. Label the stock as it comes off the truck and the lot stays identifiable on the floor.
Watching expiry dates
Reports > Expiry lists every lot in stock, soonest expiry first. It counts units and lots as Expired, Expiring and OK, and filters by client, by warehouse, and by how far ahead you want to look. Export it to CSV to send a client a list of what is ageing on their account.
Your dashboard also carries a lots expiring within 30 days counter under Stock Needing Attention, which is the quicker daily check.
Under the default Warn policy, if an order is allocated against a lot that has passed its expiry date, CanShip records a note on that order naming the lot and the date it expired. Treat that note as a backstop rather than as the control. The controls are the Block policy below, and quarantining expired stock so it cannot be allocated at all.
Choosing an expiry policy
One setting decides what allocation does about expiry. It is at Settings > Company > Allocation / Expiry > Lot expiry policy and it has three values. Products without lot tracking are unaffected by all three.
- Warn, the default. Picks the soonest-to-expire lot first, and flags the order if it had to allocate a lot that is already past its date. Expired stock can still go out under Warn, so that flag is your only signal.
- Block. Never allocates an expired lot. If that leaves nothing valid to pick, the order goes short instead. Nothing past its date can leave the building.
- Off. Ignores expiry and allocates by location order, which is how CanShip behaved before lot expiry existed.
If you fulfil under a licence, run Block. An order going short is a problem you can see on a screen and fix the same day. An expired unit arriving with a customer is not.
Quarantine, done properly
A quarantine bin is a location with Sellable turned off. Stock there still counts as on hand, so your numbers stay honest, but it can never be allocated to an order.
Turning off Pickable is not the same thing and will not hold stock back. Pickable off stops automated allocation only. A person can still allocate a non-pickable location by hand, which means expired or damaged stock in a non-pickable bin can still reach a customer. Pickable off is for an overstock or reserve shelf. Sellable off is for quarantine.
To quarantine a lot you already hold, create or pick a location with Sellable off, then move the stock into it with Inventory > Move Inventory. See Setting up locations and bins.
When something goes wrong with a batch
If a supplier issues a recall, or you find a problem with a batch yourself, Reports > Lot Recall traces the whole lot: what is still on hand and where, what is allocated to orders that have not shipped, and every recipient it has already gone to with carrier and tracking. See Tracing and recalling a lot.
What can go wrong
- A lot cannot be traced. It was received without a lot number. This cannot be fixed retrospectively, which is the argument for recording lots from the first delivery.
- Expired stock is still being allocated. It is sitting in a location that is still Sellable. Move it to a location with Sellable off.
- Stock is in a quarantine bin but still went out. Check the bin has Sellable off rather than only Pickable off.
- The Expiry report shows lots with no date. Those were received without an expiry. They are counted separately as No expiry so they are not mistaken for stock that is in date.
Was this article helpful?
That’s Great!
Thank you for your feedback
Sorry! We couldn't be helpful
Thank you for your feedback
Feedback sent
We appreciate your effort and will try to fix the article