Automate returns from request to RMA, 3PL inspection, restock and refund
Updated · By Ecomsellertool editorial team
To automate ecommerce returns, check each request against your return rules, approve the clean ones and send the RMA to your 3PL as an expected receipt. When the 3PL inspects the item, a written disposition table maps its condition to an inventory action (restock, quarantine, write off, return to vendor) and a refund action (full, partial, store credit or hold). A person decides every exception.
- Shopify's self-serve returns let customers request returns of delivered items from their order status page; the merchant approves or declines each request (checked October 13, 2026).
- Shopify return rules set the return window (14, 30, 90 days, unlimited or custom), final sale items, a restocking fee and a return shipping fee.
- Shopify Flow has Return requested, Return approved, Return processed and Refund created triggers, but no action that approves, declines or refunds a return.
- In the Admin API, each returned unit gets one disposition: RESTOCKED, NOT_RESTOCKED, PROCESSING_REQUIRED or MISSING, and it cannot be changed afterwards.
- A Shopify refund cannot be reversed, and a return cannot be created after a refund, so the return is recorded first.
- On Amazon FBA, Amazon receives and handles returns itself; the brand's job is checking the outcome.
The step map: who runs each step
Trigger: A customer requests a return from the Shopify order status page or through support, and later the 3PL scans the returned package in and records its inspection result.
| Step | What happens | Who runs it |
|---|---|---|
| 1 | When a return is requested, rules check it against the return window, final sale items, the order's value and the customer's return history, then approve it with a label or hold it for a person. | Rule |
| 2 | An AI model reads the customer's free-text reason and any photos and suggests a reason code, such as defect, wrong item or change of mind. It never approves, declines or refunds. | AI model |
| 3 | The approved return is sent to the 3PL as an expected receipt with the RMA number, SKUs, quantities and the reason, so the warehouse knows what should arrive. | Rule |
| 4 | 3PL staff receive the package, match it to the RMA, inspect each unit and record a condition grade with photos. | Person |
| 5 | The disposition table maps each grade to an inventory action: restock to the sellable location, quarantine, write off or return to vendor, in the 3PL's system and in Shopify. | Rule |
| 6 | Rows the brand marked as clean issue the refund or store credit within the value limit; every other row holds the refund with the grade, the photos and the reason attached. | Rule |
| 7 | A person works the hold queue: partial refunds, wrong or missing items, late returns, carrier claims and vendor claims. | Person |
| 8 | A daily check lists labels with no carrier scan after the set number of days, returns received but not graded, refunds with no disposition and quarantine stock that is aging. | Rule |
5 rule steps · 1 AI model step · 2 person steps. A rule follows fixed logic you approve; an AI model handles messy input and its output is checked by rules; a person makes the calls listed below.
What stays with a person
- Partial refunds, store credit instead of a refund, and any refund above the value limit your team sets
- Wrong items, empty packages and missing units, before any refund
- Returns outside the window and opened final sale items
- Carrier damage claims and return-to-vendor claims with the supplier
- Changes to the disposition table and the value limits
Which tools can run it
- Shopify's built-in returns with return rules and Shopify Flow alerts, for low volume where a person processes each return in the admin
- A returns app plus Zapier, Make or n8n to pass RMAs to the 3PL and grades back, for a 3PL with an API and simple rules
- Custom code on your accounts, for the full disposition table, several 3PLs, value limits, carrier traces and quarantine tracking
Systems it connects
- Shopify returns and refunds
- Shopify Flow
- 3PL warehouse system or API
- Return label carrier
- Helpdesk or email
- Slack or email for the hold queue
Build size: Medium
Each rule is simple; the work is getting the 3PL's grades back in a usable form and keeping Shopify, the 3PL and the refund in step.
A return touches three systems that rarely agree. Shopify knows the customer asked to send something back. The 3PL knows what actually arrived and what state it is in. The payment side knows whether money went out. Most brands connect them with a person who reads the 3PL's email, opens the order, decides whether the unit goes back on the shelf, and clicks refund. This recipe replaces that reading and clicking with a written disposition table, so the 3PL's inspection result decides the restock and the refund, and a person sees only the exceptions. It is one page of our automation library.
What should happen to each returned item?
Write the decision down before you build anything. The table below is the one we start from: one row per inspection result the 3PL can report, what happens to the stock, what happens to the money, and who hears about it. The inventory column names, in brackets, the Shopify disposition the row records: restocked, not restocked, processing required or missing (checked October 13, 2026). Copy the table and change it to your policy.
| # | 3PL inspection result | Inventory action (Shopify disposition) | Refund action | Who hears about it, and the exception |
|---|---|---|---|---|
| 1 | Unopened, seal intact, inside the window | Restock to the sellable location (restocked) | Full refund to the original payment, minus any return fees your policy sets | Only the customer, by the refund email |
| 2 | Opened, complete, resellable as new | Restock to the sellable location (restocked) | Full refund, minus a restocking fee if your policy charges one | No one |
| 3 | Opened and used, resellable only as open-box | Move to an open-box location or SKU (not restocked) | Partial refund or full refund, per your policy | A person approves any partial amount; the customer is told why |
| 4 | Damaged by the carrier on the way back | Quarantine pending the carrier claim (processing required) | Full refund if you sent the label | Operations files the carrier claim with the 3PL's photos |
| 5 | Defective, and inspection confirms the fault | Return-to-vendor bin (not restocked) | Full refund, or an exchange if the customer asked for one | Purchasing logs it against the supplier; three defects on one SKU in 30 days alerts the product lead |
| 6 | Reported defective, no fault found | Restock if resellable (restocked), else open-box | Treated as a change-of-mind return under rows 1 to 3 | Support lead confirms before the customer is told |
| 7 | Wrong item: a different SKU, or not your product | Quarantine; never restock under the returned SKU (processing required) | Hold | Support contacts the customer with the photos |
| 8 | Missing parts or accessories | Quarantine for re-kitting or write-off (processing required) | Hold, then partial refund less the missing part's value | A person sets the amount |
| 9 | Opened final sale or hygiene item | Write off or dispose (not restocked) | Decline, or store credit as a goodwill exception | Support lead decides |
| 10 | Arrived after the return window, for example 45 days after delivery on a 30-day policy | Restock if resellable | Store credit instead of a refund, or hold | Support lead approves the exception |
| 11 | Package received empty, or fewer units than the RMA | Record the absent units as missing | Refund only the units received; hold the rest | A person reviews the customer's return history first |
| 12 | Label created, no carrier scan after, for example, 21 days | Record as missing once the carrier trace closes | Hold; no refund | Operations opens a carrier trace; support follows up with the customer |
| 13 | Exchange requested, returned unit grades as rows 1 or 2 | Restock (restocked) | No refund; the replacement ships and any price difference is settled | No one |
| 14 | Any row where the refund is above your limit, for example $300, or the customer has returned three or more orders in 90 days | As the matching row says | Hold for approval | Finance or the support lead approves |
Three choices make the table work. Inspection comes before money, so rows 7, 11 and 12 never pay out for something that did not come back. Row 14 runs on top of every other row, so a large refund is always seen by a person even when the grade is clean. And no unit goes back into sellable stock unless the grade says it is as good as new, because an open-box unit shipped as new becomes the next return. The windows, day counts, defect counts and the $300 limit are examples your brand sets, not facts and not advice for your store.
How does a return move through Shopify?
Through a return record with a status. Shopify's developer guide to returns apps lists the statuses: requested, open, declined, closed and canceled (checked October 13, 2026). A customer request sets requested; approving it, or creating the return directly, sets open; processing every item with a restock decision sets closed. The returnApproveRequest mutation approves a request, and returnProcess confirms which items came back, handles their disposition and can issue the refund in the same call. The guide tells existing return apps to migrate to returnProcess.
Approving a return creates a reverse fulfillment order, which Shopify describes as the work required to process the return. Shopify's page on managing reverse fulfillment orders adds the rules that shape your table: each unit is disposed of once and the disposition cannot be updated, a restocked unit needs a location ID, and a third-party fulfillment service can process the work, with a field that shows its confirmation status (checked October 13, 2026). That one-shot rule is why rows 4, 7 and 8 use "processing required" until a person has decided.
On the merchant side, Shopify's self-serve returns let customers request a return of delivered items from their order status page, and you approve or decline each request (checked October 13, 2026). Return rules set the window (14, 30 or 90 days, unlimited or a custom number), the final sale items customers cannot request, a percentage restocking fee and a flat return shipping fee. The same page notes that return fees are not deducted from refunds automatically, so your refund rule has to apply them.
Staff can also create a return from the order in the admin, with a reason that varies by product category. A Shopify return label is offered only when your primary location and the customer's address are both in the United States, and the restocking fee can be edited per item while the return shipping fee is set per return (checked October 13, 2026). Shopify's returns overview lists the three outcomes a return can end in: a refund, a return of the item, or an exchange.
What can Shopify Flow do with returns?
It can listen, alert and tag, but it cannot decide. Flow's Return requested trigger starts a workflow when a customer requests a return through self-serve returns, with a template that posts the request to Slack. The Return processed trigger fires when a return is processed, and Refund created fires on any full or partial refund, by a person or an app (all checked October 13, 2026).
| Job | In Shopify Flow | Where it stops |
|---|---|---|
| Alert on a new request | Return requested trigger, Slack template | Does not check the window, value or history beyond what conditions can read |
| Approve or decline | No built-in action | Needs returnApproveRequest from an app or code |
| Tag a serial returner | Return requested, then Add customer tags | Counting returns over 90 days needs a Get data step or code |
| Restock and refund | No built-in action | Needs returnProcess, with the 3PL's grade as input |
| Clean up | Cancel, close or reopen a return | Changes the return's state, not stock or money |
Flow's Send Admin API request action can run Admin API mutations that have no Flow action yet, except deprecated and asynchronous ones and a few others Shopify lists (checked October 13, 2026). Check that the mutation you need appears in the action's list before you design around it. Even then, the 3PL's grade has to reach Shopify first, and that is the part Flow cannot fetch on its own. For more on what Flow covers, see our guide to what Shopify Flow automates.
Where does the 3PL fit, and what goes wrong there?
The 3PL is where the truth about a return lives, so the integration runs both ways. Out to the 3PL goes the RMA as an expected receipt: the RMA number, order, SKUs, quantities and the customer's reason, so the warehouse can match a package that arrives with a crumpled label. Back from the 3PL comes the grade per unit, with photos, in a fixed list of codes that matches the rows of your table. Free-text notes such as "looks OK" cannot drive a rule.
Three failures are common. The 3PL restocks returned units into sellable stock in its own system while Shopify records them as not restocked, so the two counts drift; our 3PL reconciliation page shows how to catch that. Returns sit ungraded for days because nobody asked, so the daily check lists every received return without a grade. And the refund goes out on the label scan while the box turns out to be empty. If your 3PL takes orders through a Shopify app, the outbound side is covered in our Shopify orders to a 3PL recipe.
When should the refund go out, and what stays with a person?
Refund order matters because Shopify's page on refunding orders says a refund cannot be canceled or reversed once you start it, and a return cannot be created after a refund has been issued (checked October 13, 2026). Record the return first, then refund. Shopify lets you refund to the original payment, to store credit, or both, and processing a return can refund now or later, per its page on processing returns.
Deciding whether a refund is deserved is judgment, which is why our guide to what to automate first scores refund approval low. Receiving, grading and restocking are rules once the grade codes exist. So the table splits the two: the rules issue refunds only on the rows you marked clean and below your limit, and everything else waits for a person with the grade, the photos, the order and the customer's return history in one place. The support-ticket triage recipe handles the customer conversation around it, and if a customer files a card dispute instead of a return, the chargeback evidence recipe pulls this return and refund history into the response.
How are Amazon FBA returns different?
For FBA orders, the flow above mostly does not apply. Amazon's Fulfillment by Amazon page says Amazon receives and stores your inventory and handles customer service and returns on your behalf (checked October 13, 2026). There is no RMA to send to your 3PL and no grade to map. What stays with you is checking the outcome: units that came back unsellable, refunds where the item never came back, and whether Amazon reimbursed what it owes. Our FBA reimbursements page covers those windows.
Who builds returns automation for Shopify brands?
Ecomsellertool builds workflow automation on your own Shopify store, 3PL accounts and helpdesk. We have built software on Amazon's seller APIs since 2017 and shipped 50+ tools for 100+ teams. For returns we write the disposition table with you first, agree the grade codes with your 3PL, then build the approvals, the RMA handoff, the restock and refund rules and the hold queue. Send a project brief or read how our workflow automation service works.
The building blocks are work we have shipped:
- Condition grading and refunds in one system. For EzBookPrep, a book preparation service for Amazon sellers, we built the system that catalogs each book, assesses and records its condition, sends alerts for the next action on each book, and handles billing and return or refund processing for prep clients.
- Returns logged from the client side. For Little Owl, a 3PL and FBA prep center, we built the software its sellers use to add shipments, returns and listings, and its team uses to track inventory and inbound shipments.
The integration can run on Ecomsellertool Growth OS beside your other order and stock flows.
Get your returns flow built
Send us your return policy and your 3PL
Describe the workflow you want automated. We reply with a written plan: scope, timeline and a fixed price.
Frequently asked questions
How do I automate returns in Shopify?
Turn on self-serve returns and set return rules for the window, final sale items and fees. Then automate around the request: rules approve clean requests and send a label, the RMA goes to your 3PL as an expected receipt, and the 3PL's inspection result decides the restock and the refund through a disposition table. Keep exceptions with a person.
Can Shopify Flow approve returns or issue refunds automatically?
Not with a built-in action. Flow has return triggers, including Return requested, Return processed and Refund created, and actions to cancel, close or reopen a return. Approving a return and processing a refund are Admin API mutations, returnApproveRequest and returnProcess, so they run from an app, custom code or, where the mutation is listed, Flow's Send Admin API request action.
What is an RMA in ecommerce?
A return merchandise authorization: the record that says a return was approved, which items and how many are coming back, and why. Its number goes on the label or packing slip so the warehouse can match the package to the return. In Shopify, approving a return request creates the return and the reverse fulfillment order that tracks the work.
Should returned items go straight back into sellable stock?
Only after inspection, and only when the grade says resellable as new. Opened, damaged, defective or incomplete units go to a quarantine location or are written off, so they never ship to the next customer. In Shopify, a restocked unit needs a location, and each unit's disposition is recorded once and cannot be changed.
When should a refund be issued: on the label scan or after inspection?
It is a policy choice. Refunding on the first carrier scan is faster for the customer but pays out before you know what is in the box. Refunding after inspection protects you from empty or wrong-item returns. Many brands do the first for low-value orders from customers in good standing and the second for everything else.
How are Amazon FBA returns different?
Amazon receives FBA returns at its own fulfillment centers and handles customer service and returns for the seller, so there is no RMA to send to your 3PL. What remains for you is checking the outcome: returned units that came back unsellable or never came back, and whether Amazon reimbursed what it owes.
