Instantly Alert Your Team on Slack When a Stripe Payment Fails
Automatically sends a Slack message to your team channel the moment a Stripe payment fails, giving you real-time visibility into revenue loss. No more manually checking Stripe dashboards — your team gets alerted instantly so you can follow up fast.
- 1
Set up the Stripe Webhook Trigger
Add a
Webhooknode as your trigger. Set the HTTP Method toPOSTand copy the generated webhook URL. In your Stripe Dashboard go to Developers > Webhooks, click Add Endpoint, paste the URL, and select the eventpayment_intent.payment_failed. This node will receive the raw event data every time a payment fails. - 2
Extract the Key Payment Details
Add a
Setnode connected to the Webhook. Create three fields: setcustomerEmailto{{$json.body.data.object.last_payment_error.payment_method.billing_details.email}}, setamountFailedto{{$json.body.data.object.amount / 100}}, and setfailureReasonto{{$json.body.data.object.last_payment_error.message}}. This makes the data clean and easy to reference in the next step. - 3
Send the Slack Alert
Add a
Slacknode connected to the Set node. In the node credentials, connect your Slack OAuth app or use a Slack Incoming Webhook URL. Set the operation toPost Message, choose yourchannel(e.g.#payments-alerts), and set the message text to something like:Payment Failed! Customer: {{$json.customerEmail}} Amount: ${{$json.amountFailed}} Reason: {{$json.failureReason}}. Your team will see this alert immediately.
Frequently asked questions
What if the customer email is missing from the Stripe payload?
Not every Stripe event includes billing email in the same path. If the field is blank, you can also use `{{$json.body.data.object.last_payment_error.payment_method.id}}` to capture the payment method ID and look it up manually in Stripe. Alternatively, store customer email in Stripe's customer object and reference `{{$json.body.data.object.customer}}` to fetch it with an extra HTTP Request node.
Can I send the alert to multiple Slack channels or people?
Yes. Duplicate the Slack node and point each copy to a different channel or use a comma-separated list if your Slack app supports it. You could also send a direct message to a specific person by using their Slack member ID as the channel value.
Will this workflow catch every type of Stripe payment failure?
This recipe listens to the `payment_intent.payment_failed` event, which covers the majority of card declines and bank failures. If you also use Stripe Subscriptions, add the `invoice.payment_failed` event to the same webhook endpoint in Stripe and the workflow will handle both automatically.