The moment it happens
Get an email when a subscription payment fails
Each failed charge, and each one that runs out of retries, reaches you with the customer and amount so you can follow up.
- Runs
- The moment it happens
- Apps
- Recharge
- AI
- Not needed
- Access
- Webhooks read+write, Charges read
Send this to your assistant
Create a ClickRuntime automation: when a Recharge charge fails or reaches its final retry, email me the customer's name and email, the amount and which retry it was.
First time? Adding ClickRuntime to your assistant takes about two minutes.
Why use it
Why teams use this automation
Recurring revenue depends on cards that work every month, and cards fail constantly: expired dates, insufficient funds, a bank flagging the charge as suspicious. In Recharge a failed charge enters a retry cycle, and if nobody contacts the customer, the subscription may lapse by itself after a few attempts. The customer never decided to leave, and you lose them anyway.
The moment Recharge reports that a charge has failed, ClickRuntime sends you an alert with the customer, the amount, the error reason and the retry status. You get it right when it happens, so you can reach out by email or text before the next automatic attempt and help the customer fix whatever went wrong.
Stores with higher-priced subscriptions, where each failed renewal is a meaningful amount, benefit most from reacting quickly.
What you get out of it
Accidental churn is reduced
A large share of subscription loss comes from payment failures, not from dissatisfaction. A friendly note asking a customer to update their card recovers revenue from people who still want the product.
You can reach out before retries run out
Recharge retries on a schedule and then stops. Contacting the customer inside that window gives them time to fix the problem without any interruption to shipments. That window is usually only a few days, so every hour counts.
Error reasons guide the message
An expired card calls for a simple update link, while a bank decline may suggest the customer contact their issuer. Knowing which one you face lets you write something that actually helps. Customers respond better when the note is specific to their situation.
Revenue forecasts become more realistic
Seeing failures as they occur shows how much of the expected month is at risk. Finance can adjust forecasts, instead of finding out at month end that renewals came in lower.
High-value accounts are not missed
A failed renewal on your biggest plan is worth a personal call. In a stream of daily charges it is hard to notice by chance, but an alert puts it in front of you.
How it works
What happens, step by step
When a subscription charge fails in Recharge, or runs out of retries, Recharge tells ClickRuntime straight away.
ClickRuntime picks out the customer's name and email, the amount, the attempt number and the error.
You get an email with those details, marked as the final retry when Recharge has given up, so you can follow up.
Before it runs live
- Connect Recharge
- 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 Recharge steps into one automation
Under the hood
The code that runs this automation
from clickruntime import on_event, notify
@on_event
def handle(event):
topic = event.header("X-Recharge-Topic")
if topic not in ("charge/failed", "charge/max_retries_reached"):
return {"skipped": topic}
c = event.json["charge"]
name = f"{c['billing_address'].get('first_name', '')} {c['billing_address'].get('last_name', '')}".strip()
final = " (final retry)" if topic == "charge/max_retries_reached" else ""
notify.email_me(f"Recharge charge failed{final}: {name}",
f"Customer: {name} <{c['customer']['email']}>\nAmount: {c['total_price']} {c.get('currency', '')}\n"
f"Attempt: {c.get('charge_attempts', '?')}{final}\nError: {c.get('error', '')}")
return {"charge": c["id"]}FAQ
Common questions
What causes a charge to fail in Recharge?
Will I get an alert for every retry or only the first failure?
Can the customer be notified automatically as well?
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
Post each cancellation and its reason to Slack
Your team sees who cancelled, which product they had and the reason they gave, as it happens.
See how it worksGet a weekly count of subscription changes
Every Monday you get last week's new, cancelled, paused and skipped subscriptions in one email.
See how it worksFind out the main reasons customers cancel
Once a month you get the cancellation reasons grouped into a few themes, with how often each came up.
See how it worksKeep exploring
Set up “Get an email when a subscription payment fails” from your assistant
Copy the prompt above, or connect your assistant first. Free plan, no credit card.
