Skip to main content
BulkFlow
All docs
Bulk items & inventory

Bundles & Kits — multi-pool recipes

3 min readPro+· Updated 2026-10-29

A normal BulkFlow pack variant draws from exactly one bulk pool (a 6-pack of Lavender Soap pulls 6 units from the Lavender pool). A kit goes further: besides its primary pool, it lists component pools — so one Shopify variant can consume several warehouse pools at once.

Classic example — a Variety Pack = 2 Lavender + 2 Rose + 2 Mint:

  • Primary pool: Lavender (pack size 2)
  • Components: Rose × 2 per kit, Mint × 2 per kit
Plan requirement: creating and editing kit recipes requires Pro or above. Existing kits keep working correctly on every plan — see Downgrades below.

Building a recipe

  1. Open the item that holds the kit's primary pool and find the pack variant.
  2. Click Convert to Kit on the pack card.
  3. Add component pools with a quantity per kit for each (up to 10 components).
  4. Save. The card immediately shows the kit's true availability and which ingredient limits it.

Rules:

  • Components must be managed pools (live Shopify sync turned on) so orders can deduct them.
  • A component can't be the primary pool itself (its draw is already covered by the pack size).
  • Components are always plain pools — a kit can never contain another kit, so circular recipes are impossible.

The bottleneck rule

The stock Shopify shows for a kit is the minimum buildable quantity across all its pools. Example — the Variety Pack above:

  • Lavender (primary): 100 units left ÷ 2 per kit = 50 kits possible
  • Rose: 30 units left ÷ 2 per kit = 15 kits possible ← bottleneck
  • Mint: 80 units left ÷ 2 per kit = 40 kits possible

Shopify shows 15 available. The pack card tells you "limited by Rose — 30 units left" so you know exactly what to restock. Restock Rose and the availability jumps on the next sync.

What happens on orders, refunds & edits

  • Order paid — the primary pool deducts pack size × quantity as usual, and every component pool deducts qty-per-kit × quantity. Each deduction is recorded in the per-order stock ledger.
  • Refund / cancellation — all pools are restocked, capped by what was actually deducted for that order (the same phantom-stock protection every BulkFlow credit path uses). Credits follow the recipe recorded at sale time: if you edit — or even dissolve — the recipe between the sale and the refund, the original components still come back. "Refund only, don't restock" is respected.
  • Order edits — added kit lines deduct all pools; removed lines restock all pools.
  • Short component — if a component pool can't cover an order line, the rest of the order still processes and a discrepancy alert is raised so you can fix the count. Orders are never silently blocked.
  • Reconciliation — kit movements are ordinary audited movements on each pool, so your reconciliation reports show them like any other correction or sale.

What happens if I downgrade?

Inventory correctness is not tier-gated:

  • Existing kits keep deducting and restocking all component pools on any plan — deductions, refund credits and the per-order ledger caps behave the same after a downgrade. (As always, storefront overselling also depends on your checkout setup — see the oversell-protection notes on the Settings → Protection page.)
  • What locks below Pro: creating new kits and editing existing recipes.
  • You can always dissolve a kit (remove its recipe) on any plan — the variant returns to plain single-pool math. Refunds for orders placed before the dissolve still restock the original components from the sale-time ledger.
  • Upgrade back and your recipes are exactly where you left them.

Current limits

  • Single-level recipes only (components are pools, never kits).
  • Up to 10 components per kit.
  • Multi-location (BF+) shops: kit availability is computed per location. A kit is only offered at a location where every component has stock at that location — a component with all of its stock in Texas contributes nothing to the kit's Florida availability. A component that hasn't been split across locations counts at your default location only. The global number stays capped by the scarcest component overall. BulkFlow does not automatically fulfill a kit from components at different locations.