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 build run — building a bill of materials on the spot, or a work order’s build runyesthe materials it consumed and the finished-good quantity it produced
A recalculated buildable count from 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 → 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 — which is what Multi-location sensitive adjustments does, under Settings → General — 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”
Building a bill of materials on the spot when it touches a shared productthe whole run is refused. The dialog shows a red banner naming the blocked products, not counting them
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. Build runs are the opposite — a build is 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 build 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 tabs, each carrying a count, plus filters that run over the whole ledger rather than the page you are looking at:

TabShows
Inventory changes (default)one row per change to one store: store, location, SKU, the change, its status and its reason. While the group is only recording, this tab is titled “Would-be inventory changes”
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. While the group is still recording only there are two summary badges instead, “Ready to sync” and “Skipped”, because a would-be change has no delivery status to count. 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.

A row can be expanded for its Details: what Shopify said, the resulting stock level, the order position and the message id.

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. You switch it to live syncing yourself, on the Group tab at the main store: press Turn syncing on and confirm. The confirmation is there because the first thing that happens afterwards is real stock moving in your other stores, and because the observe window is not replayed — only new events sync. See Turning syncing on, and off again.

There are then two ways to stop, and they are not the same size:

  • Turn syncing off (same button, same place, no confirmation). New changes stop being sent immediately, and the hourly check stops running too. What does not stop is the recording: the Ledger keeps filling with what would have happened, so you keep the diagnostic trail. Changes already on their way still land.
  • Pause group (Settings → Multi-store → Group, at the main store). This stops the group. Orders are still written into the Ledger as history — marked “No change” — but nothing is routed anywhere, the hourly check does not run, and the group cannot accept new members until it is resumed.

Neither replays the gap when you switch it back on; 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 again: that happens when a partner store loses its subscription entirely, and it holds that store’s changes as “Waiting for the store to resume” rather than dropping them.