Start-to-finish Unit Stock demo

Follow one bakery example from an empty inventory pool through product sales, order changes, recipes, supplier receipts, and replenishment planning.

Reviewed 2026-08-17

This walkthrough builds one connected example instead of explaining each screen in isolation. The demo store sells organic bread flour in three package sizes. All three consume one physical flour balance. Premium then extends the same example with a recipe, suppliers, receipt batches, forecasting, and purchase orders.

Complete the Free foundation first. Continue into the clearly marked Premium continuation only when Pro is installed and active.

What you will build

  • One Organic bread flour bulk pool, counted in kilograms.
  • 250 g, 500 g, and 1 kg variations drawing from that pool.
  • A sale, quantity edit, and refund visible in the immutable stock history.
  • A Premium recipe using flour, yeast, a jar, a lid, and a label.
  • A 25 kg supplier sack and traceable received lot.
  • Safety stock, a forecast, a reorder policy, and a purchase-order draft.
  • Holds, incoming deliveries, batch controls, losses, mobile counts, costs, reporting, scenarios, and operational data exchange.

Use the names and quantities below if you want your screens to match the screenshots.

1. Create the flour pool

Edition: Free

Open: Products → Unit Stock → Setup → Inventory pools

  1. Enter pool name Organic bread flour bulk.
  2. Enter internal SKU RAW-FLOUR-ORG.
  3. Choose kg as the stock unit.
  4. Enter opening balance 25.
  5. Choose Create pool.
Create inventory pool form filled with Organic bread flour bulk, RAW-FLOUR-ORG, kilograms, and an opening balance of 25
The pool represents the physical flour, not one WooCommerce package.

The authoritative balance is now 25 kg. Every linked package will consume from this same quantity.

Define and verify a custom receiving unit

Open Products → Unit Stock → Setup → Custom units. This example makes the supplier’s sack a selectable unit while keeping kilograms as the underlying Mass measurement:

  • Unit key: sack
  • Label: Flour sack
  • Symbol: sack
  • Equivalent quantity: 25
  • Of unit: Kilogram (kg)

Choose Create custom unit. The sack inherits the Mass family from kilograms, so it can convert to grams, kilograms, pounds, and other mass units, but never to a Length, Volume, Area, or Count unit.

Create custom unit form defining a Flour sack as 25 kilograms beside a calculator confirming that one sack equals 25 kilograms
The completed definition and calculator make the inherited Mass conversion explicit.

Use the Conversion calculator beside the form to enter 1, choose Flour sack as Convert from, and Kilogram (kg) as Convert to. Confirm the result is 1 sack = 25 kg. The calculator only checks the definition; it never changes stock.

Edition: Free

Open: Products → Unit Stock → Setup → Product links

Create these mappings one at a time:

Product or variationConsumptionUnit
Organic Bread Flour, 250 g250g
Organic Bread Flour, 500 g500g
Organic Bread Flour, 1 kg1kg

The mapping unit does not need to be identical to the pool’s display unit. It must belong to the same measurement family. A product can consume 250 g, 500 g, 1 kg, ounces, or pounds from a pool displayed in kilograms because all are mass units and normalize exactly. A product cannot consume millilitres or item counts from a mass pool because Volume and Count are different families. The form rejects incompatible combinations.

For a new demo product, choose Disable native quantity management. Use the transfer option only when an existing WooCommerce quantity has been physically verified and should be added to the pool once.

Product mapping form linking the 250 gram flour variation to the kilogram flour pool with consumption entered as 250 grams
One sold 250 g package consumes 250 g from a pool whose balance is displayed in kilograms.

Save this first mapping, then open that exact variation and confirm its Unit Stock controls. The tutorial deliberately shows only the product configured in this step.

The 250 gram flour variation showing the flour pool and a consumption of 250 grams
The individual product or variation owns its mapping and consumption controls.

Now repeat the mapping for the 500 g and 1 kg variations. Different package sizes can share one physical balance without duplicating stock.

3. Verify availability

Edition: Free

Open: Products → Unit Stock → Stock

With a 25 kg balance, the screen can express availability as 100 packages of 250 g, 50 packages of 500 g, or 25 packages of 1 kg. These are alternative views of the same stock, not three independently sellable quantities.

Unit Stock overview filtered to the Organic bread flour bulk pool and its three linked package sizes
The Stock screen is the daily overview of physical balance and package availability.

4. Sell a product and inspect the change

Edition: Free

Open: Storefront, then WooCommerce → Orders

  1. Add 2 × Organic Bread Flour, 500 g to the cart.
  2. Complete checkout using a test payment method.
  3. Open the new order and confirm quantity 2.
  4. Inspect the Unit Stock panel on the order itself.
  5. Open Products → Unit Stock → Activity to see the same movement in the store-wide ledger.

The order consumes 1 kg: 2 × 0.5 kg. Activity records an Order reduction of -1 kg, the resulting balance, timestamp, and order number. Reopening or saving the same order cannot reduce it twice.

WooCommerce order Unit Stock panel showing only the first one kilogram stock reduction
The first-sale screenshot contains only this order's initial reduction. Activity provides the wider store history.

Change and refund the order

  1. Change the 500 g line from quantity 2 to quantity 3 and save the order items.
  2. Confirm an Order quantity edit of -0.5 kg in Activity.
  3. Choose Refund, enter quantity 1, and select Restock refunded items.
  4. Complete the refund and confirm a Refund restoration of +0.5 kg.

A refund without Restock refunded items returns money but does not change physical stock. A status that restores WooCommerce stock creates an Order restoration for the remaining demand. Every calculation uses the mapping snapshot stored with the order item, even if the product mapping changes later.

Complete WooCommerce Unit Stock panel showing the initial reduction, quantity edit, and restocked refund described above
This complete panel matches the three actions in the walkthrough: sale, quantity edit, and restocked refund.

5. Record a physical correction

Edition: Free

Open: Products → Unit Stock → Stock

Choose Subtract, enter 0.25 kg, enter reason Quality-control sample, and choose Apply. Use Set to after a full physical count. Use Add or Subtract when the exact difference is known.

Stock adjustment form filled to subtract a 0.25 kilogram quality-control sample
Use a reason another staff member can understand when reviewing the ledger.

6. Premium continuation: build a recipe

Edition: Premium

First open Products → Unit Stock → Inventory → Stock. Choose Create pool and create each pool below. Return to the Stock screen after saving each one.

PoolUnitOpening balance
Active dry yeast bulkkg2.5
Amber glass jarsunit240
Metal jar lidsunit300
Kraft product labelsunit500

Next open Products → Unit Stock → Inventory → Recipes and choose Create recipe.

Select the 250 g flour product and add:

RolePoolQuantity per item
ContentsOrganic bread flour bulk250 g
ContentsActive dry yeast bulk7 g
ContainerAmber glass jars1 unit
ClosureMetal jar lids1 unit
LabelKraft product labels1 unit

Choose Save recipe. Checkout validates all components together and a sale changes all five pools atomically.

Premium recipe editor filled with flour, yeast, jar, lid, and label components
A recipe records every physical component consumed by one sold item.

Reuse the recipe for the 500 g variation

Stay in Products → Unit Stock → Inventory → Recipes:

  1. Select the 500 g variation under Product or variation.
  2. Under Reuse an existing recipe, choose the 250 g variation.
  3. Choose Load copied components.
  4. Change flour from 0.25 kg to 0.5 kg and yeast from 0.007 kg to 0.014 kg. Leave the jar, lid, and label unchanged.
  5. Review every row and choose Save recipe.

The copied rows are only a draft. Saving creates an independent recipe for the 500 g variation, so later edits do not silently change the 250 g recipe.

Premium recipe editor copying the 250 gram recipe into the 500 gram variation with only flour and yeast quantities changed
Copy the common packaging rows, then edit only the ingredients or quantities that differ.

7. Premium continuation: add and receive from a supplier

Edition: Premium

First open Products → Unit Stock → Operations → Receiving, then choose the Settings tab.

  1. Add supplier Miller & Field Ingredients with a lead time of 5 days.
  2. Define pack 25 kg flour sack for the flour pool.
  3. Enter supplier SKU FLOUR-25KG, unit code SACK, and quantity 25 kg.
Premium Receiving settings showing configured suppliers and purchasing packs
A supplier pack converts purchased packs into the exact pool quantity received.

Stay in Products → Unit Stock → Operations → Receiving, then choose the Receive stock tab and enter:

  • Pack: 25 kg flour sack
  • Pack count: 1
  • Supplier lot: LOT-MF-2609-EARLY
  • Expiry date: 15 January 2027
  • Total cost: €23.25
  • Reference: GRN-2026-0820

Choose Receive into stock. The receipt adds 25 kg and creates a traceable batch.

Premium Receive stock form filled with the first 25 kilogram flour batch
Receiving changes on-hand stock. Scheduling an incoming delivery does not.

Repeat Receive stock once with lot LOT-MF-2610-LATE, expiry 15 June 2027, total cost €23.25, and reference GRN-2026-0821. Then choose the Batches & lots tab. Verify both lots, their supplier, expiry, received quantity, remaining quantity, and cost.

Premium batch list filtered to Miller and Field Ingredients, showing the walkthrough's two flour lots and their automatic FEFO dispatch priority
The two rows are separate quantities in the same flour pool. The January lot is eligible before the June lot.

The product or recipe consumes the flour pool rather than selecting a supplier batch itself. Premium allocates that demand using FEFO by default: earliest expiry first, then earliest received, with undated batches last. Warehouse staff can override that default for future orders by opening Manage batch and giving batches positive Priority numbers. Lower numbers dispatch first, while unranked batches follow afterward in FEFO order. Quarantine still skips a ranked batch; releasing it restores its saved position. Existing order allocations are never reassigned when priorities change.

Create one more test order for 2 × Organic Bread Flour, 500 g, then open its Unit Stock panel. The order consumes 1 kg from LOT-MF-2609-EARLY while the later batch remains untouched. The allocation journal ties the order to that exact batch, and a restocked refund returns quantity to the batch originally consumed.

WooCommerce Unit Stock panel tying the one kilogram order reduction to the earlier-expiring supplier lot
The order is linked to the batch through its recorded pool allocation, not by manually assigning a batch to the product.

8. Premium continuation: forecast and reorder

Edition: Premium

Open Products → Unit Stock → Planning → Forecast.

Select the flour pool and a demand window. Forecasting counts negative order reductions and quantity edits. Receipts, refunds, manual corrections, and losses are not customer demand.

Premium forecast comparing current stock with use rate, remaining days, stock-out date, and confidence
The forecast states when there is not yet enough history for a reliable suggestion.

Next open Products → Unit Stock → Planning → Reorder:

  1. Select the flour pool.
  2. Choose 25 kg flour sack as the preferred pack.
  3. Enter safety stock and save the policy.
  4. Review the whole-pack suggestion and choose Create draft.
Premium reorder view showing demand, incoming stock, safety stock, and a whole-pack suggestion
The suggestion combines lead-time demand, on-hand stock, incoming stock, and safety stock.

Stay in Products → Unit Stock → Planning → Reorder, then choose the Purchase orders tab to review the immutable draft. Approval does not contact the supplier. Transmission requires an item mapping, a configured supplier connection, and a separate Send now confirmation.

Premium purchase order list showing supplier, item, quantity, status, and action
Drafting, approval, and supplier transmission are intentionally separate steps.

To transmit rather than merely record the draft, open Planning → Reorder → Item mappings and map the flour pool to supplier item FLOUR-25KG. Then open Supplier connections, configure and test the supplier’s supported delivery method, and return to Purchase orders. Review the final payload before choosing Send now. A supplier definition and pack are purchasing data; they do not by themselves authorize external transmission.

Premium supplier item mapping connecting an inventory pool to the supplier item identifier
The mapping tells the purchase order which supplier item represents the selected pool and pack.
Premium supplier connection settings for controlled purchase-order transmission
Test the connection separately before sending a real purchase order.

9. Premium continuation: protect sellable stock

Edition: Premium

Open Products → Unit Stock → Operations → Supply states and select Organic bread flour bulk. Set a safety-stock quantity, then add a temporary hold or quarantine only when stock must not be sold. Review On hand, Held, Quarantined, Safety stock, and Sellable together before releasing a state.

Premium Supply states screen separating on-hand, held, quarantined, safety, and sellable stock
On-hand stock can remain physically present while being excluded from checkout availability.

Open Planning → Alerts and configure the warning thresholds staff should act on. An alert reports a condition; it does not silently change stock.

Premium inventory alerts showing actionable stock and supply warnings
Alerts turn supply conditions into a review queue without mutating the ledger.

10. Premium continuation: schedule incoming stock and control batches

Edition: Premium

Open Operations → Receiving → Incoming deliveries and schedule the expected supplier pack, quantity, and arrival date. The incoming quantity informs planning but does not increase on-hand stock. When the delivery arrives, receive it through Receive stock so the ledger and batch record are created once.

Premium incoming deliveries screen showing scheduled supplier stock that has not yet been received
Scheduled stock affects replenishment planning; only a completed receipt changes the physical balance.

Open Operations → Receiving → Batches & lots to place a suspect lot on hold, quarantine it, release it, record expiry, or start a recall review. These controls apply to the selected batch, while FEFO continues to allocate only eligible stock.

Premium batch manager with hold, quarantine, expiry, and lot controls
Batch controls preserve the lot identity and remaining quantity while changing whether it may be allocated.

11. Premium continuation: explain loss and anomalies

Edition: Premium

Open Products → Unit Stock → Operations → Record loss and record a known spoiled or damaged quantity with a clear reason. Then review Audit → Anomalies and Audit → Activity to distinguish a recorded operational loss from an unusual movement that still needs investigation.

Premium stock loss register with quantity, reason, and inventory pool context
A loss is an intentional, attributable stock movement, not an unexplained balance edit.
Premium anomaly review identifying inventory movements that require attention
Investigate the underlying movement before correcting the physical balance.

12. Premium continuation: perform a mobile count

Edition: Premium

Open Products → Unit Stock → Counting → Mobile count on the counting device. Tap Barcode, GTIN, or SKU, then type the code or scan it with a USB or Bluetooth barcode scanner configured as a keyboard. The scanner enters the code into this same field. On a secure browser that supports barcode detection, Use camera appears beside Find stock; otherwise it remains hidden. Camera scanning uses the browser’s built-in barcode recognition and asks for camera permission. It does not upload the camera feed to the store. Select the resolved flour pool, enter the physically counted quantity, add a staff-readable note, review the variance, and submit only after confirming the product, pool, and unit.

Premium mobile stock count form showing pool, counted quantity, variance, and note
The count records who reconciled the physical quantity and why the authoritative balance changed.

13. Premium continuation: review cost, reports, and scenarios

Edition: Premium

Open Products → Unit Stock → Production → Recipes & costs and inspect the material cost derived from the recipe and received stock. Then open Planning → Reports to configure the operational report and delivery schedule. Use Planning → Planner for a what-if scenario before changing live safety stock, purchasing, or production decisions.

Premium unit economics showing material cost calculated from recipe components
Unit economics connects current component costs to one sellable item's recipe.
Premium reporting screen with inventory report and delivery settings
Reports turn the same inventory records into a repeatable review for staff.
Premium scenario planner comparing projected inventory decisions without changing live stock
A scenario is a planning model and does not post stock movements to the live ledger.

14. Premium continuation: exchange operational data

Edition: Premium

Open Products → Unit Stock → Integrations → Data exchange. Export the relevant records before preparing an import, keep identifiers unchanged, and validate the file before applying it. Use this screen for supported operational CSV exchange; use the developer reference only when building a custom system integration.

Premium data exchange screen with supported inventory export and validated import controls
Export first so the import starts from the plugin's exact identifiers and column structure.

Daily workflow after setup

  1. Review balances and availability under Stock.
  2. Inspect sales, edits, refunds, and restorations on WooCommerce orders.
  3. Explain changes in Activity before correcting anything.
  4. Record deliveries and supplier lots under Receiving.
  5. Review holds, quarantine, safety stock, and sellable quantity under Supply states.
  6. Use Forecast, Reorder, and Purchase orders to plan replenishment.

Use the focused documentation pages when you need reference details. Return to this walkthrough when onboarding a store or a new staff member.

Still need help?

Tell us what you are trying to do and where you got stuck.

Contact support