Return holds: when nobody decides refund vs restock (and how to clear them)

Every returns operation has a moment that nobody talks about: the package arrived days ago, it's sitting in your warehouse, and the question — refund this, restock it, or flag it as damaged? — has not been answered by anyone.

The customer has emailed twice. The refund credit is tied up. The unit is sitting outside active inventory. And the only reason it hasn't been resolved is that the process never assigned an owner to that decision.

This is a return hold — not a carrier problem, not a payment gateway problem — purely an internal decisioning gap. It is also one of the most common stuck-order variants we see across Shopify + ShipStation merchants.

The short answer

When a returned item arrives but no one has made the refund-vs-restock decision, the item enters a limbo state: inventory that can't be sold, a refund that hasn't fired, and an RMA that ShipStation is still holding open. The fix is to give the decisioning step an explicit owner, a 48-hour SLA, and a queue of its own so you can see how many undecided returns are aging right now.

Why return holds happen

No one owns the decision

Most returns workflows are designed around the physical move: the customer ships it back, the warehouse receives it, someone scans it in. But receiving a return and deciding what to do with it are two different steps — and the second step rarely has an assigned owner.

The picker who scans the item back in is not authorized to issue a refund. The returns app (Loop, AfterShip, ReturnGo, or whichever you use) may log the receipt, but it doesn't force a disposition decision before it closes. So the item lands in a received-but-undecided state and quietly waits for someone to notice.

Returns apps don't enforce a disposition step

Most Shopify returns apps are built to optimize the customer-facing experience — fast portal, good comms, branded tracking. The back-end disposition step is typically a manual action in Shopify admin: you restock the item, issue the refund, or mark it as damaged. None of these apps block you from closing the return without completing that step, which means undecided returns accumulate invisibly in your queue.

The refund credit and restock slot stay tied up

While the decision sits unmade, two resources are frozen. The refund is not issued, so the customer's money is still with you — which generates chargebacks and "where is my refund?" contacts. The unit is not back in active inventory, so it can't be sold, even if it's in perfect condition sitting two feet from your pick shelving. Both costs are real and compound with every day the decision goes unmade.

The customer clock started when the package delivered

From the customer's perspective, the return journey ended when the carrier confirmed delivery. They are now waiting — and their patience is measured in hours, not days. Research into ecommerce returns processing puts the best-in-class full cycle time at under 5 days from return requested to refund received, with best-practice disposition SLAs of 24–48 hours from receipt. The average brand sits around 9.5 days. Every day your decision sits unmade pushes you further from the standard your customers already expect.

Downstream cost

A return hold is not just a customer service problem. It creates four compounding costs:

  1. Customer contacts and chargebacks. Customers who do not receive a refund confirmation within a few days will open a dispute with their card issuer. A chargeback costs far more than the refund itself — typically $20–$50 in fees plus the inventory you no longer get back.
  2. A blocked returns queue. Once a few undecided returns stack up, the whole queue slows down. The team loses track of which items are truly waiting on the carrier and which arrived days ago and are just waiting on a decision.
  3. Phantom inventory. Items that are physically in your warehouse but not back in Shopify as available inventory skew your reorder calculations. You might place a purchase order for units you already have in hand.
  4. ShipStation RMAs that never close. If you use ShipStation's RMA workflow, an undecided return leaves the RMA open. Open RMAs accumulate and create noise that buries real, active return exceptions.

How to fix it, step by step

  1. Assign a daily decision owner. One person is responsible for working the returns-received queue every morning. That person has the Shopify admin access to restock or refund and the product knowledge to flag damaged goods. Without a named owner, the decision falls to whoever happens to notice — which means no one.
  2. Set a 48-hour disposition SLA. Industry best practice for ecommerce returns is to complete disposition — restock, refund, or write-off — within 48 hours of the item being received and inspected. Make this an internal SLA, not just an aspiration. Put it in the team's daily standup metrics.
  3. Write the decision back to both systems. Every disposition action should close the loop in two places. In ShipStation: close or cancel the RMA once the return is resolved. In Shopify: either restock the item (which adds it back to available inventory and optionally triggers the refund) or mark it as damaged (which removes it from resellable stock). Leaving either system in a partial state re-creates the hold on the next sync. For a full walkthrough of how Shopify handles the restock and refund steps together, see Shopify's returns and refund workflow documentation.
  4. Surface undecided returns as their own queue with an age column. A received-but-undecided return should not live in the same list as returns still in transit. Create a filtered view — in your returns app, in ShipStation, or in a simple spreadsheet — that shows only items where the disposition decision has not been made, sorted by days since receipt. Once you can see the age, the hold becomes actionable.
  5. Standardize the decision criteria. Give your decision owner a simple rubric: if the item is in original condition → restock + refund; if it is opened but functional → restock to a clearance location + refund; if it is damaged → photograph, flag as damaged in Shopify, restock to zero. The rubric removes the "I need to ask someone" delay that turns a 15-minute task into a 3-day hold.

How to stop losing these silently

The deeper problem with return holds is the same problem as any stuck order: they are invisible until a customer escalates. You can run a returns report and see totals, but you cannot easily see which specific returns are sitting undecided today, for how many days, and who is responsible for clearing them.

That is the gap StuckOrders closes for returns. It reads your Shopify and ShipStation data read-only, identifies returns that have been received but not resolved, and surfaces each one as an owned item in a queue — with an age, a next action, and a clear owner. It does not replace your returns app or your WMS; it just makes the undecided returns impossible to miss.

If you want to see how many return holds are sitting unresolved in your operation right now, the free 30-day stuck-order audit covers return holds alongside all other stuck-order types — no connection required to start.

Related