Real-time sync, syncs and the activity log
How inventory moves between your stores, what your rule decides, and how to find out in the activity log why a number is what it is.
Real-time sync
When inventory changes in one store for a matched SKU at a linked location, the app sends that change to the other stores in the same location link.
- It sends the change, not the value. If inventory in store A goes from 10 to 9, store B goes down by one, wherever B currently stands.
- It never goes below 0.
- Changes to the same SKU are sent one after another and never overtake each other.
- The app doesn't send its own writes back.
- How long transfers took is shown on the Overview page under "Delay in the last hour".
Real-time sync needs no rule. It does have a direction, which you set under "Settings" → "Real-time sync direction":
- Two-way: every change from every store is passed on. This is the default and the usual setup to prevent overselling.
- One-way: only changes from the leading store are passed on. Sales in the other stores then don't lower it.
You can switch it off at any time under "Settings" with "Turn off real-time sync". From then on, nothing is sent.
Syncs
A sync is the safety net under real-time sync. It reads the inventory of all matched SKUs in all location links and brings back in line whatever has drifted apart. Your rule under "Settings" → "Sync" decides which number wins:
- Highest inventory wins. The default.
- Lowest inventory wins. Careful: if a store reports 0 because it's empty right now, this rule would pull all the others down with it. The safety brake holds back such changes.
- A specific store wins. You choose the store.
The rule applies to manual syncs, scheduled syncs and the sync that runs when you turn on real-time sync.
When a sync runs
- Manually: on the "Sync" page with "Sync now".
- On a schedule: under "Settings", set "Scheduled sync" to "Once a day" or "Twice a day", choose the time and click "Save rule and schedule". The time zone is shown below.
- When you turn on real-time sync, always first.
- On its own, if the app was unreachable for more than 15 minutes while real-time sync was on. Updates from Shopify can get lost in a gap like that.
Reading a sync result
"Last sync" shows when it ran, whether it was manual or scheduled, and what came out of it:
- written: how many inventory levels it set.
- rejected: the inventory changed between reading and writing. That's intended, the next sync picks them up.
- failed: worth a look in the activity log.
- "All syncable inventory already matched." means there was nothing to do.
Further notices below the result are explained in the article "Notices and what to do".
The safety brake
Inventory at 0 can mean sold out, but it can also mean a stuck import or an empty store. So that a mistake like that doesn't empty every store, there are two brakes.
- In syncs: a SKU that would drop to 0 even though another store has stock isn't written. It's reported as "held back". If that affects at least 5 SKUs and more than 10% of the syncable SKUs, the whole sync stops and writes nothing.
- In real-time sync: if more than 20 inventory levels in one store drop to 0 within 10 minutes, the app pauses real-time sync for that store only. The other stores keep running. Once you've checked, you resume it from the Overview page.
Reading the activity log: "Why is this at 3?"
Each row in the activity log is a number the app set in a store, or tried to set. To find the explanation for an inventory level:
- Click a SKU, for example next to "Last transfer" on the Overview page or under "Matched" on the Matching page. Or open "Activity log" and enter the SKU in the filter, spelled exactly as in the store.
- You see the history of that SKU, newest first.
- The top row for the store explains why the inventory is what it is right now.
Each row has three parts:
- What triggered it, such as "Inventory in store-a.myshopify.com went down from 4 to 3." or "Manual sync using your rule."
- What the app did, such as "Transferred to store-b.myshopify.com: 4 → 3."
- What to do, if there's anything to do.
The app deliberately doesn't say "sale". Shopify only reports that inventory moved, not why. Calling a return a "sale" would be a guess.
Results in the activity log
- Written: the number is in the store.
- Rejected: the inventory in the target changed in the meantime. Nothing to do: real-time sync reads again and repeats the change, and for a sync the next one catches up.
- Held back: the safety brake wrote nothing. Check whether one of the stores is empty or incomplete right now.
- Skipped: the linked location doesn't track inventory for this item. The app never turns that on by itself.
- Failed: the row names the cause and the next step.
Filtering
Under "Filter" you narrow things down by SKU, store, result and date range ("From", "To"), then click "Apply filter". "Clear filter" shows everything again. "Older entries" takes you further back. The activity log only ever shows the stores in your own group.