# Rescue failed Stripe payments with a Keap recovery play

> When a Stripe payment fails, tag the customer in Keap, log the reason, open a 48 hour follow up task, and send a friendly card update email.

- Workflow type: agent
- Services: Stripe, Keap, Slack Bot
- Categories: Finance, Customer Support
- Published: 2026-08-04

## What it does

- Notices the moment a payment fails in Stripe and pulls up that customer's billing name and email automatically.
- Finds the person in Keap, tags them as a failed payment, records what went wrong and how much was owed, and opens a follow up task for the account owner with a 48 hour deadline.
- Writes a short, friendly email explaining that the payment did not go through and how to update the card, then sends it from your normal Keap sending identity so a copy stays on the contact's record.
- Knows when to get a human involved: if the amount is over the limit you set, or nobody in Keap matches that email, it skips the automatic email and posts to Slack instead.

## What you'll need

- A Stripe account where you can turn on notifications for failed payments
- A Keap account with permission to manage contacts, tags, notes, tasks, and email
- A Slack workspace with a channel your billing or revenue team watches
- A "Payment Failed" tag set up in Keap, and the teammate who should own follow up
- A dollar amount that counts as too big to handle automatically

## Prompt

When a payment fails in Stripe, run our full failed payment recovery play across Stripe, Keap, and Slack. Trigger this from a Stripe webhook on failed payment events, covering both a failed charge and a failed invoice payment, since recurring invoice failures are where most involuntary churn comes from.

Read the Stripe customer id, the failure reason, and the failed amount from the event payload. Call Stripe's Retrieve Customer operation with that customer id to get the billing name and email address.

Watch the units. Stripe reports amounts in minor units such as cents, while Keap stores money as decimal whole units. Convert the Stripe amount into whole currency units before you compare it against the escalation threshold or write it onto a Keap record. A Stripe amount of 24900 is 249.00.

Find the matching person in Keap using List Contacts filtered on the billing email address returned by Stripe. If more than one contact comes back, use the first exact match on that email address.

When a matching contact exists, update their record in Keap. Use Apply Tag to tag them as "Payment Failed". Use Create a Note to record the failure reason, the converted amount, the date, and the Stripe charge or invoice reference. Use Create a Task to assign the account owner a follow up with this customer, due within 48 hours of the failure, with the customer name in the title.

Then, unless one of the escalation rules below applies, draft the recovery email and send it with Keap's Send an Email operation. Sending through Keap matters here: the message lands from our normal sending identity and stays attached to the contact's record where the rest of the team can see it.

Keep the email short and non-accusatory. Assume the best, because cards expire and banks decline for routine reasons. Say plainly that the latest payment did not go through, give a clear instruction for updating the card on file, and offer help if something else is going on. Do not blame the customer, do not threaten to suspend the account in this first message, and do not paste the raw failure code if it would confuse a non-technical reader.

Escalate to a human instead of sending automatically in two cases. First, if the converted failed amount is above my threshold, which should default to 500 in account currency and be easy for me to change. Second, if no Keap contact matches the billing email at all. In either case, skip the automatic email entirely and post to Slack with Send a Message so a person handles that one personally.

The Slack post should go to our billing channel and include the customer's billing name and email, the failed amount in whole currency units, the failure reason, whether a matching Keap contact was found, and which escalation rule fired. When the contact does exist but the amount was over the threshold, still apply the tag, the note, and the follow up task in Keap, and only skip the email. When no contact exists in Keap, the Slack post is the only action.

Avoid duplicate outreach. Stripe often retries the same failing payment several times. Before sending, check whether we have already emailed this contact about the same charge or invoice. If we have, add a note to the record capturing the repeat failure instead of sending another email.

## How to customize

- Change the amount that triggers a human handoff. Anything at or under it gets the automatic email, anything over it goes to Slack for personal handling.
- Rewrite the tone and content of the recovery email, and change how long the account owner has to follow up (48 hours by default).
- Pick which Slack channel receives escalations, which teammate is assigned the Keap task, and which tag gets applied to the contact.

## FAQ

### Will the recovery email look like it came from us?

Yes. It goes out through Keap using your normal sending identity, and a copy stays on the contact's record so anyone on your team can see exactly what the customer received.

### What happens if the customer is not in Keap?

The workflow does not guess and does not send anything. It posts the details to Slack so a person can decide how to handle it, which avoids emailing someone you have no relationship with yet.

### Does this work for one off charges as well as subscription invoices?

Yes. It runs both when a card is declined on a single charge and when a recurring invoice fails. Recurring invoice failures are where most involuntary churn comes from.

### Will customers get spammed if the payment is retried several times?

No. Before sending, the workflow checks whether you have already reached out about that same failed payment. If you have, it records the repeat failure as a note instead of sending a duplicate email.

### Is the email pushy or accusatory?

No. It assumes the best, because cards expire and banks decline for routine reasons. It explains what happened, gives a simple way to update the card, and offers help. No blame and no threats about suspending the account.

Use this prompt in General Input: https://www.generalinput.com/prompts/rescue-failed-stripe-payments-with-a-keap-recovery-play