Batch and lot tracking for Shopify, with FEFO built in

Shopify pools every unit of a SKU into a single available quantity per location — it can't tell a batch that arrived last week from one that arrived three months ago. Smart Restock keeps a batch ledger alongside your Shopify inventory and depletes it first-expired-first-out (FEFO) as you sell, so the oldest stock actually leaves first instead of sitting behind fresher deliveries.

Start Free Trial — 14-day free trial on Starter plan, no credit card required.

Why batch tracking needs its own ledger

When a sale or adjustment lowers a SKU's available quantity, Shopify only reports the new total, not which batch it came out of. Smart Restock keeps a separate record of every batch you've received, per SKU and per Shopify location, and works out which batch a given sale drew from behind the scenes. You don't do anything differently at checkout or in Shopify admin; the ledger runs on its own.

A batch is born when you post a supplier invoice — the received quantity, unit cost, and, if the invoice has one, expiry date all get recorded together, so a batch is never disconnected from what you actually paid and received.

How FEFO depletion works

FEFO means first-expired, first-out: as stock sells, Smart Restock deducts from the batch with the soonest expiry date before touching anything fresher. If you've got three batches of the same SKU with different dates, the one closest to expiring is drawn down first, automatically, with every sale.

This matters because FIFO (first-in, first-out by receiving date) and FEFO (by expiry date) aren't always the same batch. A later-arriving shipment can have an earlier expiry date than one that's been sitting in the warehouse longer. Smart Restock always follows the date, not the delivery order.

Batch tracking per Shopify location, with unassigned stock flagged

Batches are tracked per Shopify location, so the same SKU held at a warehouse and a retail store carries two separate batch pictures: separate expiry dates, separate remaining quantities, separate FEFO depletion order. A stock increase Smart Restock can't match to a known receipt — a transfer, a recount, a correction — is routed into an unassigned batch you resolve later, rather than silently guessed at or dropped.

Related pages

Batch and lot tracking is the foundation under expiry date tracking and automatic markdown of expiring stock — see the full picture on perishable inventory management. It also runs on the same per-location model as multi-location inventory and cost tracking, and pairs well with low stock alerts.

Frequently asked questions

What is FEFO and how is it different from FIFO?

FEFO (first-expired, first-out) depletes the batch with the soonest expiry date first. FIFO (first-in, first-out) depletes by receiving date instead. The two can disagree — a newer shipment can expire sooner than older stock — so Smart Restock always follows the expiry date, not the delivery order.

How does Smart Restock know which batch a Shopify sale came from?

Shopify reports a new available quantity after every sale or adjustment. Smart Restock compares it to the last known quantity and deducts the difference from the soonest-expiring active batch for that SKU and location — no scanning or manual batch selection required at checkout.

Can I track batches per Shopify location?

Yes. Every batch is tied to a specific Shopify location, so the same SKU at two locations has independent expiry dates, quantities, and depletion order.

What happens to a stock increase Smart Restock can't match to an invoice?

It's recorded as an unassigned batch — no expiry date, flagged on the dashboard — so you can assign a date to it or merge it into an existing batch later.

Do I need barcodes or lot-number scanning to use batch tracking?

No. Batches are created automatically when you post a supplier invoice — no scanner or separate lot-numbering system required. Add or edit expiry dates on the dashboard for anything the invoice didn't include.