Skip to content

Set up multi-location inventory

If your shop fulfills from more than one inventory location — multiple warehouses, a warehouse plus a retail store, distributed fulfillment partners — Assemblified can track raw materialsRaw 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 → and finished goods per location. This guide is the setup checklist plus the gotchas; the setting-by-setting detail lives in the initial setup wizard reference, which you can re-run from Settings at any time.

The one decision that shapes everything: do your locations share physical stock, or not? Locations that are just labels over one physical pile need much less of what follows.

  1. Get Shopify right first.

    Multi-location tracking mirrors Shopify’s location model. Make sure your locations exist in Shopify admin, the component variants are stocked at the locations that actually hold them, and inventory tracking is on for each.

  2. Set the default location.

    The default locationDefault locationThe Shopify location Assemblified falls back to when an order or fulfillment webhook doesn't carry a more specific location. Inventory adjustments, dynamic recalculations, and per-location records all use this as their anchor. Read more → (wizard step 1) is the fallback anchor whenever an event doesn’t name a location. Pick your primary warehouse.

  3. Turn on multi-location mode.

    Wizard step 2. With it on, BOM execution applies each adjustment at the location carried by the incoming order or fulfillment event, and material availability checks become location-aware. With it off, everything targets the default location as one pool.

  4. Decide on location-sensitive dynamic adjustments.

    Wizard step 2b, only relevant if you use dynamic adjustmentDynamic adjustmentA per-BOM toggle that recalculates the BOM's Shopify-displayed quantity from current component availability after every order. The displayed quantity is the bottleneck-resource count plus pre-assembled stock — your storefront never sells more than you can build. Read more → . Turn it on when locations hold separate physical stock — “how many can we build here?” is then computed per location. Leave it off when locations share one physical pile; a single global buildable number is more accurate there.

  5. Pin component locations where it matters.

    A BOM’s component rows can carry a specific location (Creating a BOM). Use this when a component should always be consumed from one place — e.g., raw stock that only exists in the production warehouse. Components consumed from a location also restore to that same location on refund or cancellation.

  6. Consider order reservations.

    In multi-location stores there’s a window between order routing and fulfillment where a BOM’s components are still sellable to other orders. Order reservations close that over-promise window by moving resolved components to Shopify’s reserved bucket at routing time. It’s opt-in and shop-wide — read that page’s prerequisites before enabling.

  7. Verify with a test order per location.

    Route one test order to each location (Shopify’s routing follows your fulfillment settings) and read the execution log: the adjustment should land at the routed location, not the default. Then cancel and confirm the restore goes back to the same location.

  • Location mapping is by Shopify location id. Renaming a location in Shopify is fine; deleting and recreating one is not — re-check the default location and any pinned component locations afterwards.
  • Historical replays have a multi-location safeguard — see Historical orders replay before replaying old orders whose location data predates your current setup.
  • Virtual materials track per-location too. Seed their opening stock at the right locations, not just a global number (Virtual materials).
  • Drift happens at the busiest location first. When a shared component’s numbers look off, Reconcile inventory per location rather than adjusting the global figure.