Applies to: All tiers · Last reviewed: 2026-10-11
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 for a lot tracked product, enter the Lot # and the Expiry date alongside the product, location and quantity. Both are required.
- 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.
Whether a product asks for a lot is set on the product: turn on Lot tracked on its Edit Product form. A product without that setting has no lot or expiry fields on a receipt line, and its stock 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.
That note is on the order itself, and the Orders list shows a warning triangle beside the order. If the allocation is changed to a lot that is in date, the note goes.
How expiry shows where stock is handled
CanShip states a lot's condition in words on the screens where someone is about to handle it.
- Inventory. Beside the expiry date, a lot past its date is marked EXPIRED and a lot close to its date is marked Expiring. A lot with plenty of time left shows its date and nothing else.
- The picker. Under the product, the lot number is followed by the word and the date, for example "EXPIRED 2026-09-10" or "Expires 2026-10-26", so it can be matched against the date printed on the box.
- The Packing Station. Each lot in the tote has its own mark in the same words, with its quantity. Manage Inventory on an order line uses the same words: each bin in its Location list names the lot, then EXPIRED or Expires and the date.
Hover over a mark to see what it means for the job in hand. A lot expiring soon is fine to ship, and the mark asks you to check it is the oldest one you have. For an expired lot under the Warn policy, the mark says your company's policy allows shipping it and to check with a supervisor if unsure.
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 watch for that flag. The bell in the header reports it too, including when the bin was chosen by hand.
- 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