How do serial numbers, lot numbers, or expiration-date tracking (common in specific verticals) migrate to Shopify's inventory model from a platform with native support for them?
Shopify's inventory model tracks a quantity per variant per location and carries no lot number, batch or expiry date. Regulated verticals keep that data in an app or an ERP, which then becomes the system of record for traceability. Freshly Batch Inventory prices at $24 per month for batch tracking with FEFO rotation (Shopify App Store, September 2026).
This page covers lot, batch and expiry tracking. Serial numbers are a different object with a different failure mode, and they have their own page on this thread. The short version of the difference: a lot number describes many units that share a history, a serial number describes one unit. Migrating them is not the same job.
Start with what Shopify's inventory model actually is
A Shopify inventory record is a quantity, attached to an inventory item, attached to a location. That is the whole shape. The InventoryItem object carries unitCost, countryCodeOfOrigin, provinceCodeOfOrigin, harmonizedSystemCode and customs data (per shopify.dev, September 2026). None of those is a lot, a batch or an expiry date, and there is no sub-unit below the variant to hang one on.
This is a design decision, not an oversight. Shopify's inventory model is built for a variant that is fungible. Lot tracking exists precisely because units are not fungible: two cases of the same SKU received six months apart are different things to a recall, an audit and a picker.
What that means for the migration, concretely
The answer is not "map the field." There is no field. The answer is a decision about which system is the system of record for traceability, and that decision has three defensible answers.
| Destination | Right when | What it costs you |
|---|---|---|
| A batch-tracking app on Shopify | Traceability is a business requirement rather than a regulated obligation with an auditor attached, and fulfilment happens in Shopify or a connected 3PL | App subscription plus the discipline of assigning batches at receipt |
| An ERP or WMS upstream of Shopify | An auditor, a regulator or a customer contract requires lot genealogy, and Shopify is a sales channel rather than the operational core | ERP cost, plus an integration that keeps quantities in step |
| Nothing, with expiry handled as a variant | Expiry is coarse, predictable and customer-visible, for example a dated seasonal SKU | Loss of unit-level traceability, which is fine until it isn't |
The third one is more common than the app market suggests and worth naming. A brand with a twelve-month shelf life and a single production run per SKU per season can encode the expiry into the variant and never need batch tracking. A brand with four runs a year, overlapping stock and a recall obligation cannot.
What a batch app actually does, priced
Freshly Batch Inventory rates 4.8 stars across 45 reviews and manages inventory by batch or lot number with expiry monitoring, FEFO and FIFO rotation, and traceability to batch level for recalls and audits. Pricing runs free for 10 products and 500 orders a month at one location, $24 per month for unlimited batches, $89 per month at the Advanced tier, and $199 per month for Shopify Plus with multiple fulfilment locations (per Shopify App Store, September 2026).
Read the tier names carefully. That $89 and $199 split is plan-gated, not volume-gated, which means the app's cost steps with your Shopify plan rather than with your batch count. Model it against the plan you will be on, not the one you are on.
We looked at the wider category and will not characterize it as a whole, because the Shopify App Store search endpoint has failed on every attempt across our last three research passes and we do not assert category-wide facts from a search result. What we can say from direct listing checks is that the quality spread is real: one batch-expiry app we checked today, BatchTrack, carries 0 reviews at 0.0 stars while advertising a $9.99 per month unlimited tier (per Shopify App Store, September 2026). Check the review count before the feature list.
FEFO is the requirement most briefs forget to write down
FEFO means first expiring, first out. It is not a reporting feature. It is a picking instruction, and it only works if the system that tells a picker which unit to take knows the expiry. On Shopify that system is usually the 3PL's WMS, not Shopify and not the app.
So the question to put to your 3PL before you buy anything: can you pick by expiry date, and what do you need in the order payload to do it? If the answer is no, a Shopify batch app gives you a traceability record and not a rotation control, and you should know which one you bought.
When NOT to put this on Shopify
- When an auditor is the consumer. A regulated traceability record belongs in a validated system with change control. An app subscription is not that, and it is not trying to be.
- When a 3PL already holds lot genealogy. Duplicating it in Shopify creates two records and one argument.
- When the requirement is really shelf-life reporting. That is a report, not an inventory model change.
- When you are mid-migration. Do not introduce a new inventory dimension in the same quarter you change platforms. One source of confusion at a time.
The Deploi point of view
Our own position, from building on Shopify. Separate from the facts above.
- Our take: The real question is never "how do I migrate lot numbers." It is "who is the system of record for traceability after the migration," and answering that first turns an impossible field mapping into a straightforward integration scope. We scored inventory-management-system on the basis that the operational core belongs where the operations are, and for regulated stock that is rarely the storefront (Deploi verdict, September 2026).
- What we insist on: Name the consumer of the traceability data before choosing a tool. An auditor, a customer, a recall process and a merchandiser want four different things, and only one of them is satisfied by a batch field in an app.
- Where we disagree: The standard advice is to pick a batch-tracking app and treat the gap as closed. That skips the rotation question entirely. An app that records which batch shipped, on a 3PL that picks by nearest bin, gives you an accurate record of the wrong unit going out.
- What this page adds: that Shopify's inventory model has no sub-variant object at all, so this is a system-of-record decision rather than a data mapping, and that FEFO is enforced at the picking system rather than in Shopify.
Reviewed by Martin Dejnicki, Director of SEO & AI Search. Facts verified 2026-09-14.
Where we worked this out
Our decision records