Screen Loop Returns for abuse before refunds go out

Twice a day we review your latest returns, hold only the ones that look like abuse, and post each case to Slack for a person to confirm.

Agentic Task
Loop ReturnsSlack BotOperationsCustomer SupportNotifications & AlertsResearch & Monitoring
PromptCreate

Twice a day, at 9am and 5pm, screen my recent Loop Returns activity for signs of return abuse and place a hold on only the returns that genuinely deserve a human look. Run this on a schedule rather than a live trigger, since Loop Returns does not push events to us.

Start with the Loop Returns Detailed Returns List operation to pull every return created since the last run. That operation defaults to the previous 24 hours when no date range is given, so pass an explicit from and to that covers the window since the previous run plus roughly an hour of overlap, so nothing slips between runs. Use pagination by passing paginate=true, and keep following nextPageUrl until it comes back null. Loop allows 300 requests per minute per key, so pace the calls and back off briefly on a 429 instead of failing the run.

Read the batch as a whole rather than judging each return in isolation, because the abuse patterns only show up across returns. Build a shortlist of anything worth a closer look: the same shopper filing several returns in a short window, returns with an unusually high total value, the same product or variant coming back repeatedly across different orders, a shopper whose orders are almost all returned, and requests that ask for a refund every single time where exchanges would be normal for that category. Anything that does not raise one of these signals should be left completely alone.

For each return on the shortlist, call Get Return Details to pull the full record, selecting it by return_id. Then use List Customers to cross reference the shopper's history so you can tell the difference between a long standing customer with a lot of clean orders and a new account that has done nothing but return. Money values in Loop come back in minor units such as cents along with a currency code, so convert them before you compare thresholds or write any figure into a message.

Be deliberately conservative about what you act on. Flagging a return blocks automated processing and forces a person to intervene, so a false positive costs a real customer real time and costs my team work. Require at least two independent signals before you act, and never flag on a single return alone. Actively look for the innocent explanation first: sizing problems in apparel, a gift being returned by the recipient, a damaged or incorrect shipment, seasonal spikes, or a shopper who simply buys a lot from us. If the picture is genuinely ambiguous after you have looked at the customer history, let the return through. I would much rather miss a borderline case than hold a good customer's refund.

For each return that clears that bar, do three things in order. First call Flag Return so Loop holds it and prevents automated processing until a human reviews it in the merchant admin. Second call Create Fraud Report on that same return, attaching the written reasoning so the evidence lives on the record itself and whoever opens it in Loop sees why it was held. Third post the case to Slack with Send a Message so a person can confirm or clear it.

Post one Slack message per flagged return rather than a single combined digest, so each case can be confirmed or cleared independently. Each message should carry the return ID, the order name, the shopper, the total value and item count, the specific pattern that triggered the hold, and a clear next step telling the reviewer to open that return in Loop and either release it or keep the hold. Slack uses mrkdwn, so use single asterisks for bold.

Write every explanation in plain language, as if you are talking to a support teammate who has not seen any of the underlying data. No risk scores, no jargon, no unexplained thresholds. Say exactly what happened with real numbers and dates, for example that this shopper has filed five returns in eleven days totalling 1,200 dollars and that two of the same items have now come back twice. Always include the counter argument in the same message: name the most likely innocent explanation and say what would clear the case, so the reviewer can make a fast decision instead of redoing your analysis.

Stay strictly inside these boundaries. Only ever call Flag Return, Create Fraud Report, and the Slack message. Never create a blocklist entry, never process, cancel, or close a return, and never contact the shopper. Skip any return that is already flagged or already carries a fraud report so repeated runs do not double up, and if Loop responds that a return is not in a processable state, treat it as already handled and move on. When nothing meets the bar, post one short Slack line saying how many returns were screened and that none were held, so the team knows the check ran.

Example output

Return held for review: RET-48213 (order #10442) Shopper: jamie.k@example.com Value: $412.00 across 3 items Why we held it: Jamie has filed 5 returns in the last 11 days, all for the same two jacket styles in different sizes, and every one was a refund rather than an exchange. Two of those jackets have now been sent back twice. That is unusual for a shopper who had filed no returns at all before this month. Worth knowing before you decide: every return reason says the item did not fit, which is a completely normal reason on its own. If Jamie has been buying multiple sizes to try at home, this is probably an honest customer and should be released. Next step: open RET-48213 in Loop and either release it or keep the hold.

What does this prompt do?

  • Checks your latest Loop returns twice a day and looks across the whole batch, not just one return at a time.
  • Spots the patterns that usually mean trouble: one shopper filing return after return, repeat high value returns, or the same items going back again and again.
  • Puts a hold on a suspicious return so it is not processed automatically, and attaches a written explanation to that return in Loop.
  • Posts each case to Slack in plain language so your team can confirm it or clear it in seconds.

What do I need to use this?

  • A Loop Returns account and a Loop API key that can read and manage returns and view customers
  • A Slack workspace and a channel where your team reviews flagged cases
  • Someone on the team who can open Loop and release a held return once they have checked it

How can I customize it?

  • Change when it runs. Twice a day suits most brands, but high volume stores often move to every few hours.
  • Tune how cautious it is by raising or lowering the number of returns, the order value, or the repeat item count that puts a shopper on the shortlist.
  • Point it at a different Slack channel, or have it tag a specific reviewer when the value of the return is high.

FAQs

Will this refuse returns or refund money on its own?
No. It only places a hold and writes up why. Nothing is refused, refunded, or cancelled without a person deciding.
What happens to a return once it is flagged?
Loop stops processing it automatically and waits for someone to open it in your Loop admin and review it. If it looks fine, you release it and the return carries on as normal.
What if it flags a perfectly good customer?
It is deliberately cautious and needs more than one warning sign before it acts, so the large majority of returns pass straight through untouched. If it does hold a genuine return, your team clears it in Loop and the shopper continues as normal. You can make it stricter or more relaxed at any time.
Does it block shoppers or add them to a banned list?
No. It never bans anyone and never adds anyone to a blocklist. Blocking a shopper stays a human decision.
Do we need a special Loop or Shopify plan for this?
No. Any Loop Returns account works, as long as the API key you connect is allowed to read and manage returns.

Related templates

Build a credential rotation checklist when someone leaves

When someone leaves, we check which shared passwords they used in their final months and post a ranked rotation list to your security channel.

1Password
Rippling
Slack Bot
+1
Agentic Task
Weekly Amazon S3 bucket security audit posted to Slack

Every Monday, check every S3 bucket for public exposure, missing encryption and weak backup settings, then get the risks ranked in Slack.

Amazon S3
Slack Bot
Google Sheets
Agentic Task
Log Agorapulse social conversations to HubSpot contacts

Twice every weekday, the conversations from your social inbox land on the right HubSpot contact timelines, with a Slack recap for sales.

Agorapulse
HubSpot
Slack Bot
Agentic Task
Clean up HubSpot contacts from your Amazon SES suppression list

Every morning, find the addresses that hard bounced or filed a spam complaint, update the matching HubSpot contacts, and post a short Slack recap.

Amazon SES
HubSpot
Slack Bot
Agentic Task
Draft polite follow-ups for emails that never got a reply

Every weekday at 4pm, spot the threads that went quiet, stage a ready-to-send nudge in your mailbox, and get a ranked Slack recap.

Aurinko
Google Sheets
Slack Bot
Agentic Task
Replay failed SQS messages when a bug fix is merged

When you merge a fix in GitHub, this agent checks the matching dead-letter queue, replays the failed messages, and reports back on the pull request and in Slack.

Amazon SQS
GitHub
Slack Bot
Agentic Task

Stop processing return abuse on autopilot.

Set up a twice daily check that holds only the returns worth a second look, and tells your team exactly why in plain language.