# Dunning email sequence

A template for a solo SaaS when a subscription card payment fails.

These four notes are not a transcript of Stripe or Lemon Squeezy. Stripe's docs say you can turn on a failed-payment email, and they do not print the subject or the body. Lemon Squeezy's recovery page says the customer is emailed, and it does not print the body either.

Send days in this file:

- Email 1 on the day the charge fails.
- Email 2 four days later, if the subscription is still past due.
- Email 3 twelve days later, if it is still past due. Day 12 is still inside a two-week window. If your Stripe retry window is not two weeks, move this email.
- Email 4 on the day you pause access. It is not on a fixed day. Do not send it if access is still on.

Day 4 and day 12 are this template. They are not a published Stripe retry day and not a published Lemon Squeezy retry day.

Stop when the invoice is paid. Do not send the later emails.

Replace PRODUCT_NAME, AMOUNT, CARD_LAST4, UPDATE_URL, and FAILED_ON.

UPDATE_URL has to work when the customer clicks it. A Lemon Squeezy `update_payment_method` URL from the API expires after 24 hours. Point UPDATE_URL at a page in your app that requests a fresh URL, or at Stripe's hosted page for that subscription.

The vendor rules this timing sits inside were checked on October 30, 2026. The write-up is https://shipmunks.dev/blog/dunning-email/

## Email 1. Day 0, payment failed

Subject: Your PRODUCT_NAME payment did not go through

The card payment for your PRODUCT_NAME subscription did not go through.

Amount: AMOUNT
Card ending in: CARD_LAST4
Failed on: FAILED_ON

Update the card: UPDATE_URL

We will try the charge again. If you already updated the card, you can ignore this note.

## Email 2. Day 4, still retrying

Send only if the subscription is still past due.

Subject: Your PRODUCT_NAME card is still failing

We still have not charged the card for your PRODUCT_NAME subscription.

Amount: AMOUNT
Card ending in: CARD_LAST4

Update the card: UPDATE_URL

Retries are still running. Your access is unchanged.

## Email 3. Day 12, final notice

Send only if the subscription is still past due. If your retry window is shorter than two weeks, send this before that window ends, not on day 12.

Subject: PRODUCT_NAME access ends if the card is not updated

We still have not charged the card for your PRODUCT_NAME subscription.

Amount: AMOUNT

Update the card before access is paused: UPDATE_URL

If the card is updated in time, the next retry can use it. If it is not, access is paused when the retries end.

## Email 4. Access paused

Send this on the day access actually turns off. If you do not pause access, do not send it.

Subject: PRODUCT_NAME access is paused

Access to PRODUCT_NAME is paused because the card payment did not go through.

Amount still open: AMOUNT

Update the card to restore access: UPDATE_URL
