Shopify doesn't track batches on its own. It counts each product's units by location and by state (available, committed, unavailable, incoming), and there's no field for a batch number or an expiry date. So batch tracking in Shopify comes from one of four places: variants you make per batch (not recommended), Shopify's quality-control hold for a batch you're worried about, an app from the Shopify App Store that adds batches to your products, or a system where you make the product, which tracks the batch and sends Shopify the count.
The short version
- Don't make a variant per batch. It works for two batches and turns into a mess by the fifth.
- To stop a batch selling while you check it, move its units to Unavailable, Quality control. That's built in.
- For batches and dates on the products you sell, a Shopify app does it from free to about $25 a month.
- If a recall could start with an ingredient (a supplier's lot of pectin, flour or oil), you need batch records from the kitchen, which Shopify apps don't keep.
- TaroStack keeps those batch records from the kitchen, and connects to your Shopify store. More below.
Four ways to track batches in Shopify
1. A variant per batch
You add a variant called "Best by Mar 2027" next to "Best by Feb 2027". It needs no app, and that's the only thing going for it. Every batch becomes a new SKU, customers see choices they didn't ask for, reports split one product into many, and someone has to delete the old variant when it sells out. My advice: skip it.
2. The quality-control hold
Shopify lets you set units as unavailable for a reason: damaged, quality control, safety stock or other (Shopify). Those units stay on the shelf in Shopify's count but can't be sold. It doesn't know which batch they are, but if you've got 54 jars of a batch you're worried about, moving 54 to quality control stops them selling while you find out. Worth knowing even if you use an app.
3. A batch app
Several apps in the Shopify App Store add batches, lot numbers and expiry dates to your products, assign batches to orders (oldest first), warn before dates pass, and tell you which orders got which batch. They're the right tool if what you need to trace is the product itself.
4. Track batches where you make them
An inventory system that records batches from the kitchen knows the ingredient lots that went into each one, and sends Shopify the finished count. That's the only route where a recall can start at a supplier's lot and end at a customer.
The apps, side by side
From each app's listing in the Shopify App Store on September 26, 2026.
| App | Free plan | Paid plans | Worth knowing |
|---|---|---|---|
| Freshly Batch Inventory | 10 products, unlimited batches, 500 orders a month | Pro $24/month; Advanced $89/month; Plus $199/month | FEFO or FIFO assignment, batch traceability, optional expiry dates for customers. One location until the Plus plan. 4.8 stars, 46 reviews |
| LotTrack | None | $9.99/month (100 active lots, 2 locations), $29.99/month, $79.99/month | FIFO, FEFO and LIFO auto-allocation, recall cases and customer recall emails, QC hold. Two-week trial |
| BatchTrack | Up to 10 products | $9.99/month or $99.99/year, unlimited | Expiry dates and optional lot numbers, soonest-first dashboard, email alerts. No reviews yet |
| Batchly | 1 product | $15/month, all features | Expiration management and batch assignment to orders; unlimited locations. Two reviews |
One line in that table matters more than it looks. Freshly's free and Pro plans are for a single location, and multiple fulfillment locations are on Plus, "for stores on Shopify Plus". A maker who sells from a kitchen and a shop has two locations, so check the location limit before anything else.
A recall, worked through
You make guava jam. Two batches are in stock:
| Batch | Made | Jars | Best by | Sold so far | Left |
|---|---|---|---|---|---|
| J-0914 | Sep 14 | 96 | Mar 14, 2027 | 42 | 54 |
| J-0921 | Sep 21 | 96 | Mar 21, 2027 | 0 | 96 |
Shopify shows 150 available. On Saturday, the pectin supplier emails: lot P-2207 is being recalled.
With no batch tracking, you know you have 150 jars and that you've shipped a lot of jam. You don't know which jars used P-2207, so you're either pulling everything or guessing.
With a batch app, you can find the 42 orders that got J-0914, and hold the 54 jars that are left. But the app can't tell you whether J-0914 used P-2207, because it never saw the pectin. That answer is in the kitchen: a batch record, or a note on the batch sheet saying which pectin lot went in.
With batches recorded where you make them, you look up P-2207 and get the answer in one step: it went into J-0914 and not J-0921, 42 jars shipped to these customers, 54 on your shelf, and who to call. Then you move those 54 to quality control in Shopify so they can't sell while you sort it out. For the full exercise, practiced before it's real, see the mock recall example.
Where this stops working
A batch app is only as good as the batch numbers typed into it. If a new batch goes on the shelf and nobody adds it in the app, the app keeps assigning the old one, and your records will say customers got jam they didn't. The same is true of any system: the batch has to be entered when it's made, not when someone gets around to it.
About us: TaroStack isn't in the Shopify App Store. Each early store is connected by hand, with us, and orders arrive by import and a daily check rather than to the second, so it won't assign a batch at the moment of checkout the way an app inside Shopify can. What it does is keep the batch from the kitchen side, ingredients included. It connects to Shopify and Square only, and there's no live QuickBooks or Xero connection yet.
How TaroStack does it
The recall in this article started with the supplier's pectin, P-2207, and that's the case a Shopify app can't reach, because the app only knows the jars. TaroStack keeps the batch from the kitchen side. Receiving records each ingredient's lot and date, the supplier's code or yours. When a batch of jam is recorded, TaroStack takes ingredients from the lots that expire first and notes which ones it used, and the jam gets its own lot and best-by date. So P-2207 leads straight to J-0914 and J-0921.
From there it's one recall report: the batches the pectin went into, the customers who received them, what's still on your shelves, and who to call, and you can run timed, logged drills before you ever need it. Shipping picks the oldest lot by default, returns go back into the lot they left in so a recall still finds them, and a batch on hold stops counting as available while you check it.
Connect your Shopify store and we set it up with you. Lots, expiry and recalls are on every plan, from $49 a month, and recording batches against recipes is on Standard at $99. The first 30 days are free. If you'd like a hand setting up, ask, and we'll do it with you.
