Inventory & Channel Sync
How do I track Shopify bundle inventory at the component level so I don't oversell and my COGS isn't $0?
Tracking bundle stock and cost at the component level so bundles show real availability and margin.
Last updated September 16, 2026
A Shopify bundle is a storefront SKU. It is not a pile. Available-to-sell is the MIN() of its components, each divided by the recipe, at the location that will ship. If the kit needs 1 bottle and 2 lids and you have 40 bottles and 50 lids in the same building, you can sell 25 kits, not 40. Publish that MIN(). If you publish a made-up kit on-hand of 40, you oversell 15 kits worth of lids. The next export will not save you.
The same recipe split across buildings is not 25 kits. 40 bottles in New Jersey and 50 lids in California is zero kits you can ship from one dock. Do not pool the MIN() across coasts unless you are willing to transfer before you sell.
Post component COGS at shipment
Cost of goods sold is the other half. A kit assembled at ship time should expense the components, each at the current weighted average cost (WAC) of that component, at the moment of shipment. The stored cost on the kit SKU is usually stale. A $1 leftover from a catalog import, or last year's bill of materials printout, will sit on the kit forever. The P&L can still be right if the shipment consumed live component cost. The product page and the cost-evolution report will look wrong. Read the invoice-line cost captured at shipment, not the kit master.
You sell 30 kits at $48. Bottle WAC is $6. Lid WAC is $1.50. Honest COGS is $6 plus $3, so $9, and margin is $39. If the channel sold a phantom bundle SKU with no bill of materials, the shipment never consumed components and COGS posts $0. Same result if someone received the kit as a finished good at zero. Storefront bundle apps fix the MIN() problem on Shopify. They do not post component COGS or assembly labor to the books.
Kits and inventory valuation
Kits built on the fly are excluded from inventory valuation. Only the components appear. Do not also value the kit or you double-count. A production order is different: you assemble ahead, the finished good receives a cost, and that cost averages into the kit's stored WAC. 100 units at $8.00 plus a build of 10 at $10.00 becomes $8.18. The same build for 200 units becomes $9.33.
BOM cost is a recipe sum, not valuation. Last received price is a receipt, not the blend. Landed cost on a component is additive; it hits kit COGS only when that component is consumed.
Reconcile on components, not the kit
Do not let Shopify restock the bundle SKU while the warehouse restocks components, or quantities drift. Returns of a kit should return components (or a QC hold), not a zero-cost finished good that recycles a bad average. Negative component qty will corrupt WAC and then every later kit sale. Reconcile valuation on the components, not on the kit master, before you argue that margin is $0.
Connect Claude or ChatGPT to your Fulfil data with the Fulfil MCP, then run this prompt on your own numbers.
You are the inventory and finance lead for a DTC brand that sells Shopify bundles. Here is: kit_sku, component_sku, qty_per_kit, location, component_on_hand, component_wac, kit_stored_cost, kit_shopify_qty, assembled_at (ship_time / production_order), has_bom (y/n), kit_received_at_zero (y/n). [paste] Produce: 1. Buildable qty per kit per location as MIN() of components (flag oversell if Shopify is higher, and flag a pooled MIN() that assumes two buildings can make one kit). 2. Expected COGS per kit from live component averages vs the stored kit cost (call out $0 or $1 leftovers). 3. Whether the kit should be on the valuation report or only the components. 4. Rows that would post $0 COGS (no BOM, kit received at zero, components not consumed). Do not use last received price or a stale BOM printout as "the cost."
Explore this in Fulfil
More on Inventory & Channel Sync
How to manage inventory across multiple warehouses without overselling
How to publish accurate available-to-sell for each warehouse so your channels stop overselling.
One order hub for Shopify, Amazon, and wholesale
Running Shopify, Amazon, and wholesale orders from one system instead of three disconnected tools.
ABC classification for DTC
Using ABC analysis to focus your counts and reorder attention on the SKUs that matter most.
See it run on
your data.
Fulfil runs inventory, fulfillment, purchasing, and accounting for scaling DTC brands in one system.