A gift set looks like one product on the order — and like three products on the shelf. That gap is where naive batch tracking breaks: the order line names a single bundle SKU, but what actually leaves the building is several physical items, each drawn from its own lot with its own expiry. Component-level allocation is the only way to keep traceability intact through a bundle, and this guide explains how it works for multipacks, mixed kits, and sample boxes.
Why bundles break naive batch tracking
Most batch tracking assumes a tidy one-to-one world: one order line, one SKU, one lot deducted. A bundle violates that on every axis. The customer buys “Skincare Trio,” the channel reports one line of one SKU, and yet the warehouse ships a cleanser, a serum, and a moisturizer — three physical products, three lots, three expiry dates. If your system deducts stock only at the bundle level, the component lots never move on paper. The ledger says you still hold serum from lot S-0221 long after it shipped, and when you need to know which customers received that lot, the answer simply is not recorded anywhere.
This is not an edge case. Gift sets, variety packs, subscription boxes, and starter kits are among the highest-margin listings on Shopify stores — and they are precisely the listings where lot records evaporate first.
Component-level allocation: one order line, several lots
The fix is structural: allocation must happen per component, not per bundle. When a bundle order arrives, the system explodes it into its component SKUs and assigns each component its own lot — ideally the earliest-expiring one, via FEFO allocation. A three-item gift set therefore carries three lot assignments, and the batch ledger records three deductions, each tied back to the same order reference. Correct component-level allocation means:
- Every bundle SKU has a component mapping — an explicit bill of materials listing which SKUs, in which quantities, make up the bundle.
- Each component line gets its own lot assignment at order time, chosen by expiry date, not just its own stock deduction.
- The order record stores all component lots, so the shipment is traceable piece by piece, not as an opaque bundle.
- Stock levels move at the component level, so bundle sales and single-unit sales draw down the same lots consistently.
A bundle expires when its first component does
Because a bundle is several dated products in one box, its effective expiry is the earliest component expiry. A gift set holding lots that expire in 14 months, 9 months, and 4 months is a 4-month product, whatever the label on the outer box implies. This matters for rotation and for promises to customers: sellable life calculations, discount decisions, and any minimum-shelf-life commitments must all key off the shortest-dated component. It is also the strongest argument for FEFO at the component level — allocating a fresh cleanser next to a short-dated serum wastes the cleanser’s shelf life.
Recalls with bundles: finding every box that contains the lot
A recall is where bundle tracking is truly tested. Suppose one component lot — say a batch of serum — is contaminated. Some of that lot shipped as standalone units; the rest shipped inside gift sets under a different SKU. If your records stop at the bundle level, the standalone orders are findable and the bundled ones are invisible, which means the recall is incomplete by construction. With component-level records, the question becomes mechanical: find every order — bundle or not — that consumed lot S-0221, and contact those customers. That query is the core of recall readiness, and it is worth rehearsing before you need it with a mock recall exercise.
Multipacks, mixed kits, and sample boxes
Not all bundles are equally hard. A multipack (six units of the same SKU) usually draws all units from one lot, so it needs one assignment per pack — the simplest case. A mixed kit (different SKUs boxed together) needs one lot per component, as above. A sample box or variety pack is the hardest: many small components, sometimes rotating contents, each still deserving its own lot line. The rule that covers all three: however many distinct dated products go in the box, that is how many lot assignments the order must carry.
PRE-KITTING CREATES A TRANSFORMATION
If you assemble kits in advance rather than at pick time, the assembly itself is a traceability event: the kit becomes a new unit whose record must link back to the component lots that went into it. Skip that link and pre-built kits become anonymous stock — fine to sell, impossible to recall.
The three pitfalls that erase bundle traceability
| Pitfall | What goes wrong | Fix |
|---|---|---|
| Bundle sold as one SKU with no component mapping | The system has no idea which physical products the order contains | Define a bill of materials for every bundle SKU before it goes live |
| Stock deducted only at bundle level | Component lot balances drift from reality; ledger shows stock that already shipped | Explode bundle orders and deduct each component lot individually |
| Component lots not stored on the order | Recalls cannot find bundle orders that contained the affected lot | Record every component lot against the order reference at allocation time |
Bundles that allocate themselves, component by component
TraceLot explodes bundle orders into components and assigns each one its earliest-expiring lot automatically as orders sync from Veeqo or Shopify — so every gift set ships fully traceable.
See FEFO allocation for bundlesHow TraceLot handles bundles
TraceLot treats a bundle order as what it physically is: several components leaving the shelf. As orders sync from Veeqo or Shopify, each component in the bundle is allocated its own lot by FEFO, and the per-lot batch ledger records each deduction with the order reference attached. Because the records live at the component level, the one-click recall CSV for any lot naturally includes bundle orders that consumed it — no separate query, no gap. Pick lists and packing slips print the lot and expiry per line, so the packer can verify each component as it goes into the box.
Frequently asked questions
How do you track batch numbers for product bundles?
Allocate at the component level: define a component mapping for the bundle SKU, then assign each component its own lot when the order is allocated. A three-item bundle carries three lot assignments, and each deduction is recorded against the order reference.
What expiry date does a bundle or gift set have?
The earliest expiry date among its components. A kit containing products that expire at different times is only sellable as long as its shortest-dated component, so rotation and discount decisions should key off that date.
How do recalls work when the affected lot shipped inside bundles?
If lots are recorded per component, a recall query for the affected lot returns every order that consumed it — standalone sales and bundle sales alike. If stock was only deducted at the bundle level, bundled shipments of the lot are invisible and the recall will miss customers.
Is a multipack tracked differently from a mixed kit?
A multipack of one SKU usually draws from a single lot, so it needs one lot assignment per pack. A mixed kit needs one lot assignment per distinct component. The general rule: one lot line per distinct dated product in the box.
Never ship expired stock again.
TraceLot adds batch tracking, FEFO allocation, and audit-ready records to Veeqo and Shopify. First month free.