[object Object]

A bundle is a SKU made of other SKUs. You sell one Starter Kit, you decrement three components. Most teams set this up wrong on day one and discover the problem when Q4 stock counts do not match the warehouse.

Composite item vs bundle vs kit: the actual difference

Zoho Inventory uses two terms. Composite Item is assembled in advance: you build 50 kits, they sit in inventory as kits, each consumes its components on assembly. Bundle is assembled on sale: you sell one, components decrement at order time, no pre-assembly. Pick based on whether a customer can buy a component standalone.

If components are also sold standalone, use Bundle. If not, use Composite. Mixing them creates double-counting that is painful to unwind.

Setup walkthrough

Create the components first. Set their stock-on-hand. Then create the Bundle, drag components in, set quantity per bundle. The Bundle gets its own SKU and price, but no independent stock count: stock = min(component_stock / qty_per_bundle).

CRM quotes that respect bundle pricing

A CRM Quote line item can reference a Bundle SKU. The quote shows Bundle name and price. Push to Inventory creates a Sales Order that decrements components automatically. Do not list components on the Quote: it confuses the customer and double-decrements stock.

Available-to-promise math

For sales reps quoting bundles, the question is “can we ship 10 of these tomorrow?” Add a custom field on CRM Product: ATP_Quantity, computed nightly:

bundle = zoho.inventory.getItem(bundleSku);
minAvailable = 999999;
for each comp in bundle.components
{
  componentStock = zoho.inventory.getStock(comp.sku).available;
  perBundle = comp.quantity;
  thisBundleATP = componentStock / perBundle;
  if(thisBundleATP < minAvailable) minAvailable = thisBundleATP;
}
zoho.crm.updateRecord("Products", bundle.crm_id, {"ATP_Quantity":minAvailable});

Backorder behavior

When a sale exceeds ATP, default Inventory behavior is to allow backorder and warn. For B2B, you usually want hard-stop with a “needs PO” approval flow. Configure under Inventory Settings, Sales, Order Fulfillment, Disallow negative stock. Then build a CRM approval rule for over-ATP quotes.

Multi-warehouse complications

Bundles draw from a single warehouse by default. If you have East and West warehouses, ATP is per-warehouse, not aggregate. Tag the Quote with Ship_From and compute ATP per warehouse. A bundle showing 50 available globally may be 0 at the warehouse the customer ships from.

Cost of goods on the bundle

The Bundle’s COGS is the sum of component COGS. Inventory calculates this automatically if components have cost set. Make sure cost is set on every component or your margin reports lie.

Pricing strategy: bundle discount vs component sum

A bundle priced at exactly sum-of-components is just a packaging convenience. A bundle priced at 15% below component sum is a real promotion. Track both prices on the Bundle so reports can show discount given.

What to do this week: pick your top-selling bundle, audit it for the composite-vs-bundle distinction, set ATP in CRM, and confirm the quote-to-order flow decrements correctly with a $1 test order.

[object Object]
Share