This guide explains how QBM handles products with variations (like different colors and sizes) and how to integrate with e-commerce platforms like Shopify.
A product variation is a specific version of a product that differs by one or more attributes. For example, a "Classic T-Shirt" might come in:
This creates 9 possible combinations (3 × 3 = 9 variations), each needing its own inventory tracking, UPC, and potentially different pricing.
QBM uses a flat model where each variation is stored as an independent item in the database. Variations are grouped together by sharing the same Product Name.
Here's how a T-Shirt with color and size variations looks in QBM:
| Product Name | UpcSku (UPC) | Color | Size | Stock Qty |
|---|---|---|---|---|
| Classic T-Shirt | TSH-RED-S | Red | S | 25 |
| Classic T-Shirt | TSH-RED-M | Red | M | 30 |
| Classic T-Shirt | TSH-RED-L | Red | L | 20 |
| Classic T-Shirt | TSH-BLU-S | Blue | S | 15 |
| Classic T-Shirt | TSH-BLU-M | Blue | M | 40 |
| Classic T-Shirt | TSH-BLU-L | Blue | L | 35 |
| Field | Purpose |
|---|---|
| Product Name | Groups variations together. All variations of one product share the same name. |
| UpcSku | UPC for POS scanning. Must be unique for each variation in the database. |
| LookupCode | Barcode. Must be unique for each variation in the database. |
| Color | Variation attribute - free text field for color values. |
| ItemSize | Variation attribute - free text field for size values. |
| Brand / Model | Variation attributes - selected from predefined lists. |
No complex parent/child relationships. Each item is self-contained with its own pricing, cost, and inventory. Easy to understand and manage.
Each variation can have completely different prices, costs, and profit margins. No restrictions on which attributes can differ between variations.
Each variation tracks its own quantity and cost. Stock movements are straightforward. FIFO/LIFO/Average costing works independently per item.
Scan a UPC → immediate product match. No need to traverse parent/child hierarchies. Quick checkout experience.
Group by Product Name to see "total T-shirts sold" or drill down to "Red Medium T-shirts sold". No complex aggregation needed.
Deleting one variation doesn't affect others. No orphan records or broken relationships to worry about.
Shopify and QBM handle variations differently. Understanding this is key to successful integration.
| Shopify (Hierarchical) | QBM (Flat) |
|---|---|
| Product is the parent container | No parent - all items are equal |
| Variants are children of a Product | Each variation is an independent item |
| Product.Title = "Classic T-Shirt" | ProductName = "Classic T-Shirt" |
| Variant.SKU = "TSH-RED-M" | UpcSku (UPC) = "TSH-RED-M" |
| Variant.Barcode = "012345678901" | LookupCode (Barcode) = "012345678901" |
| Variant.Option1 = "Medium" | ItemSize = "Medium" |
| Variant.Option2 = "Red" | Color = "Red" |
| Product ID | 7890123456789 |
| Title | Classic T-Shirt |
| Options | Size, Color |
| Variant ID | SKU | Barcode | Option1 | Option2 |
|---|---|---|---|---|
| 45678901234567 | TSH-RED-S | 012345678901 | S | Red |
| 45678901234568 | TSH-RED-M | 012345678902 | M | Red |
| 45678901234569 | TSH-BLU-S | 012345678903 | S | Blue |
| ProductName | UpcSku (UPC) | LookupCode (Barcode) | ItemSize | Color |
|---|---|---|---|---|
| Classic T-Shirt | TSH-RED-S | 012345678901 | S | Red |
| Classic T-Shirt | TSH-RED-M | 012345678902 | M | Red |
| Classic T-Shirt | TSH-BLU-S | 012345678903 | S | Blue |
Within your QBM database, the following must be unique for each item:
Make sure all Shopify variants have unique SKUs and barcodes. If a SKU or barcode already exists in QBM for a different product, the import will fail with a duplicate error.
Use exactly the same Product Name for all variations. "Classic T-Shirt" and "Classic T-shirt" (lowercase 's') would be treated as different products.
Use a consistent SKU pattern that includes the variation attributes. Example: PRODUCT-COLOR-SIZE (TSH-RED-M, TSH-BLU-L). This makes inventory management easier.
Before syncing inventory between Shopify and QBM, verify that SKUs match exactly. A mismatch could update the wrong product's stock.
| Shopify Field | QBM Field |
|---|---|
| Product.Title | ProductName (shared by all variations) |
| Variant.SKU | UpcSku (UPC; unique per item) |
| Variant.Barcode | LookupCode (Barcode; unique per item) |
| Variant.Option1 | ItemSize (typically) |
| Variant.Option2 | Color (typically) |
| Variant.Price | UnitPrice |
| Variant.InventoryQuantity | Quantity (tracked per item) |