Skip to content

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.

Paste it into your assistant. It tells you what it will send or change before it runs live.

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

  1. The moment a customer opens a dispute in Stripe, ClickRuntime saves it with its evidence due date.

  2. It posts an alert to your Slack channel with the amount, the reason and the due date.

  3. 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

RunsThe moment it happens
Never miss a dispute deadlinejust nowSucceeded
Slack · #billing:rotating_light: Dispute opened: 420.00 USD · fraudulent · evidence due Oct 30

Build your own

Need it to work differently?

This template is a starting point. Copy the prompt and change it, or describe a different automation from scratch, with your own conditions, more apps or an AI step. Your assistant writes it, tests it and runs it on ClickRuntime.
  • 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

This is the Python script that runs each time the automation starts. Your AI assistant writes it for you when you send the prompt, and you allow each step in your assistant. To change how the automation works, describe the change to your assistant and it updates the script for you. For every function it can use, see the script reference.
dispute_alert_with_deadline.pyexample
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?
Stripe sends the charge.dispute.created event as soon as the dispute is opened, and the Slack message follows within seconds. The daily deadline check is a separate pass that runs once a day on open disputes.
How close to the deadline does the reminder fire?
The threshold is a number of days you choose, with 3 days being a common pick. Each open dispute whose due_by date falls within that window is included in the daily reminder until it is resolved.
Does it submit evidence for me?
No. It only alerts and reminds. Submitting evidence is a deliberate step you take in Stripe, because the content and attachments affect whether you win. The message links to the dispute so you can get to it quickly.
What permissions does it need?
read (Disputes). Nothing else in your accounts is used.
Does it need AI?
No. It runs without AI, so it doesn't use your plan's AI allowance.
How many runs does it use?
One run for each event the app sends.
Can I change how it works?
Yes. Describe the change to your AI assistant, for example a different schedule, channel or filter. It updates the automation, tests it and tells you what changed.

Set up “Never miss a dispute deadline” from your assistant

Copy the prompt above, or connect your assistant first. Free plan, no credit card.