The moment it happens
Never miss a dispute deadline
You hear about each new dispute with its evidence due date, and get a reminder 3 days before it's due.
- Runs
- The moment it happens
- Apps
- Stripe
- AI
- Not needed
- Access
- read (Disputes)
Send this to your assistant
Create a ClickRuntime automation: when a Stripe dispute opens, Slack me the amount, reason and evidence deadline, and remind me 3 days before the deadline if it's still open.
First time? Adding ClickRuntime to your assistant takes about two minutes.
Why use it
Why teams use this automation
A chargeback arrives in Stripe on a Friday evening. The notification email goes to whoever owns the account, who is offline until Monday, and the evidence_details.due_by date is nine days away. By the time someone gathers receipts, delivery proofs and customer messages, only a day remains. Disputes that miss the deadline are lost automatically, along with the amount and a fee.
When Stripe sends a dispute event, ClickRuntime saves the dispute with its due date, posts it to Slack and then checks every day for open disputes approaching the deadline, posting a reminder when time is short. The person who handles evidence sees the case immediately and again before it expires.
It is aimed at online merchants and SaaS companies where each lost dispute is a direct hit on margin.
What you get out of it
Winnable disputes are not lost on timing
Many chargebacks are lost simply because evidence was never submitted. Seeing the case right away and again before the due date gives you time to assemble a proper response. A single message can be the difference between winning back the amount and losing it.
The deadline is in front of the right people
Stripe's emails go to one inbox. A Slack message lets support, finance and the founder all see the date, so a vacation or a sick day does not leave the case unattended.
Dispute fees are avoided where possible
Every lost dispute costs the amount plus a fee, and a high dispute rate can put your account at risk. Responding on time keeps both the loss and the rate lower.
Evidence gathering starts early
With nine days notice instead of one, you can pull order records, shipping confirmations and support threads without rushing. Better evidence raises the odds the bank rules in your favor.
You build a log of every dispute
Stored dispute details create a record of amounts, reasons and outcomes. Over time, it shows which products or payment methods attract chargebacks so you can fix the cause. That history is useful when you talk to your payment provider about dispute rates.
How it works
What happens, step by step
The moment a customer opens a dispute in Stripe, ClickRuntime saves it with its evidence due date.
It posts an alert to your Slack channel with the amount, the reason and the due date.
Every day it checks your open disputes and reminds you in Slack three days before evidence is due.
Before it runs live
- Connect Stripe
- 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 Stripe steps into one automation
Under the hood
The code that runs this automation
import time
from datetime import datetime, timezone
import stripe
from clickruntime import on_event, on_trigger, credentials, notify, verify, state
@on_event
def handle(event):
if not verify.stripe(event.body, event.header("Stripe-Signature"), credentials.secret("STRIPE_WEBHOOK_SECRET")):
return {"ignored": "bad signature"}
d = event.json["data"]["object"]
if event.json["type"] != "charge.dispute.created":
return {"ignored": event.json["type"]}
due = d["evidence_details"]["due_by"]
notify.slack(f":rotating_light: Dispute opened: {d['amount'] / 100:,.2f} {d['currency'].upper()} · {d['reason']} · "
f"evidence due {datetime.fromtimestamp(due, timezone.utc):%b %d}", channel="#billing")
return {"dispute": d["id"]}
@on_trigger
def daily_check(event):
stripe.api_key = credentials.secret("STRIPE_API_KEY")
reminded = set(state.get("reminded") or [])
soon = [d for d in stripe.Dispute.list(limit=100).auto_paging_iter()
if d.status in ("needs_response", "warning_needs_response") and d.id not in reminded
and d.evidence_details.due_by - time.time() < 3 * 86400]
for d in soon:
notify.slack(f"Reminder: dispute {d.id} ({d.amount / 100:,.2f} {d.currency.upper()}) evidence due "
f"{datetime.fromtimestamp(d.evidence_details.due_by, timezone.utc):%b %d}", channel="#billing")
state.set("reminded", sorted(reminded | {d.id for d in soon}))
return {"reminders": len(soon)}FAQ
Common questions
How soon after a dispute is opened does the alert arrive?
How close to the deadline does the reminder fire?
Does it submit evidence for me?
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
Get alerted when a payment fails
Each failed charge or invoice payment shows up in Slack with the customer, amount and reason.
See how it worksHear when a customer cancels
When a subscription is cancelled, you get the customer and plan straight away.
See how it worksGet a message for every new sale
Each successful payment reaches you with the customer, amount and what they bought.
See how it worksKeep exploring
Set up “Never miss a dispute deadline” from your assistant
Copy the prompt above, or connect your assistant first. Free plan, no credit card.