The moment it happens
Hear about every refund
Each refund reaches you with the order, amount and reason as soon as it's issued.
- Runs
- The moment it happens
- Apps
- Shopify
- AI
- Not needed
- Access
- read_orders
Send this to your assistant
Create a ClickRuntime automation: when a refund is created in Shopify, post the order number, amount and reason to #store in Slack.
First time? Adding ClickRuntime to your assistant takes about two minutes.
Why use it
Why teams use this automation
A refund is the one Shopify event that costs money and is easy to overlook. A support agent issues a partial refund on a $180 order after a complaint, and the owner learns about it during month-end reconciliation. By then the pattern is hidden: the same product has now drawn nine refunds, one agent is issuing most of them, or a customer is quietly taking advantage of a generous policy. Without a live signal, refunds are a number in a report rather than a conversation.
When Shopify records a refund, it notifies ClickRuntime, which verifies the signature, reads the refund amount, the line items refunded and the note the staff member left, and posts them to Slack. The message shows who got money back, how much, and why, within moments of the refund.
Finance, operations and owners tend to find it most useful in stores with several people who can issue refunds.
What you get out of it
Refund patterns appear while fresh
Three refunds for the same item in a week suggests a defect or a misleading description. Seeing each one as it happens lets product owners respond long before a monthly review would reveal it.
Mistaken refunds can be reversed
If a refund was issued on the wrong order or for too much, someone seeing it right away can contact the customer or payment provider while a correction is still simple, cheap and not yet a week-old problem.
Staff actions get natural oversight
When refunds are visible to a manager, careless or unauthorized refunds become rarer without any heavy approval process or new tooling, and honest agents are not slowed down by extra steps or sign-offs.
Reasons are recorded with the amount
Refund notes are often the most useful data about why customers are unhappy. Posting them with each amount builds a running log of causes for support and product to review.
Reconciliation takes less work
The finance person already has a dated message for each refund to match against payouts, so tracing why a payout was lower than expected is a quick search, not an afternoon investigation.
How it works
What happens, step by step
The moment a refund is issued in your Shopify store, ClickRuntime is told about it and checks it really came from Shopify.
It reads which items were refunded and the note left with the refund.
A message with the order, amount, items and reason is posted to your Slack channel.
Before it runs live
- Connect Shopify
- Paste your automation's link into the other app's webhook settings
What you get
Build your own
Need it to work differently?
Your own rules
Conditions, thresholds, filters and exceptions, written the way you'd explain them to a colleague.
Any number of apps
One automation can read from one app and update several others. Over 248 apps are ready, and anything with an API works too.
AI where it helps
Summaries, classification, extraction and drafts use ClickRuntime's built-in AI, with no extra key.
On a schedule or on each event
Runs as often as every 5 minutes, or the moment an app sends an event, and keeps track of what it already handled.
Changes you can ask for
- Act only on the items that match your own rules, and skip the rest
- Add an AI step, for example to summarize, sort or draft a reply
- Add another app, for example also send it to Slack
- Combine it with other Shopify steps into one automation
Under the hood
The code that runs this automation
from clickruntime import on_event, credentials, notify, verify
@on_event
def handle(event):
if not verify.shopify(event.body, event.header("X-Shopify-Hmac-Sha256"), credentials.secret("SHOPIFY_WEBHOOK_SECRET")):
return {"ignored": "bad signature"}
refund = event.json
amount = sum(float(t["amount"]) for t in refund.get("transactions", []) if t.get("kind") == "refund")
items = ", ".join(f"{r['quantity']}× {r['line_item']['title']}" for r in refund.get("refund_line_items", []))
notify.slack(f"Refund on order {refund['order_id']}: {amount:,.2f}\nItems: {items or 'none'}\n"
f"Reason: {refund.get('note') or 'no note'}", channel="#store")
return {"order": refund["order_id"], "amount": amount}FAQ
Common questions
Does it cover partial refunds as well as full ones?
Where does the reason in the message come from?
Can alerts be limited to large refunds?
What permissions does it need?
Does it need AI?
How many runs does it use?
Can I change how it works?
Related
You might also like
Tag orders when your delivery service updates
When your delivery service reports a status, the matching order gets a tag like delivered.
See how it worksGet pinged about big orders
Every order over your threshold shows up in Slack the moment it's placed.
See how it worksGet a message for each new customer
Each new customer account shows up with their name, email and whether they accept marketing.
See how it worksKeep exploring
Set up “Hear about every refund” from your assistant
Copy the prompt above, or connect your assistant first. Free plan, no credit card.