Stockroom
Early access · free

Track lots and expiry dates

Record the lot number and expiry date as stock arrives, sell the earliest-expiring batch first, print the lot on the label, and when a batch goes wrong, see which orders it shipped in. It applies only to the products you mark, and your stock stays in Shopify.

Capture

Record the lot when stock arrives

Lot tracking is off until you turn it on. It then applies only to the products you mark, so most of your catalog never shows a lot field.

  • Mark the products that need it. Track lots is a box on the product page, a bulk action on the Products list, and a column in the stock-settings CSV, so you can mark two hundred SKUs without opening two hundred product pages. Unmarked products are unchanged.
  • Lot, expiry and manufacture date at receive. On a delivery with marked items, the receive card shows Lot, Expiry and Mfg date columns. Type the batch as you count it. Each line takes one lot, so a two-batch delivery is two receipts. The same lot number on a later receipt joins the same lot.
  • On Shopify POS too. Receiving on Shopify POS captures the lot number on marked lines and still takes two taps. Expiry and manufacture dates can be added on the lot page afterwards.
  • From a build, or already on the shelf. A build of a lot-tracked product creates the output batch, with the number prefilled from the build. A stock adjustment can name a New lot, which is how you record stock that was already on the shelf before you turned tracking on.
  • Lot and expiry on the label. Tick Include lot number and Include lot expiry in the print dialog and they print on the reference line, with the expiry as EXP 2026-11-30, on every printer and layout the app supports.
  • The Lots view and lot page. Lots is a view in Inventory. Search by number, or filter by active, consumed, expiring within a window, or recalled. Open a lot to see where it came from, with the receipt and purchase order linked, every movement in and out, and any corrections you made to its dates.
At the order

First to expire, first out

The lot follows the stock to the order, so the expiry date decides which batch sells first.

  • Lots on the Shopify order page. A Stockroom - Lots block on every order lists its lot-tracked lines with a lot picker, prefilled with the earliest-expiring batch that still has units. Nothing is applied until you click Save. A line can be split across two batches when the first one runs out.
  • The pick list names the batch. With picking and packing, a lot-tracked line names the batch to take: the saved allocation, or the earliest-expiring one. Scanning the batch label confirms it.
  • Balances go down as you sell. The lot page's ledger shows Sold and the order number, linked to the order, so you can follow a batch from the delivery it arrived on to the orders it shipped in.
  • The Expiring lots report. Every dated lot still holding units, soonest first, with expired lots on top and lots, units and expired totals at the bottom. It exports to CSV like every other report and appears in Reports once lot tracking is on.
  • An alert before it expires. An Expiring lots rule in Settings > Alerts watches a 7, 14, 30 or 60-day window, scoped by vendor or tag, and shows up in your Slack or email digest with the expired batches first.
  • Corrections name the batch. A stock adjustment on a marked item picks the lot it moves. A stocktake variance picks its lot at review. A build consumes the batch you choose and creates the one it makes. A return to vendor draws down the batch you are sending back. Every document is linked from the lot page.
Recalls

See where a recalled batch went

Mark a lot recalled and the lot page shows every order and build it went into.

  • Mark it recalled. One action on the lot page, with the reason and the date. A recall is a status and moves no stock. Reinstate reverses it when the batch is cleared.
  • Recalled stock cannot be sold or consumed. The order block refuses new units from a recalled batch, the first-expiry suggestion skips it, and a build cannot consume it. You can still correct it, count it and send it back to the supplier.
  • Where this batch went. The recalled lot shows the orders that shipped its units, linked in your admin, and the batches built from it, so a bad ingredient can be traced to the finished goods it went into.
  • Unbuild and recover the rest. Unbuild a recalled batch of finished goods and the recovered components rejoin their own lots, with the numbers you give them. The unbuild is recorded on both lot pages.
  • History is kept. Every movement (receipt, sale, adjustment, stocktake, build, return) is a ledger entry with a note. Undo a receive or a build run and the reversal is added as a new entry. Nothing is deleted.
  • The same on go.stockroom.app. Lots, the lot page, the product-page card and the Expiring lots report are also in your Stockroom account, so a team member without a Shopify seat can work on the recall.
Limits

What lot tracking does not do

Things to know before you rely on it.

  • Lot balances are not written to Shopify. Shopify has no lot field, so Stockroom keeps its own record of lot balances and does not write them to Shopify. Your Shopify quantities are unchanged. A lot balance can drift from the Shopify number if stock moves in a way that does not name a batch. The corrections above bring it back in line.
  • Balances are per batch, not per location. A lot balance is one number across the store. A transfer between your locations does not change it, because Shopify owns transfer documents end to end. Per-location lot balances are not built yet.
  • Lots are consumed when the batch is assigned, not when the parcel ships. Saving the allocation on the order is what draws down the lot. A refund does not put units back on its own; correct the allocation or adjust the lot. There is no automatic first-expiry mode without a save, because that would need a fulfillment signal Shopify does not give apps.
  • One lot per line. A receive line, an adjustment line or a build component names one batch. A delivery of two batches is two receipts. A variance split across two batches is one lot pick plus a manual lot adjustment.
Questions

Common questions

Which products should I mark?

The ones a regulator, a customer or a recall would ask about: food, supplements, cosmetics, and anything with a use-by date or a batch code on the packaging. Unmarked products are unchanged, with no lot columns and no prompts.

Does turning it on change my Shopify inventory?

No. Lot tracking writes nothing to Shopify. Stockroom keeps its own record of batches, and your Shopify quantities still decide what is sellable.

We already have stock on the shelf. How do I record its batch?

Mark the product, then create a stock adjustment and choose New lot on the line. Type the batch number and save. You can set its expiry on the lot page. A batch received later under the same number joins that lot.

Does the expiry come off the label automatically?

No. You type the lot and expiry as you receive, or scan a batch label at picking to confirm the batch. Reading dates off packaging with a camera is not built.

What does it cost?

Nothing. Lot tracking is in early access and free, like the rest of Stockroom, with no trials and no credit card at install. Early access means we are still building it out and want to hear what you need next.

Free on the Shopify App Store

Try lot tracking free

Install Stockroom free from the Shopify App Store. No trials, no credit card.