Failed payment email templates that don't annoy customers

You open the billing dashboard at the end of the month and there's a column of failed charges going back weeks. A few are expired cards. A couple are cards that hit a limit on the wrong day. One is a customer who left. Most of them would pay in a minute if anyone asked, and nobody did, because asking was nobody's job.

Then you write the first email, and it comes out either too stiff ("Your account is past due") or so apologetic it doesn't ask for anything.

This post is the set of emails I'd send, the timing, and the weekly routine that keeps the list short.

The sequence

A failed payment is usually not a customer deciding to leave. The card expired, the bank flagged the charge, or the card got replaced. So the early emails should read like a note from a person who assumes good faith.

Email When Tone Job
1. Heads-up Same day as the failure Friendly, no blame Tell them, give the update link
2. Reminder Day 3 Light, short Bring it back to the top of the inbox
3. Direct ask Day 7 Plain, specific Name what stops working and when
4. Final note Day 14 Warm, clear Say what happens next, offer a reply
Stop After email 4 Personal The founder or account owner writes one line by hand

Two rules sit under the whole table. Stop the sequence the moment they pay or reply. And never send email 3 or 4 to someone who already replied, even if the payment hasn't gone through yet. A reply means a person is talking to you, so a person should answer.

The templates

Swap in the brackets. Keep them short; every extra sentence is a sentence they might skim past the link.

Email 1: the heads-up

Subject: Your [Product] payment didn't go through

Hi [first name], your payment of [amount] for [plan] on [date] didn't go through. This usually happens when a card expires or gets replaced. You can update it here: [link]. Nothing changes on your account for now. Thanks, [your name]

Email 2: the reminder

Subject: Quick reminder about your [Product] card

Hi [first name], just bringing this back up: the [amount] charge on [date] is still open. Updating your card takes about a minute: [link]. If something's wrong on our side, reply and I'll sort it out. [your name]

Email 3: the direct ask

Subject: Action needed: [Product] payment for [month]

Hi [first name], we still haven't been able to charge [amount] for [plan]. If it isn't updated by [date], [what pauses: e.g. new seats, scheduled jobs]. Your data stays as it is. Update here: [link], or reply if you'd like to talk about the plan. [your name]

Email 4: the final note

Subject: Before we pause your [Product] account

Hi [first name], this is the last reminder about the [amount] payment. On [date] we'll pause [what pauses]. You can turn everything back on any time by updating your card: [link]. If the plan isn't right for you anymore, reply and tell me. I'd like to hear it. [your name]

What these avoid on purpose: "past due," "delinquent," capital letters, countdown timers, and any threat the business won't carry out. If you won't pause the account on day 14, don't say you will.

Day 0Heads-up. Your payment didn't go through. Nothing changes for now. Update your card: [link]
Day 3Reminder. The charge is still open. Updating takes about a minute. [link]
Day 7Direct ask. Here's what pauses on [date] if it isn't updated. Update here: [link]
Day 14Final note. On [date] we'll pause [what pauses]. Turn it back on any time. [link]

The weekly routine

Monthly is too slow. By the time you look, the oldest failures are a month cold and the customer has forgotten what the charge was for. Once a week:

  1. Pull every charge that failed since last week, with customer, amount, plan and the decline reason.
  2. Remove anyone who already paid, cancelled on purpose, or is in a conversation with you.
  3. Add the rest to the sheet with today's date and "email 1 due."
  4. Check who's due for the next email and queue those.
  5. Read every draft before it goes. Look hardest at amounts and dates.
  6. Flag anyone who's had email 4 and still hasn't paid, for a personal note.
  7. Write the week's total at the top: failed, recovered, still open.

Step 7 is the one people skip, and it's the one that tells you whether the routine is worth keeping.

This is the kind of job we hand to bots on our own team: same steps every week, a sheet at the end, and a person saying yes before anything reaches a customer. The bot does every step except 5, which stays with a person.

An example: one pass, seven charges

This is an example, not a real customer list.

  1. In a thread, someone asks: "Find every failed charge from the last 30 days, put them in a sheet with the total, and draft email 1 for each."

  2. A sheet comes back with seven failed charges adding up to $3,670:

Customer Amount Reason given
A $1,200 Card expired
B $890 Insufficient funds
C $600 Card expired
D $450 Bank declined
E $290 Card replaced
F $150 Card expired
G $90 Bank declined

With it come six drafts of email 1, and one note: "Customer D replied to an invoice email last week asking about a refund. I haven't drafted for them."

  1. The founder changes two things. Customer A is the biggest account, so the founder writes that email personally. The draft for customer G says "your account will be paused," which is email 4 language on email 1, so that line comes out.

  2. Five sends get approved (B, C, E, F, G). A gets the founder's own note. D gets an answer to their refund question first.

#billing
You
You

Find every failed charge from the last 30 days, put them in a sheet with the total, and draft email 1 for each.

Payments bot

7 failed charges, $3,670 total. Attached failed-charges.xlsx. Six drafts of email 1 ready. Customer D asked about a refund last week, so I haven't drafted for them.

You
You

I'll write A myself. Take the "account will be paused" line out of G.

Payments bot
Approval needed

Send 5 emails: B, C, E, F, G

ApproveDeny
You
You

Approved.

An example thread, shortened.

How to set it up in Caret

  1. Create a bot (Claude Code or Codex, the model you pick, on your own Claude or ChatGPT plan) and give it an owner, usually whoever owns billing.
  2. Write its job: what counts as a failed payment, the four templates above, the timing, and the stop rules.
  3. Connect your payment tool, your email and Slack through connected apps. Scope it to read billing and draft email, nothing else.
  4. Add a weekly schedule, for example "Mondays 09:00," to run the routine.
  5. Have it build the sheet as an Excel file and attach it in the thread, total at the top.
  6. Leave sending to approvals. Before the bot sends anything, it asks, and an admin approves or denies with one click. The audit trail shows who got what.

Example asks:

"Run this week's failed payment check and draft whoever is due."

"Who has had email 4 and still hasn't paid? Draft me a one-line personal note for each."

"Show me the total recovered since we started."

Its memory lasts between conversations, so it knows who got email 2 last week and who replied.

FAQ

What should a failed payment email say? That the payment didn't go through, the amount and date, one link to update the card, and that nothing changes yet. Keep it under 80 words and assume the card expired.

How many dunning emails should I send? Four over about two weeks works for most small SaaS teams: day 0, 3, 7 and 14. After that, a person should write, or you'll train customers to ignore you.

Can I automate failed payment emails without them sounding automated? Yes, if a person reads each draft before it goes, the templates are short, and the sequence stops the moment someone replies.

For the bot side of this, see our page on failed payment recovery automation. Put a bot on it: start your 7-day trial or download the Mac app.

See it in CaretFailed Payment Recovery Automation With a BotCaret (caretbot.com) runs failed payment recovery automation. A bot finds failed payments, drafts the chase emails and asks you before each one is sent.

More from the blog

Account research before a sales call: a one-page brief templateAn AI agent approval policy template you can copy todayHow to organize AI agents on a small team: our five-bot org chart