← All notes
E-commerce Development6 min

A restock is not an inspection

Shopify's return flow can refund, exchange, and restock in one process step. That is convenient when a sealed unit comes back clean. It is the wrong default when the box might be crushed, the stem wilted, or only two of three line items actually arrived. On stores where we keep money and the canonical order on Shopify — Provale Cup, Al's Flowers — the inventory move has to wait on a disposition decision, not ride along with approval or refund.

Restock answers a different question than receive

Receiving answers: did the physical unit show up, in what condition, and against which return line? Restocking answers: should that unit become sellable again at a specific location? Those are sequential jobs. Collapsing them into a checkbox on refund or approve is how damaged goods reappear as available while the customer has already been paid out.

Shopify's returnProcess mutation makes the split visible. You confirm quantities on return line items, then set dispositions — restock, or paths that keep the unit out of sellable stock. The platform will happily restock without anyone in the shop having opened the package. Convenience is not a warehouse policy.

We already treat available as a summary, not a ledger. Auto-restock without inspection is how that summary lies in the other direction: units that look sellable and should not be.

Partials are where the checkbox fails

Multi-line returns are the usual case once a store is busy. One SKU comes back pristine. Another is missing a part. A third never left the customer's porch. If process-and-restock runs as a single all-or-nothing against the whole return, you either withhold good stock or put bad stock back on the shelf.

Partial processing exists for a reason: confirm the lines you have actually inspected, disposition each one, and leave the rest open. Refund timing can follow the lines you trust. Inventory should follow the lines you have looked at — not the lines the customer said they would send.

On an ops-heavy shop like Al's Flowers, a returned arrangement is rarely a sealed SKU you can slap back into available. Perishable goods need a disposition of dispose or donate more often than restock. A checkbox inherited from apparel returns will invent inventory the cooler does not have.

Put inspection on the operational record

Shopify should remain the authority for the return object, refunds, and the eventual inventory adjustment — the same seam as order webhooks. Custom code owns the queue the shop works from: which open returns are waiting on a physical look, who claimed the carton, what condition was recorded, and which return line ids are ready to process.

Model that as a short lifecycle next to the Shopify return id: awaiting arrival, in inspection, ready to process, processed. Staff dispositions map to the platform's restock-or-not inputs at process time. Do not invent a second inventory ledger; invent a checklist that gates the mutate call.

Listen for returns/* the way we listen for orders. A returns/create or approve event can open a local inspection card. It should not call restock. When inspection finishes, returnProcess (or the admin equivalent) is the write that moves stock — keyed to return line items, not a fresh guess from the original order lines.

Refunds can wait; bad restocks cannot be undone quietly

Customers care about money timing. Ops cares about whether the next buyer gets a damaged unit. Those pressures pull in opposite directions. The workable compromise is usually: acknowledge the return fast, inspect before restock, and be explicit in customer copy about when the refund starts — after receipt and review, not at label creation.

Issuing a refund before inspection is sometimes a business choice. Restocking before inspection almost never is. If you must refund early for trust reasons, keep disposition open and inventory untouched until the box is opened. Paying someone back does not certify the unit.

When a bad restock does slip through, treat it like any other inventory lie: move the unit into damaged or quality control, reconcile with a pull against Admin inventory APIs, and fix the process that skipped the queue — not only the SKU count.

What we ask before we wire returnProcess

Which categories are ever restockable, and which are always dispose? Who in the shop is allowed to mark a line inspected — and is that the same person who clicks process in admin? Are partial returns in the first release, or refund-only until the queue exists?

Do marketplace or wholesale channels share the same location inventory, so a premature restock oversells elsewhere? Where does the inspection UI live — Shopify admin only, or a bench tool next to ticket print?

If the honest workflow today is "refund and restock in one motion," the smallest useful version is often staff-created returns with process deferred until after a physical check — not a full RMA portal. Build the queue that prevents the bad available count before you build the customer self-serve polish.

Questions

Why not restock when the return is approved?
Approval means reverse logistics can start. It does not mean the unit arrived or is sellable. Restock should follow inspection and a per-line disposition — especially on partials and perishable goods.
Can you refund before inspection but still delay restock?
Yes. Refund timing is a trust and policy choice. Inventory adjustment is a warehouse choice. Keep disposition open and skip restock until someone confirms condition against the return line items.
Where should the inspection queue live?
Shopify remains authority for the return and the inventory write. Custom code can own the operational checklist — awaiting arrival, in inspection, ready to process — and only then call returnProcess with per-line dispositions.

Sources

  1. Shopify — Creating and processing returns
  2. Shopify Admin API — returnProcess
  3. Shopify — Ecommerce returns management

Have something to build?

Tell us what you're working on and we'll tell you honestly whether we're the right fit.

Work with us