Table of Contents

Bill of Materials

Kevin Updated by Kevin

ShipStream's Bill of Materials (BOM) feature is a powerful system for establishing relationships between products and streamlining operations for those products using that information. Some capabilities of the Bill of Materials system include:

  • Create a product that is a "kit" which can be either stocked and picked or if out of stock may be automatically picked as components on demand.
  • Create a Work Order to pick components and assemble them into pre-kitted products.
  • Optimize storage and handling of products by relating two or more SKUs as different units of measure of one another (referred to as Quantity-type BOMs).
  • Create complex product relations with nested BOMs and multiple parent/child associations.
  • Each BOM component is a fully-featured product so they all can have precise dimensions, customs information, packaging features, etc.

This article will explain how to work with BOMs in general and specifically Kit-type BOMs. See Quantity-type BOMs for more information about BOMs which describe different units of measure of the same product.

Use Cases

There are many different ways to use BOMs, but the common building blocks are:

  • A "virtual" product that is composed of one or more "component" products of varying quantities
  • A "virtual" product that is composed of one product but which yields a different quantity (splitting or disassembly)
  • A product that is ordered as arbitrarily-sized packs of the singles or portions or multiples of a case
  • A product that when it runs out should be substituted by the same quantity of another product on the fly

Using these patterns you can effectively address some common scenarios:

  • A complex kit or assembly of components such that a customer may order one item but receive any number of different items.
  • Products as different quantities of each other, i.e. a case of 12, a "virtual" 4-pack and the singles. Stock them in bulk packaging but break them down and pick the parts on demand.
  • Substitute products so that one SKU or BOM can pull from multiple other SKUs if not in stock or if different warehouses have different suppliers.

Key Facts

  • A Product can have multiple BOMs.
  • BOMs can be assigned priorities which determine the order for substitutions.
  • A product will not be substituted with a BOM if it is already itself in-stock.
  • A BOM can have component products that also themselves can be composed from BOMs (nested BOMs).
  • BOMs are uni-directional. If you want to disassemble a kit into components and assemble components into a kit you must specify each BOM separately.
  • Assembly Instructions can be provided for use when assembling the BOM in a Work Order which uses an assembly-line like barcode-driven interface.


Add the following Role Resources to allow users access to manage BOMs:

  • Catalog > Bill of Materials
  • System > Configuration > Bill of Materials


Before creating a BOM be sure to first create the Products and any "virtual" products that might be needed. A "virtual" product is one that you may not intend to actually stock and does not have a unique barcode. E.g.: "A desk with a Hardwood desktop and Black legs" may be composed of one "hardwood desktop", a box of "black legs" and one "bag of desk parts" which are picked and shipped as separate components on demand.

A desk with two desktop finish options and three leg color options means the desk would need six different "virtual" products to cover each possible variation. Of course you only need to create products for the variations you actually intend to sell and using nested BOMs can reduce repetition.

Creating a Bill of Material

Creating a new BOM is done from a Product's view > Bill of Materials tab.

Product Bill of Material Tab

BOM Configuration


The name of the BOM; it helps to be descriptive, to describe the relation, which helps when reading BOM graphs and looking at the info about a BOM. e.g.:

  • Pack Crafting Kit
  • Build Crafting Kit 2A
  • Split Canned Air Case(24) into Singles
  • Split Canned Air Case(24) into 6 packs of 4
  • Build a 4 pack of Canned Air from Singles
  • Pick Mini DC Motor Mfr. ACME Inc.
  • Pick Type 130 Mini DC Motor Model: EK1894
  • Make a 4 pack of Flashlights from Singles
The name should be mindful that a BOM is always the "parent" saying what it needs to make itself or what is going to happen to the "parent". i.e.:
● The parent is going to be built
● The parent needs component(s) to make itself
● The parent will do this to make multiples of itself
Yields Quantity

The resulting quantity when this BOM is fulfilled; also determines if this is a Quantity-type. i.e.:

  • Splitting a Case of 50 would yield 50 Singles — Yields Quantity: 50
  • Kitting a Craft Kit — Yields Quantity:1

So the Yields quantity determines the terminology used:

  • A Kit-type BOM will have a Yields Quantity of one
  • A Quantity-type BOM will have a Yields Quantity that is greater than one
As the internal representation of inventory uses decimal numbers there is currently a limit of 1200 for the Yields Quantity. Generally speaking you should not split items into quantities that are smaller than that which will actually be sold.
Kit On Demand

Determines if this BOM can be picked on demand when needed to fill an order.

  • When set to Yes and the parent product is not in stock, orders for this product will be picked as the set of BOM components to fulfill the order. If one or more components are not in stock the full order item will be backordered until the actual product or the components are in stock
  • When set to No then orders for this product will not use the BOM to fill the order so items will be backordered if the product is not in stock and there is no other BOM to satisfy the demand
Kit To Stock

Determines if this BOM can be pre-kitted by creating Work Orders to kit this BOM together.

Assembly Scans

Determines what scans are needed as each component is assembled. Used when assembling Work Order items.

  • Each Component — Each component will be scanned as the BOM is kitted together
Assembly Instructions

User can provide instructions for assembling these particular components together during a Work Order.


The priority that this BOM will have in relation to other BOMs on this same Product. Zero is the default value. The larger the number the lower the priority will be. i.e. Use to prefer one manufacture's component over another when both can equally be used to fulfill the yielded BOM Product.

Create New Bill of Material(BOM) View

Adding Components

Components are the individual Products needed for this BOM to fulfill this Product. This can be as simple as adding one Product at one quantity or as complex as adding multiple Products with varying quantities.

BOM Create View add Component section

When adding components you will see a list of Products for this Merchant. From this list you can select the items and quantity needed for this BOM to fulfill this Product. Once a Product has been selected it can be added to the BOM.

BOM Create View adding Components

Once a Product has been added to the BOM, the Product(s) can be removed or have their quantity updated. Additional Products can still be added to the BOM.

BOM Create View Components added

Once the BOM is configured and the Components have been selected the BOM will be ready to save.

BOM Create View fully filled out
A BOM, that uses a component Product that also has a BOM, may not be given a yield quantity greater than one.

Editing a Bill of Material

A BOM can be edited from a Product's view > Bill of Materials tab and from Catalog > Bill of Materials grid.

Editing a BOM will allow you to edit certain parts of the BOM configuration. The components section will now show you the quantity used and a link to go directly to the component Product.

BOM Edit View

Delete and Edit Bill of Materials

Bill of Materials (BOMs) can be edited or deleted even after they have been used by Orders and Work Orders.

To perform these actions it is required to first cancel or complete Orders and Work Orders which are being processed before making material changes to BOMs to prevent situations that are impossible to resolve. Material changes such as yield, quantities, components, removal, deletion, etc.

When creating an RMA from a Shipment the RMA will contain the stocked items if the BOM used is still active, or the picked and packed items if the BOM used is no longer active.

Viewing Bill of Materials Details

A BOM can be viewed from a Product's view > Bill of Materials tab and from the Catalog > Bill of Materials grid.

Bill of Materials tab

The Bill of Materials tab contains two sections. The first section is a graph and the second section displays the details of each BOM on the Product.

BOM Connections

Once a BOM has been created you will see a graph showing how the BOM relates to its components and any other BOMs using some of the same Products.

BOM Connections Graph section of the BOM tab
The Legend and Graph views can be expanded or collapsed by clicking on their respective headers.
BOM tab BOM Connections collapsed section example
A Product's BOMs

An information block is shown for each BOM on the Product. The info shows the details of the BOM's configuration settings and the components selected for the BOM.

The Product's BOMs section of the BOM tab

Bill of Materials Grid

BOMs can also be viewed and exported from the Bill of Materials Grid. This grid is located at Catalog > Bill of Materials.

On this page you can view all the BOMs and filter and export BOMs as desired. When looking at the Components column if you see a product with bold lettering, that indicates that that Product also has a BOM.

Bill of Material(BOM) Grid view

Clicking on a BOM row will allow you to edit that BOM.

Using Bill of Materials

Kit-type BOMs won't change much of anything when working with Deliveries. However Quantity-type BOMs will change several aspects. You can read about the major differences when working with Quantity-type BOMs in the Quantity-types article.

The following is on how BOMs in general and Kit-types particularly behave within ShipStream.


Deliveries should be made for the components needed to fulfill or return the Product the BOM is on. Deliveries will behave like normal Deliveries.


Since Kit-type BOMs are composed of their component Products, the Product with the BOM may often contain zero inventory. When a Product with the BOM is Ordered, the System will tell the user to Pick the component Products to fulfill the Order. Stock can be pre-kitted through Work Orders to allow a BOM Product to have stock. The Merchant could also deliver the Product already kitted and some delivered as components.


An Order for a Product with BOMs, when working out how to fulfill the order, will first look at the stock on the Product then at the BOMs. The BOMs will then be looked at from highest priority to lowest to find the best solution to fulfill this Product. The strategy for fulfilling an order will be determined and then persisted when the Shipment is created.

Batching & Picking

Since batching and picking is done on Shipments which already have determined the precise items to be picked the process of batching shipments and picking is largely transparent to the fact that BOMs are used.


Packing a BOM will show the original product ordered and the components will be indented underneath the ordered product, similar to a tree view.

Scanner UI Packing Kit-type BOM

When Blind Count is on, then only the Product and Packed columns will be visible.

Viewing BOM Information


The items ordered will continue to show exactly what was ordered.


Shipments will however, show the component Products that make up the Product with a BOM.


Packages will also only show what was scanned into the package, which are the component Products.

Merchants and BOMs

By default Merchants cannot create BOMs. If it is desired to give a Merchant permission, the settings can be found in System > Configuration. Select the Merchant's Scope then in the Clients > Catalog tab is the Bill of Material sections that allows the Merchants to create BOMs.

How did we do?

Bill of Materials - Quantity-types