Anything for automatically starting returns?

We have certain products on our site that work essentially like rentals. When the order is created we want to initiate a return right away and include the return label in the package sent to the customer. We are currently accomplishing this with a custom script in Netsuite. We’d like to transition to doing it in Shopify. I was hoping we could accomplish this using Shopify Flow but it doesn’t look like it’s possible, starting a return is not one of the actions available. Is there an app that can automatically initiate returns when certain products are ordered?

This sounds incredibly inefficient and costly.. Returns don’t reverse the transaction fees. I would change the way the customer orders. Either draft order with manual invoicing or charge only the rental fee as the product not the full item value so there’s nothing to “return”. You could also just use a dedicated rental/deposit app. I’d check Sidekick’s app builder, maybe it could do a lot of the heavy lifting for free. But a full complete order, then immediate return just wastes money, and it won’t look good on paper either. “what’s your return rate?” “ 98%”… I’m pretty sure Flow can send a notification with a return label url from some third party like Shipstation without formally initiating a return.

1 Like

You’re right that Flow doesn’t have a “create return” action natively. But if you’re already comfortable with custom scripts from your Netsuite setup, Shopify’s Admin API does have a returnCreate mutation that you could trigger via webhook when specific products are ordered. A small middleware or even a Shopify Flow + custom code step could handle that.

That said, I’d second what Maximus3 mentioned about rethinking the order structure. If these are essentially rentals, processing them as full orders with immediate returns means you’re eating transaction fees on both sides and your return rate looks terrible on paper. Charging just the rental fee upfront (or using draft orders) avoids all of that.

For the return label specifically, you could use Flow to send a notification with a pre-generated return label from your carrier without formally opening a return in Shopify. That keeps your metrics clean while still getting the label in the package.

What carrier are you using for the return labels? That might narrow down which approach works best.

Flow can’t do it natively, but the Admin API’s returnCreate mutation can. You can wire this up with a Flow trigger on “Order created” combined with a “Send HTTP request” action pointing at your own small endpoint (or a serverless function on something like Cloudflare Workers or AWS Lambda). That endpoint calls returnCreate back against Shopify.

Here’s the mutation you’d use:

mutation returnCreate($returnInput: ReturnInput!) {
  returnCreate(returnInput: $returnInput) {
    return {
      id
      status
    }
    userErrors {
      field
      message
    }
  }
}

With variables like:

{
  "returnInput": {
    "orderId": "gid://shopify/Order/1234567890",
    "returnLineItems": [
      {
        "fulfillmentLineItemId": "gid://shopify/FulfillmentLineItem/1234567890",
        "quantity": 1,
        "returnReason": "OTHER",
        "returnReasonNote": "Rental return label"
      }
    ],
    "requestedAt": "2024-01-01T00:00:00Z"
  }
}

The catch is that returnCreate requires a fulfillment to exist first. You can’t create a return on an unfulfilled order. So the timing would be: order created → order fulfilled → your middleware fires returnCreate → you get a return ID → you can then use returnApproveRequest if needed and generate the label via your carrier API.

For the Flow setup specifically: use the trigger “Order fulfilled”, add a condition to check if the order contains your rental product (check line item product type or tags), then use the “Send HTTP request” action to hit your endpoint that calls returnCreate.

That said, the other replies raise a fair point about transaction fees. If you’re processing these as full-price orders and then returning them, you’re losing the Shopify transaction fee on every order. If the “rental” is the full product value as a deposit, that might be acceptable. But if you can restructure these as a rental-fee-only charge, you’d save a lot on fees over time. That’s a business decision though, not a technical blocker.