Launch pricing: Lock in Pro at $79/yr before prices go up View pricing →
Pro feature

Batch tracking

Overview

Batch tracking lets you manage multiple batches per product, each with its own quantity and expiration date. This is essential for stores that receive stock in shipments at different times — each shipment may have a different expiration date, and you need to track them separately.

Enabling batch tracking

Batch tracking is enabled per product, not globally. You turn it on in the product editor for each product that needs it.

Simple products

  1. Open a product and go to the Expiration tab in the Product data panel.
  2. Toggle on Enable batch tracking.
  3. Save the product.

Variable products

For variable products, batch tracking is enabled per variation:

  1. Open the variable product and go to the Variations tab.
  2. Expand the variation you want to edit.
  3. Toggle on Enable batch tracking for that variation.
  4. Repeat for other variations as needed.
  5. Save changes and update the product.

Variable product parents cannot have batch tracking directly — you will see an informational notice if you try. Only individual variations support batches.

Once enabled, the single expiration date field is replaced by a batch management interface.

Adding batches

  1. Open a product (or variation) with batch tracking enabled.
  2. In the Expiration tab, click Add Batch.
  3. Enter the quantity and expiration date for the batch.
  4. Add more batches as needed.
  5. Save the product.

Batch fields

Each batch includes:

  • Quantity — The number of units in this batch.
  • Expiration Date — When this batch expires.
  • Batch Reference (optional) — A label or lot number for your internal tracking.
  • Notes (optional) — Free-text notes for internal use (e.g., supplier info, storage conditions).

FEFO stock deduction

When a customer places an order, the plugin automatically deducts stock from the batch that expires soonest — this is the FEFO (First Expired, First Out) method. FEFO ensures that your oldest stock sells first, reducing waste.

How it works:

  1. Customer orders 5 units of a product.
  2. The plugin finds the batch with the earliest expiration date that still has available stock.
  3. Stock is deducted from that batch first.
  4. If the earliest batch does not have enough stock, the remainder is deducted from the next-earliest batch.

By default, expired batches are skipped during deduction. However, if you have enabled Allow selling expired batches under Products → Expirations → Settings → General, expired batches will be included in the FEFO queue and sold first (since they have the earliest dates). See Expiry Actions for more on this setting.

This process happens within a database transaction to prevent stock conflicts when multiple orders come in simultaneously.

Stock synchronization

The total WooCommerce stock for a product is always kept in sync with the sum of all batch quantities. When you add, edit, or remove batches, the product’s stock quantity updates automatically. You do not need to manage the WooCommerce stock field separately.

If you edit the WooCommerce stock directly (outside of the batch interface), the plugin will notify you of the mismatch so you can reconcile.

Managing batches over time

As batches expire or sell out:

  • Expired batches remain visible in the batch list for your records but are excluded from stock deduction.
  • Empty batches (quantity of 0) can be removed manually or left in place for record-keeping.
  • New shipments are added as new batches with their own expiration dates.

The Overview tab gives you a full overview of batch statuses across all products.

Batch swap on orders

You can replace the batch allocation on an existing order line item without cancelling the order.

Where to find it

Open an order in the WordPress admin and look at the line items. For any item that was fulfilled from a batch-tracked product, hover over the batch label to reveal a Change button.

How it works

  1. Click Change on the batch allocation you want to replace.
  2. A modal appears showing all eligible batches for that product (batches with sufficient stock).
  3. Select the replacement batch.
  4. The plugin atomically returns stock to the original batch and deducts from the new one.

Supported order statuses

Batch swaps are available on orders with status Processing, On-hold, or Completed.

Activity logging

Every batch swap is recorded in the activity log, showing the original batch, the replacement batch, the order number, and the user who performed the swap.

License expiration

If your Pro license expires, existing batch data is preserved. Batches you have already created continue to work, and FEFO deduction remains active for existing batches. You will need an active license to create new batches or enable batch tracking on additional products.