Raw Materials
A raw materialRaw materialThe atomic component of a BOM or sub-assembly. Two flavors: a Shopify-linked variant (inventory tracked in Shopify) or a virtual material (DO-side inventory only). Both kinds appear in the same component picker and are consumed identically when a BOM fires — except virtual materials never trigger a Shopify call. Read more → is the atomic component a BOMBill of MaterialsA bill of materials tells Assemblified how to build one unit of a finished good. When a customer orders the finished-good variant, Assemblified deducts the right component quantities from inventory automatically. Read more → or sub-assemblySub-AssemblyA reusable assembly block that composes into bigger BOMs. Define it once, include it in any BOM. At execution time, Assemblified expands the sub-assembly into its own components recursively. Read more → consumes. Two flavors:
- Shopify-linked materials. A real Shopify variant. Inventory tracked in Shopify, decremented via the Admin API.
- Virtual materials. Inventory is internal to Assemblified. No Shopify variant. For consumables and trace components.
Both kinds appear in the same component picker on BOM and sub-assembly detail pages, and both are consumed identically at execution time — except virtual materials never trigger a Shopify call.
On this page
Section titled “On this page”- When to use Shopify-linked vs virtual
- Inventory tracking — where stock lives
- Special-purpose flags (BOM-as-raw, non-essential)
- Capability snapshot — every page in this section
When to use which
Section titled “When to use which”| Use case | Use |
|---|---|
| You sell the material standalone in Shopify. | Shopify-linked. Same SKU does double duty as standalone product and BOM component. |
| You don’t sell the material; it’s pure component. | Virtual. Skip the Shopify product setup; track inventory in Assemblified. |
| Multi-location with Shopify-managed stock. | Shopify-linked — Shopify’s location model is well-supported. |
| Tiny per-assembly quantities (one screw per unit). | Virtual. Setting up a Shopify product just to track inventory is overkill. |
| Material from a non-Shopify supplier. | Virtual. No Shopify variant to link to. |
| Cost accounting — the material has a unit cost you track. | Either. Both have unitCost on the row. |
You can mix freely in a single BOM. A BOM that sells a candle might pull from Shopify for the wax (also sold standalone) and from virtual for the wick (a low-value consumable not in the catalog).
Inventory tracking
Section titled “Inventory tracking”Stock lives in different places depending on the material type:
- Shopify-linked materials. Stock lives in Shopify and is fetched on demand. Assemblified writes inventory deltas through the Shopify Admin API. When you change inventory directly in Shopify, the change is propagated back to Assemblified through Shopify’s inventory webhook.
- Virtual materials. Stock is in
virtual_inventory_levels(an Assemblified-side per-location table). No Shopify call.
Both are always per-location. See Inventory tracking for the multi-location specifics.
Special-purpose flags
Section titled “Special-purpose flags”Each raw-material row has a few boolean flags that change behavior in subtle ways:
isBOMVariant. This row represents the finished-good variant of another BOM. Used for the BOM-as-raw pattern — referencing one BOM as a component of another.isNonEssentialMaterial. Skipped by the dynamic-adjustment bottleneck calculation. Still consumed normally at order time. See Non-essential materials.
What you can do
Section titled “What you can do”Where to next
Section titled “Where to next”- Shopify-linked materials — start here for typical raw materials.
- Virtual materials — for consumables and non-Shopify items.
- BOM Composition — see how raw materials fit into a BOM.