Recover failed card payments on memberships and plans (Stripe)

Catch every declined renewal and get the card updated before a good customer quietly churns.

Works in n8nWorks in MakeWorks in Zapier
40 minsetup time
mediumdifficulty
$0-20 + emailest. monthly cost

The problem

You bill monthly for a maintenance plan, membership, or retainer. A card expires or gets replaced, the renewal fails, and nobody notices until you dig through the Stripe dashboard weeks later. By then the customer has had free service, or thinks you dropped them. Most of these aren't people trying to cancel. They just never got a clear "please update your card" message.

What it does

Every time Stripe reports a failed invoice payment, the customer gets a short, friendly email from your own domain with a one-click link to pay or update their card. The tone steps up as Stripe's retries continue: first failure, retry failed, then a final notice when Stripe stops retrying. On that final failure you also get a text with the customer's name, amount, and phone number so you can call them. Once they pay, Stripe stops sending failures and the emails stop with it.

● Imports in n8n 2.43.6, not yet run end-to-endDownload n8n JSON
  1. Import stripe-failed-payment-recovery.n8n.json.
  2. Open the Stripe: invoice payment failed trigger and add a Stripe API credential (a restricted key with webhook write access works). When you activate the workflow, n8n registers the webhook in Stripe for you and checks Stripe's signature on every event. It listens only for invoice.payment_failed.
  3. Skip repeat deliveries drops any event ID it has already processed, so a Stripe redelivery won't email the customer twice.
  4. Attach a Resend (or SMTP) credential on the three email nodes and a Twilio credential on Owner SMS: final failure. Set BUSINESS_NAME, FROM_EMAIL, REPLY_TO_EMAIL (optional), OWNER_PHONE, TWILIO_ACCOUNT_SID, and TWILIO_FROM_NUMBER env vars.
  5. In Stripe go to Settings → Billing → Subscriptions and emails. Keep Smart Retries and the card updater on. Turn off "Send emails when card payments fail" so customers don't get two emails per failure. The email links to Stripe's hosted invoice page, where the customer can pay with a new card.
  6. Test with a Stripe test-mode customer using the decline test card, or stripe trigger invoice.payment_failed, then activate on live.

How it decides: attempt 1 with a retry scheduled gets the "didn't go through" email, later attempts get "still declined," and when Stripe has no next retry (next_payment_attempt is empty) it sends the final notice and texts you.

Credentials: each HTTP node uses a generic credential (Twilio = HTTP Basic Auth with Account SID/Auth Token; Resend = Header Auth Authorization: Bearer <key>). Values like $env.BUSINESS_NAME read environment variables. On n8n Cloud, replace them with literal text or n8n Variables ($vars).

Make / Zapier notes

Start with what Stripe gives you for free: Smart Retries, the card updater, and (if you don't want custom emails) Stripe's own failed-payment emails. Use this recipe when you want the emails to come from your domain in your voice, a clear escalation as retries pile up, and a text to you when Stripe gives up, so a $150/month plan customer gets a phone call instead of silently lapsing.

Make and Zapier both have native Stripe triggers that register the webhook for you, so they're the easiest route if you don't run n8n. Invoices you send manually and chase on a schedule are a different job: see Overdue invoice reminders.

Compliance notes

These are transactional emails about a payment the customer already agreed to, so they aren't marketing under CAN-SPAM. Keep them that way: no promos or upsells in the copy, a real From/Reply-To on your domain, your business name, and a working way to reply. Don't put card numbers or full billing details in the email; the Stripe-hosted link handles that securely. Don't threaten collections in automated copy. The owner SMS goes only to your own phone. If you also text customers about failed payments, treat it as transactional SMS under TCPA / A2P 10DLC (consent for that number, business name, STOP/HELP, 8am–9pm local).

Expected result

Customers whose cards simply expired fix it within a day or two instead of drifting off. You only hear about the ones Stripe couldn't recover, with a phone number ready, and you never have to check the failed-payments report by hand.

Workflow file: stripe-failed-payment-recovery.n8n.json

One automation recipe a week

Every Tuesday: a setup you can finish in 30 minutes, plus tool updates that might break your flows. Free.