Of all the questions that reach us from stores running an inventory sync, returns produce the most stubborn ones. I processed a return and put one unit back into Shopify, and by the next morning the number was back to what it was. The sync log shows nothing unusual and the settings are correct. The restocked unit is simply gone.
This is not a defect. It is the sync doing precisely what it was designed to do. The cause lies in the order of operations rather than the mechanism, which is exactly why reviewing your settings will never fix it. Let us look at what Shopify's return handling does to stock, and then at how to make returns and inventory sync fit together cleanly.
Why returns collide with inventory sync
First, what is actually happening. Once the logic is clear the remedy becomes obvious, and the suspicion that the sync cannot be trusted goes away with it. This part is worth reading slowly.
Two things writing the same number
In a store that treats the spreadsheet as its single source of truth, Shopify's stock numbers flow in from the sheet. Introduce returns and the picture changes, because processing a return in the Shopify admin makes Shopify itself put stock back. Now two different things are writing your inventory.
Single source of truth works beautifully when there is exactly one writer. The instant there are two, you have a question of who wins, and the answer is always whoever wrote last. If a scheduled sync runs overnight, the sheet is what survives. Available versus on hand, explained is the quickest way to see which number moves.
How the restocked unit disappears
Follow it chronologically. In the morning both sheet and Shopify say ten. At midday a return arrives and somebody processes it in Shopify. Restock items is on, so Shopify now says eleven. So far, exactly as intended.
The problem is that the sheet still says ten, because nobody updated it. Overnight the scheduled sync runs and writes that ten into Shopify. By morning eleven has become ten again. The sync did exactly as instructed, and there is no bug anywhere in the chain.
Nobody made a mistake, and the number still dropped
What makes this awkward is that everyone involved did their job correctly. The returns handler followed the procedure; the sync ran as configured. The outcome is still wrong. With nobody to point at, the investigation tends to settle on a vague conclusion that the sync is somehow unreliable.
Meanwhile the damage spreads quietly. The returned item is physically on the shelf but does not exist as far as Shopify is concerned. A saleable unit sits there unsold, and your stock turn figures skew a little further. The higher your return rate, the less ignorable that distortion becomes.
In apparel, where size-related returns happen daily, that accumulation can reach dozens of units within a few months. Worse, the items most likely to come back are the popular sizes — precisely the stock that should be selling first ends up asleep. As lost opportunity goes, it is a painful shape.
Turn that around and it means tidying up your returns process increases sellable stock without buying anything. Framed as digging out inventory already sitting in the warehouse, the unglamorous work of fixing a procedure suddenly looks well worth doing.
What Shopify's return handling does to stock
Before designing a remedy, let us pin down Shopify's actual behaviour. Write operating rules on top of a fuzzy understanding and the rules end up misaligned with reality. Here is what the Help Center describes.
Restock items is on by default
The refund screen carries a Restock items option, and it is selected by default. In other words, stock comes back automatically unless somebody deliberately unticks it. If you would rather restock by hand, deselecting it and refunding only is a perfectly valid way to work.
There is one important condition: the option only appears when inventory is being tracked for the item in question. For untracked products there is nothing to restock in the first place. When designing how returns are handled, confirm that the products involved are actually tracked before anything else.
Which location it goes back to
When processing a return you can choose where to restock the item, and refunded items are added to the inventory of the location you assign. If you run more than one location, whether that assignment matches reality is what decides your accuracy.
The classic mismatch is an order shipped from the warehouse while the return arrives at head office or a shop. When the physical destination and the Shopify location disagree, both locations end up wrong. Mapping return addresses to restock locations up front removes most of this confusion.
Restocking with no refund attached
When there is no payment to refund — an undeliverable parcel coming back, say — you can restock the items without creating a return or a refund at all. You open the order, choose to restock, and enter the quantity. That path moves stock too, so from a sync perspective it behaves identically to a refunded return.
This is the path that gets overlooked. With no money changing hands it leaves a thinner trail in customer support records, and stock moves quietly. It is also the path where the person handling the return and the person adjusting stock are most likely to be two different people.
A returned unit is not automatically saleable
There is one more angle worth raising: whether a returned item should go straight back to available. Opened, marked, needs inspection — push those into available automatically and you eventually sell something you then cannot ship.
Shopify has an unavailable state that can hold stock for reasons like damage or quality control. Park returns there on arrival and move only inspected units into available. That single extra step removes a large share of the trouble returned stock tends to cause.
Building a return flow that does not drift
With the behaviour clear, we can turn it into working rules. The goal is not an elaborate mechanism but a settled order of operations. If the rule cannot be written in three lines, it will not survive a busy day.
Update the sheet, then touch Shopify
The most dependable rule is that whenever a return brings stock back, the sheet gets updated first. Change ten to eleven in the sheet, then process the return in Shopify. Now when the next sync runs, the sheet says eleven and your restocked unit survives.
Keeping that order matters. Handle it in Shopify and update the sheet later, and the second half will absolutely be skipped on a busy day. Make touching the sheet the first move and even a forgotten Shopify step gets corrected by the next sync. Choose the order that fails safe. Finding what slipped through is covered in reconciling physical counts warehouse by warehouse.
Decide who owns the number
In many stores customer support handles returns while the warehouse owns stock figures. That split is natural enough, but returned stock lands exactly on the seam. If nobody has been named as the one who updates the sheet, both sides assume the other will, and neither does.
Either answer works. Support updates the sheet at the same time it processes the return, or the warehouse does it when the physical goods arrive. What matters is committing clearly to one of them. Whoever notices fixes it collapses the moment return volume rises.
Give inspection-pending stock somewhere to sit
If returned stock should not become saleable immediately, giving it a home in the sheet makes the process much smoother. Add an awaiting inspection column, book returns into it on arrival, and move units into the sellable quantity column only once they pass inspection.
That way the fact of the return is recorded while only inspected units reach Shopify. If your setup already supports per-location columns, adding a column like this is a natural extension of the same design. Having the reason a number moved visible in the sheet also helps enormously when reviewing later.
When adding that column, make sure it falls outside the range the sync reads. Include it by accident and uninspected stock flows straight into Shopify's available quantity, defeating the entire point of separating it. After adding a column, a connection test is a quick way to confirm what is actually in scope.
A steadily growing awaiting-inspection figure is itself a signal. Either inspection is falling behind, or your return rate is too high to begin with. Once returns become a prompt to revisit product descriptions and sizing rather than purely an inventory chore, the sheet starts earning its keep well beyond stock control.
- When a return brings stock back: sheet first, Shopify second
- Match the restock location to where the goods physically arrive
- Restocking without a refund moves stock too — same rules apply
- Items needing inspection get a staging step before becoming available
- Name one person or team as the owner of the sheet update
Catching the drift that slips through
Rules never eliminate misses entirely. Returns cluster in busy periods, and busy periods are exactly when steps get skipped. So it pays to pair the rules with something that surfaces drift quickly.
Keep a returns log in the sheet
On a separate tab of the same spreadsheet, keep a simple log of date, SKU, quantity and restock location. It takes a couple of minutes and it lets you answer when did this stock come back later on. Because it lives apart from the quantity columns, it has no effect on the sync itself.
With that log in place you can compare, at month end, what should have come back against what actually reached the sheet. Any gap means a step was skipped somewhere. Use it less to identify a culprit and more to see where the process tends to leak.
A weekly reconciliation
Once a week, compare sheet against Shopify for the SKUs that had returns — nothing else. For most stores that is around ten items and takes a few minutes. Because return-related drift is confined to a small set of SKUs, narrowing the scope like this is unusually effective.
After changing the sheet layout or handing the return process to somebody new, spend a little longer on that week's check. Right after a change is when even experienced people get steps wrong. If you can run a connection test before a full sync, that is a good way to verify the change too. If the gap has grown, move on to recovering from a bad inventory sync.
Preparing for return-heavy periods
You already know when returns spike: after a sale, after the holidays. Temporarily simplifying how returned stock is handled during those windows is a legitimate tactic. Book everything into awaiting inspection for the duration, then move it into available in one batch once things calm down.
The reasoning is that in those weeks, the revenue gained by rushing stock back into available is smaller than the cost of the overselling and cancellations that the rush creates. Fewer steps when you are busiest — a principle that serves inventory work well beyond returns.
Restocked returns vanishing is not a flaw in your sync — it is the inevitable result of having two writers for one number. Which means the fix is equally clear: go back to one writer. If the sheet is your truth, then stock returning from a customer belongs in the sheet. That is genuinely all there is to it.
Fix the order, name the owner, check once a week. With those three in place, returns stop being a special case for inventory sync. In fact, stores that have returns cleanly organised tend to have better inventory accuracy overall. Deciding who owns the work that sits on a seam lifts the quality of the whole operation.