How to send a payment link to a customer with an expired card in Stripe

An expired card is the most preventable cause of customer loss in a subscription business. The customer didn’t want to cancel. Their card simply stopped working and nobody warned them in time.

The solution is simple: detect cards about to expire and send the customer a link to update their payment method before the charge fails.

Why Stripe doesn’t solve this on its own

Stripe stores card expiration dates but doesn’t proactively warn you. The customer.source.expiring webhook exists, but most businesses don’t have it configured and don’t know it exists.

What usually happens: the card expires, the next charge fails, Stripe retries a couple of times, fails, and the subscription is canceled. The customer leaves without knowing why.

How to detect cards about to expire

There are two ways to detect expiring cards:

Via webhook. Stripe sends the customer.source.expiring event a few weeks before expiration. If you listen for it, you can act automatically.

Via API. You query active subscriptions and check the expiration date of the card associated with each one. Those expiring in the next 30-60 days are the ones that need attention.

The second option is more reliable because it doesn’t depend on Stripe deciding to send the webhook.

What to send the customer

The customer needs two things: to know there’s a problem and an easy path to fix it.

The ideal email is direct and short:

  • Tell them their card expires on X date.
  • Give them a link to update their payment method.
  • Ask them to do it before the next renewal.

The most effective link is the Stripe Customer Portal. The customer clicks, sees their payment details, updates the card, done. All in one session, no registering anywhere.

When to send the notice

The optimal timing is 30-45 days before expiration. Enough time for the customer to act without urgency, but not so far away they forget.

If the customer doesn’t act in the first 30 days, a second reminder 7-10 days before usually resolves the remaining cases.

Customers who reach the expiration date without updating will get the failed payment and enter the payment recovery flow — which is costlier and less effective than the preventive notice.

Customizing the email

Not all businesses communicate the same way. A B2B SaaS doesn’t send the same email as a trading community. Tone, language, and signature should be customizable.

Ideally you have an editable template with variables that fill in automatically: card brand, last 4 digits, expiration date, update link. You write the text once and the system sends it with each customer’s data.

Automate vs send manually

You can send these emails manually — review the expiring cards list every week and contact each one. Works with few customers.

But if you have more than 50 subscribers, automation pays for itself. The system detects the cards, sends the email with the link, and you just see the result in the dashboard: how many updated, how many didn’t, how many need a second notice.

The result

Customers who receive a card warning in time usually update without issue. They didn’t want to stop paying — they just didn’t know there was a deadline. One email at the right time recovers revenue that would otherwise be lost to an administrative oversight.


Stripe Control detects cards about to expire up to 60 days in advance and lets you contact customers directly from the dashboard with a customizable email and update link.


Keep reading