Skip to content

Mapping locations

Stock does not just live in a store — it lives at a location. So before anything can sync, we have to know which of your partner store’s locations corresponds to which of the main store’s.

Each of the main store’s inventory locations is a slot. Every partner location that should participate is mapped onto exactly one slot.

MAIN STORE PARTNER A PARTNER B
────────── ───────── ─────────
Warehouse ◄── slot 1 ──► EU Warehouse Fulfilment DC
Retail ◄── slot 2 ──► Berlin Shop (not mapped)

The rule is one to one, both ways: a partner location maps to exactly one slot, and a slot has at most one location per partner store. You cannot point two partner locations at the same slot, and you cannot point one partner location at two slots.

Routing between partners follows from that. If a partner sells from a location mapped to slot 1, the change lands at every other store’s slot-1 location. There is no separate partner-to-partner mapping to maintain.

A slot is a main-store location, and it is created for you rather than configured: creating the group turns the main store’s default location into the group’s first slot, and changing that default location moves the slot with it.

The setting this all depends on is Multi-location sensitive adjustments, at the main store, under Settings → General. It is the section heading there; the switch inside it reads “Respect order and fulfillment locations when available”.

If it is off at your main store, the location dimension is switched off on the origin side across the whole group: whatever location a sale happens at, it resolves to the group’s single slot — the main store’s default location. The Locations tab shows that one row, under a blue “Single location” banner that says so and names the setting:

The main store runs on one location, so the group has exactly this one row. Map each partner store’s location onto it: nothing syncs to a partner store until its location is mapped. To map several main store locations, turn on “Multi-Location Sensitive Adjustments” under Settings → General in the main store.

You still map each partner store’s location onto that row. The slot only says where the change is counted; the partner mapping says which of the partner’s locations receives it, and we never guess that. A partner with no mapping on the single slot receives nothing — every change for it is recorded as “Location not mapped”, and settle / hourly-check runs finish green while that store’s stock never moves. Mapping the partner is the first thing to do after it joins.

Two things follow. The mode is read from the main store’s setting, not from yours, so a partner sees the same one-row grid whatever its own setting says. And with the mode off you cannot add or remove main-store locations — the group has exactly one slot until you turn the setting on at the main store.

That is the simplest setup and the right one if your locations are labels over a single physical pile. Turn it on only when your locations hold genuinely separate stock — see Set up multi-location inventory.

  1. Get the main store’s default location right first.

    It becomes the group’s slot. Changing it later moves the slot and can strand mappings that pointed at the old one, so settle it before you map partners rather than after.

  2. Open Settings → Multi-store → Locations — the mapping is edited only at the main store. A partner sees the same grid, read-only, with a note saying so.

    The tab shows a grid: the main store’s slots down one side, each partner store across the other. Empty cells are unmapped locations.

  3. Have each store refresh its own location list.

    Refresh locations — in the Locations table’s toolbar, and available to partner stores too — reads the store you are currently in. It cannot fetch a partner’s list for it. If a partner’s column shows raw numeric ids instead of names, or a location you just created is missing, someone has to open Settings → Multi-store at that store and press Refresh locations there. An amber “Not reported” banner names any store that has never reported.

    A stale list never blocks you: if a store has reported nothing at all, the cell becomes a text box and you can type the location id by hand, then press Save.

  4. Map each partner location onto a slot.

    Choose the slot that holds the same physical role: the warehouse that ships the same orders, the shop that serves the same customers. Names do not have to match; the mapping is what matters.

  5. Leave locations you don’t want to participate unmapped.

    Unmapped is a legitimate, deliberate state — a partner’s returns-processing location or a damaged-goods bin has no business receiving group stock changes. It just has to be a decision, not an oversight.

  6. Check the Ledger.

    Place one real order (or watch a day while the group is still recording only) and look for rows saying “Location not mapped”. Each one names a location you still need to decide about.

Remapping is allowed, takes effect immediately for new changes, and needs no clean-up first: picking a different location for a slot — or moving a location to a different slot — replaces the old mapping in the same step. You never have to unmap before you remap.

Changes already in flight land at the location they were prepared for — we do not re-target a message that has already left. So after a remap, expect a short tail of changes arriving at the old location. The hourly check settles the totals.

Removing a mapping (the × beside a mapped cell) does not delete anything. It simply stops that location participating; subsequent changes for it are recorded as “Location not mapped”.

If the main store’s slot changes underneath a partner mapping — most often because the main store’s default location moved, or because a main-store location was removed from the Locations table — the partner’s row survives but no longer points at anything.

Those rows get a card of their own below the Locations grid, titled “Mappings without a main store location”. It appears only when something is actually stranded, and its table names each store, the location in that store, and the main-store location it still points at, with a Remove mapping button per row.

Nothing travels through a stranded mapping. Either remove it or map that store’s location onto a slot that still exists.

If Shopify reroutes an order’s fulfilment to a different location after we have already synced it, we issue a correction pair: we give the quantity back at the old location’s counterpart and take it at the new one. Both halves are recorded under the same entry in the Ledger, so you can see the move as one event rather than two mysterious opposite adjustments.

Until that correction lands, the totals are right but the split across locations can be stale. The hourly check heals it.

If a partner deletes a location we are mapping to, Shopify starts rejecting our writes and we mark that mapping dead. Nothing syncs through it any more.

Fix it by picking a different location for that slot at that store, or by removing the mapping. You do not have to clear the dead one first — choosing a replacement replaces it.

SymptomCauseFix
Stores linked, Ledger full of “Location not mapped”that partner location has no slotmap it
A partner column shows raw numbers, or a location is missing from the pickerthat store has not reported its locations, or its list is stalepress Refresh locations inside that store’s Settings → Multi-store. Or type the location id into the cell
The grid does not respond to clicksyou are on a partner store; only the main store edits the mapdo it at the main store
Everything lands at one locationthe main store has Multi-location sensitive adjustments off, so the whole group is single-slotexpected in that mode; turn it on under Settings → General at the main store if your locations hold separate stock
Stores linked, sync runs finish, but a partner’s stock never changes — its Ledger rows all say “Location not mapped”the partner’s location was never mapped onto the main store’s slot (single-slot mode included — the row is still required)open Settings → Multi-store → Locations at the main store and pick the partner’s location in its column, then run Settle once
Stock landed at the wrong location after a reroutea change was already in flight when Shopify moved the orderthe hourly check heals it; totals were never wrong
A “Mappings without a main store location” card below the gridthe slot those rows pointed at is goneremove the mapping, or map that location onto a slot that exists
”Multi-location handling cannot be switched off while n locations are mapped” when you turn the setting offthe group would silently collapse every slot onto oneunmap the extra main-store locations in the Locations table first, down to one