Dynamic adjustment
Dynamic adjustmentDynamic adjustmentA per-bill toggle that recalculates the bill's Shopify-displayed quantity after every order: the bottleneck-resource count plus pre-assembled stock. One of three mutually exclusive toggles — switching it on switches only-sell-pre-assembled and maintain inventory level off. Read more → recalculates the Shopify-displayed quantity of a BOM after every order, based on current component availability. The goal: never sell more units than you can build.
The complementary Maintain inventory levelMaintain inventory levelA per-bill toggle that keeps the Shopify-displayed quantity flat after orders: Assemblified pushes a positive delta back to the bill's variant equal to what was consumed. Components decrement underneath. One of three mutually exclusive toggles: switching it on switches dynamic adjustment and only-sell-pre-assembled off. Read more → setting does the inverse — keep the displayed quantity flat by replenishing the BOM variant to match what you started with.
On this page
Section titled “On this page”- Where the setting lives
- What dynamic adjustment does (the bottleneck-resource rule)
- Worked example
- The three settings that cannot be combined
- Maintain inventory level (the inverse)
- Multi-location
- Committed units and the deduct-at-fulfillment window
- The Synchronize button
- When to use which
Where the setting lives
Section titled “Where the setting lives”Open a finished good from the Bill of Materials entry in the app nav (the page it opens is titled Finished goods), then go to the Settings tab. The Inventory behaviour section carries Dynamic Adjustment as a switch. It takes effect immediately — there’s no save step for this section.
To turn it on or off for many finished goods at once, tick the rows on the Finished goods list and use BOM settings → Dynamic adjustment → Enable (or Disable) in the bar along the bottom.
The bottleneck-resource rule
Section titled “The bottleneck-resource rule”For each BOM with dynamic adjustment on, after every order:
- Walk the BOM’s recipe to compute “how many can we build from each component?”
- The buildable quantity is the minimum across all essential components — the bottleneck.
- Add the BOM’s pre-assembled stockPre-Assembled InventoryStock of finished goods and assembly bills already built and on the shelf, counted per location. A work order draws assembly bills from the shelf first, building fresh only if it runs short; an order consumes a finished good's shelf before its components. Read more → .
- That sum is the new Shopify-displayed quantity. The delta from the current displayed quantity is pushed.
If non-essentialNon-essential materialA flag on a raw material that excludes it from the dynamic-adjustment bottleneck calculation. The material is still consumed normally during BOM execution — it just doesn't gate the Shopify-displayed quantity. Use for plentiful components (labels, generic packaging) you don't want to be the bottleneck. Read more → components are present, they’re skipped from the bottleneck calculation (still consumed normally; just don’t gate the displayed quantity).
An assembly bill (also called a sub-assembly) inside the recipe is expanded down to its own raw materials — unless it is set to only consume pre-assembled stock, in which case it contributes its shelf and nothing deeper, and it can itself be the bottleneck.
Shops with scheduled recalculation
Section titled “Shops with scheduled recalculation”Some high-volume shops have scheduled recalculation enabled by support. On these shops, orders still consume virtual materials immediately, but repeated changes with ample stock can share one later recalculation of the affected finished goods. Displayed buildable quantities can lag until that scheduled run (normally every six hours).
Virtual-only orders qualify when their affected recipes and stock levels can be checked safely. Low virtual stock, sub-assembly dependencies and unsupported recipe shapes still trigger immediate recalculation. Synchronize with Raw Materials also remains immediate.
Worked example
Section titled “Worked example”A “Vanilla Candle 8oz” BOM has these components:
| Component | Required per unit | Available | Build count from this component |
|---|---|---|---|
| Wax (1kg blocks) | 0.25 | 100 | 400 |
| Wick | 1 | 35 | 35 |
| Jar (8oz) | 1 | 90 | 90 |
| Label | 1 | 1000 | 1000 |
| Box | 1 | 50 | 50 |
The bottleneck is Wick at 35. So the BOM can build 35 candles right now.
If the BOM has 10 candles in pre-assembled stock, the Shopify-displayed quantity is 35 + 10 = 45.
A customer orders 5. After execution:
- 5 candles come off the pre-assembled shelf (now 5 left).
- Components untouched (raws weren’t sourced — pre-assembled covered the order).
- Dynamic adjustment recomputes: bottleneck still Wick at 35, pre-assembled now 5. New displayed = 35 + 5 = 40.
- Shopify gets a delta of −5.
The three settings that cannot be combined
Section titled “The three settings that cannot be combined”Three per-BOM settings all decide what Shopify shows as available, and no two of them can be on at the same time:
- Only sell pre-assembled quantities (Enhanced)
- Dynamic adjustment
- Maintain inventory level
Turning one on switches the other two off on that finished good — wherever you change it: on the finished good, in bulk, or through the API.
Where the consequence applies, the app states it before it runs:
- On the detail page, a warning line under the switch reads “Turning on Dynamic Adjustment switches off …”, naming whichever of the other two is currently on.
- In bulk, enabling asks first — “Turn on Dynamic adjustment?” — and the warning spells out that on every selected finished good where one of the others is on, it is turned off automatically. Enabling Only sell pre-assembled opens its own dialog instead of a yes/no confirmation, because it has to ask which set of numbers wins (see Pre-assembled inventory).
- Disabling never warns. Switching a setting off can never turn another one on.
Maintain inventory level
Section titled “Maintain inventory level”Maintain inventory level is the inverse pattern: keep the displayed Shopify quantity flat regardless of what consumed.
When on:
- After every order execution, Assemblified pushes a positive delta back to the BOM variant equal to what was consumed.
- The displayed quantity stays the same. Components still decremented underneath.
- On cancel/refund, the original delta is reversed.
Use this when you want operator-managed displayed quantity — an “always show 100” hand-curated number, regardless of what’s actually buildable.
It is one of the three settings above, so switching it on switches dynamic adjustment off. It lives on the Settings tab in the Preferences section, which is save-bar bound: change it, then save.
Multi-location
Section titled “Multi-location”Two switches under Settings → General → Multi-location sensitive adjustments govern this:
- Respect order and fulfillment locations when available — the parent switch. Everything below it stays disabled until this is on.
- Use location-sensitive dynamic BOM recalculation — with this on, dynamic adjustment is worked out per location instead of against one shared default-location pool.
With location-sensitive recalculation on:
- The recompute uses the order’s location to pick which location’s numbers get adjusted.
- Per-location component availability drives per-location availability, so the same bill can have a different bottleneck at two locations.
- A location rule can change the recipe at a location — or switch the bill off there entirely — and the recompute follows the rule.
- It also decides which locations a pre-assembled reconcile compares and writes — every location with the setting on, your default location alone with it off.
Without it, all dynamic adjustments go to the shop default location regardless of where the order shipped from.
Committed units and the deduct-at-fulfillment window
Section titled “Committed units and the deduct-at-fulfillment window”If you run multi-location with Track BOM materials as Shopify-reserved between routing and fulfillment switched off, Assemblified deducts at fulfillment: an order routes, and the stock moves when each fulfillment happens. In that mode Shopify is already holding the ordered units as committed at the location.
A recompute inside that window therefore subtracts the units Shopify already holds as committed from the target it writes. Without that subtraction, a recompute between payment and shipment would put the sold units back on sale. It is the usual explanation for a displayed number that looks lower than “buildable plus shelf” would suggest — the difference is what is already spoken for.
See Order reservations for the other half of that setting.
Per-BOM disable
Section titled “Per-BOM disable”Each BOM has its own switch. A BOM with dynamic adjustment off is skipped by the cascade, even when other BOMs in the same order have it on. Useful for hand-curated BOMs that should keep their displayed quantity stable.
The “Synchronize with Raw Materials” button
Section titled “The “Synchronize with Raw Materials” button”On the finished-good detail page, Settings tab → Inventory behaviour. It appears only while dynamic adjustment is on, and it triggers an immediate recalculation for that BOM from current component and pre-assembled availability — the same thing the next order would do, on demand.
The same recompute is a bulk action: tick rows on the Finished goods list and choose Inventory → Sync with raw materials.
Use it when:
- You’ve manually adjusted a raw material’s stock outside of order events.
- You’re recovering from a failed execution.
- You want to verify a BOM is in the expected state without waiting for an order.
When to use which
Section titled “When to use which”| Goal | Use |
|---|---|
| Shopify storefront should reflect what’s buildable right now. | Dynamic adjustment. |
| Storefront should always show a fixed quantity I curate. | Maintain inventory level. Set the variant to the desired quantity once; let Assemblified hold it there. |
| Customers should only see what’s physically built. | Only sell pre-assembled quantities (covered in Pre-assembled). |
| Storefront tracks Shopify’s normal inventory math, no recompute. | All three off. |
Common gotchas
Section titled “Common gotchas”- Dynamic adjustment runs after every order — for every BOM that shares components. A single order can trigger recomputes across many BOMs. Plan your store’s BOM volume accordingly.
- The cascade has a known issue today. A multi-BOM cascade with shared components currently has a cascading-decrement bug under specific conditions. If your displayed quantities don’t match expectations after a complex order, run Synchronize with Raw Materials on the affected BOMs to force a clean recompute.
- Maintain inventory level depends on the Shopify write landing. If a Shopify call fails partway, the displayed quantity may drift from what you expected. The run on the Logs page shows the failure and the stage it happened in.
- Pre-assembled is added to the dynamic adjustment result. A BOM with bottleneck 35 and pre-assembled 10 displays 45, not 35 or 10.
- A shop with drift has a tool for it. If local quantities and Shopify have come apart on finished goods that once ran Only sell pre-assembled alongside dynamic adjustment, Settings → Tools → Inventory Health scans for it and corrects the live gap — see Pre-assembled → Inventory Health.
Where to next
Section titled “Where to next”- Settings reference — the toggle definitions.
- Pre-assembled inventory — how pre-assembled feeds into the displayed quantity.
- Location rules — a different recipe, or no bill at all, at one location.