Skip to content

What syncs, and what partners can't do

Anything that moves stock through Assemblified and is a matched product travels to every other store in the group.

ChangeTravels?Notes
A sale of a matched productyesincluding sales of 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 → ’s components at other stores
An order edit, cancellation or refundyesas the difference from what we last recorded, so a quantity change of +1 sends +1, not the whole line again
Component consumption from a BOM buildyeswhen the main store builds a product, the components it consumes are broadcast
A restock or stock count of a material in Assemblifiedyesdone at the main store — see the partner section below
A transfer, purchase-order receipt, stock take or adjustment from Logistifiedyesonly from the main store; a group runs one Logistified instance
A work order completing or being reversedyesthe finished good it produced and the components it drew
A flow executionyesmaterials and the finished-good quantities the flow sets
A recalculated buildable count from 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 → yesbroadcast from the main store only, as an absolute value (“this is now exactly N here”), never as a difference. A partner’s own recalculation is deliberately silent
ChangeWhy not
A stock edit made directly in Shopify adminwe only broadcast changes that go through Assemblified. A direct Shopify edit is invisible to us at the moment you make it — but the hourly check will find it, and the main store’s value is what survives. See How corrections work
Anything on a product that is not matchedno match, nothing to send it to. Fix it on the Shared SKUs tab or by running an index build
Anything at a location that is not mappedsee Mapping locations. We never guess a location
Anything on a product that is ambiguousa SKU that is also a recipe at the partner store would be double-consumed. We check it but never write
Prices, product titles, descriptions, images, metafieldsmulti-store is about stock. It changes nothing else
Orders, customers, fulfilmentsthese stay entirely within the store they belong to
Bills of materials themselvesrecipes live at the main store. They are not copied to partners

They work exactly like sales at the main store, with one addition: if the product is built from components, the main store runs the build.

The partner’s own finished-good stock drops at the partner. The order details travel to the main store, which expands the recipe, consumes the components from its own inventory, and broadcasts those component changes to everyone else. So a partner store can sell a manufactured product without holding the recipe or the raw materials.

Two consequences worth knowing:

  • Timing follows your main store’s settings. If the main store deducts components at fulfilment (multi-location mode) rather than at checkout, a partner’s order behaves the same way — the build waits for the fulfilment signal. That can legitimately be days.
  • The order shows up in the main store’s execution log under a composite id that names the partner store, and its link opens the order in the partner’s admin, not the main store’s.

What a partner store is blocked from doing

Section titled “What a partner store is blocked from doing”

On shared products — products the shared-SKU index has confirmed as Matched at that store — a partner store is blocked from four operations. Each refusal names the specific products.

OperationWhat you’ll see
Restock / stock count in the raw-materials spreadsheetshared rows are skipped and reported; the rest of your submission goes through
Adjusting pre-assembled stock for a shared finished good — from the BOM page, from a safety-stock release, or through the APIrefused outright. It is one product at one location, so there is no “rest of the submission”
Running a flow that touches a shared productthe whole run is refused, listing the blocked products
Starting a work-order build run that touches a shared productthe whole run is refused, listing the blocked products

Three details that come up:

  • Restocks are partial, not all-or-nothing. If you submit twenty rows and three are shared, the seventeen go through and the three are reported back as skipped. Only a submission where everything is shared is refused outright. Flows and build runs are the opposite — they are one physical act, so half of one is not a smaller version of it.
  • Blocking is by product, not by category. A partner’s own products — anything not confirmed Matched in the shared-SKU index — behave completely normally. A SKU still sitting at “Not checked”, “Not found”, “Gone” or “Ambiguous” is not blocked.
  • A refused flow still leaves a log entry, marked failed, naming the blocked products. A run that vanished without trace would be indistinguishable from one nobody started.

The Ledger tab is the record of everything. It holds three views behind one switch, plus filters that run over the whole ledger rather than the page you are looking at:

ViewShows
Inventory changes (default)one row per change to one store: store, location, SKU, the change, its status and its reason
Eventsthe order events the group received, newest first
Index coverage per storehow many SKUs each store has in each state

Narrow it with the store picker, the SKU search, and — once syncing is live — by clicking a status counter, which doubles as a filter. The SKU and status filters apply to inventory changes only: an event row carries neither, and the tab says so rather than letting an empty table imply otherwise.

Each inventory-change row carries a Status and, when something stopped it, a Reason.

The statuses:

StatusMeans
Recordedrecord-only mode. This is what we would have sent
Queued / Sendingon its way. Clears in seconds
Applieddone, and we recorded the resulting stock level
Waiting for locationwaiting for Shopify to tell us where the order ships from
Waiting for fulfilmentthe main store consumes components at fulfilment. Can sit for days — this is not stuck
Waiting for the store to resumethat store is paused. Held, not lost — it is sent when the store resumes
Sent for buildingthe order reached the main store, which is running the recipe
Not found / Ambiguous / Item deletedthe shared-SKU index’s verdict for that store
FailedShopify refused it. The exact message is shown
Skippedsee the reason beside it

The reasons you will meet most:

ReasonMeans
Location not mappedthe change happened at a location that store has no counterpart for. Fix the map
Location not known yetShopify has not told us where the order ships from
Not found at that storethe product does not exist there. We re-check every 24 hours
Ambiguous — that SKU is a bill of materials thereremove the partner’s local recipe, or fix the duplicate SKU
Superseded by a newer changea later change already covers it. Nothing to do
Nets to zero — nothing to sendthe change cancelled itself out
Would syncrecord-only mode: nothing was wrong, we simply did not write

An Applied badge with an empty reason is the healthy row. Every other outcome tells you something specific, and none of them is “we don’t know”.

A new group records only: the ledger fills with rows saying what would have happened, and nothing is written to any store. Switching a group to live syncing is not a control on this page — see the overview.

What you can stop yourself is the group: Settings → Multi-store → Group → Pause group, at the main store. While it is paused, orders are still written into the Ledger as history but produce no stock changes anywhere, and the hourly check does not run. Resuming does not replay the gap — nothing was queued up to replay. Use the hourly check or a settle to bring the stores back in line afterwards.

Pausing one store is different: that only happens when a partner’s Enhanced plan lapses, and it holds that store’s changes as “Waiting for the store to resume” rather than dropping them.