Stunning has recovered over $85 million in recurring revenue for Stripe customers.

I’ve been dealing with failed payments in SaaS apps since 2006, and on Stripe (the best payment processor I’ve ever used for online payments) since 2012.

We launched Stunning in late 2012 to help our customers (and ourselves) cut down on involuntary churn (when customer subscriptions are cancelled due to bad payment information). One of Stunning’s main features is making the process of dealing with failed credit card payments a bit less painful. Stunning automates the messages that go out before credit cards expire, or after a customer has a payment issue, and we even let your customers know in-app when they have billing issues.

This process is called dunning, and it helps recover revenue that would otherwise be lost to credit card failures.

Good news: It’s easier to keep existing customers than to attract new customers, so the dunning process is very important. Not dealing with failed payments can have a large negative impact on your business.

We’ve recently hit a big milestone: $8 billion in recurring revenue that we’ve recovered for our customers. To celebrate, we’re sharing 14 things that we’ve learned over the past decade. You can apply these to your own product or SaaS app today to cut down on customer churn that happens due to failed payments.

The most important thing that I’ve learned is that everything depends on the composition of your customer base. You need to try different things, and look at your own data to figure out what works best for your specific customer base. For instance, if your customers run SaaS apps and live online, email and in-app notifications are probably going to be the most effective way to get in touch with them. However, if you’re selling to people whose business lives mostly offline (restaurants, store owners, hair salons, etc), you’ll probably want to contact them with text messages. With that said, the first step is:

1. Make sure that your product is actually valuable.

This is just about the best non-automated way to ensure that your customers keep using your product. If your subscription business consistently produces value for your customers, they’ll get a notification about a failed payment and immediately update their payment details to make sure that they keep receiving that value. If you’ve built an app that isn’t valuable, you’ll always have problems retaining your customers , no matter what else you do.

2. Don’t hide from your customers.

I’ve seen multiple companies out there who don’t want to send their customers receipts, preferring to silently charge them until either the customer realizes it and cancels, or their card expires. Be up-front about the charges that you’re making to your customer’s card. 

Otherwise, you’ll just end up with a high rate of chargebacks from customers who forget that they’ve signed up for your app and get very angry about the list of charges when they eventually see it.

Or, at the very least, you’ll have customers who don’t trust you (and customers who don’t trust you don’t stick around for the long term). Instead, let them know each time you charge them (and remind them before you charge them, if they are on annual subscriptions). Your customers will appreciate and trust you more if you do that.

3. Communicate with your customers on a regular basis about things other than successful and failed charges.

If a customer hears nothing from you for months after they sign up, and then they receive an email out of the blue about a payment failure, they won’t be very receptive.

At best, they’ll grudgingly update their billing information. At worst, you’ve just reminded them that you exist, and they’ll cancel because they’ve forgotten why they signed up in the first place.

A good reason to communicate with your customers on a regular basis is to send a monthly email that tells them what’s new in your product.

4. Email isn’t enough.

You need multiple communication methods to make sure that your messages get through. In Stunning, we provide in-app notifications and SMSes in addition to emails. In our experience, in-app notifications have the biggest impact in terms of getting a customer to update their credit card information, because they arrive while your customers are engaged with your product.

If your product is providing value to your customers, they’ll have no problem taking a few seconds to update their billing information to make sure that they keep getting that value.

We recommend at least 2 communication methods (email and in-app), but if you have SMS numbers for your customers, you should use all 3. 

5. Make sure that you have DKIM and SPF signing for the domains that you’re sending email from.

DKIM and SPF are basically ways that you verify that you have permission to send email for a particular domain. More and more mail providers are starting to automatically classify messages without DKIM as spam, so you need to implement email signing as soon as you can , to give your emails the best chance of making it to your customers.

6. Failed payments sometimes resolve themselves.

The first time you make a payment attempt, it may not go through, but we’ve seen 20-25% of payment fails resolve themselves when we just reattempt to charge the card a few times. This is normally due to soft declines, insufficient funds, accounts hitting a daily limit with their financial institutions, etc.

So, if you just retry charges a few times over a week or so , some of them will go through without the customer needing to update their billing info. Stripe can automatically retry charges multiple times, on a schedule that you have control over.

7. Why is more important then “when”.

We’ve sent over 50 million emails so far, so we have a lot of data to back this up. When an email is sent doesn’t seem to matter very much when it comes to dunning emails. Our working theory is that it’s because the reason stays the same.

It’s not worth going crazy trying to measure the best times of day that most customers open your emails, because in the end, they’ll eventually check their email and get the message. And if you have multiple billing contacts for them, they will get the message one way or another.

For other email types, like newsletters, time/day is much more important. In the end, no matter how cleverly you try to time your dunning emails, you have no control over when, or in what context a customer will receive your message.

8. Make your customer’s path to updating their billing information as smooth as possible.

Your emails should include a link that takes the customer directly to a secure page that doesn’t require them to log in just to update their billing information. I’ve seen so many products  get this wrong. If a customer gets a notification from you about updating their billing information, and they have to log in but don’t remember their password, they’ll probably just close the browser window, because you’ve thrown up an unnecessary roadblock.

They won’t want to fill out your password reset form, wait for the reset email, click the link, set a new password, remember to go back to the original email about the failed transaction, and then update their billing information. It takes too much time! By the way, if you must require customers to log in to make credit card updates, at least send them straight to the right page once they’ve logged in.

Also, make it easy for them to update their billing information on mobile. The payment pages that Stunning provides for all of our customers support Apple Pay, Google Pay, etc so in many cases customers can update their card details with their face or their fingerprint!

9. Emailing customers before their cards expire to ask them to update their billing information is worth it, if you mix it with the right logic.

In Stunning, we check whether or not a card is likely to work after the expiration date, before we ever send them a Pre-Dunning email. That helps us to make sure that we’re only sending that email out when we need to (we don’t want to send unnecessary Pre-Dunning emails to customers whose cards will actually still work past the expiration date).

10. Vary the wording in your dunning emails.

I’ve seen lots of companies send the same failed payment email every time they retry a failed charge. Customers tend to instantly write off emails that look the same , because their brain tells them that they already know what’s in the email, so they don’t need to act on it just yet. If you vary your subject line and email wording, your emails about failed payments will be much more effective.

Across all of the subscription services that we serve with Stunning, we’ve found that customers tend to either update pretty soon after they receive the first dunning email, or they wait until they receive the 3rd one. The exception has been when all of the emails look the same, in which case they generally get ignored until they get an email saying “your account has been cancelled”.

Your final email before their account is marked unpaid, cancelled, etc should be a more personal appeal (we recommend sending the first few emails from a support email address, and the final one from a human’s email address, letting them know that a real person noticed that their account was going to expire and is reaching out to see if they need any help). Customers will pick up on the change and pay more attention to the last email.

In these emails, you should also remind customers of the value that they’re getting out of your product . The more detail you can put in, the better. Sentences like “you’re about to lose access to the 7 projects that you’ve created”, or “your emails will stop sending soon” work wonders.

11. Use backup payment methods.

If you’re going to go through the trouble of notifying a customer that their payment has failed, and convincing them to update their billing information, why not get them to enter a second card while you already have them on that page? It’s one of the best preventative measures that you can set up to make failed payments a thing of the past. When a customer has a failed payment, you can just switch to the a different payment method and try that one, without even having to contact them.

12. Follow up with customers who visit their card update page but don’t update their billing information.

We’ve all gotten an abandoned cart email when we shop at online stores and leave without completing checkout. You should also do that for your customers who may have gotten distracted, or who may be having data entry issues. They made it all the way to their payment update page, so you just need to remind them to complete their card update so you can retry payment.

13. Block access to your website after too many failed payments.

Don’t allow your customers to use your product for free if their subscription has been cancelled. You should still allow them to log in to your website, but then you should take them to a page that lets them update their billing information. Customers need to eventually lose access to the product, or they may never update their billing information.

14. Mark your customers’ subscriptions in your Stripe account as unpaid instead of cancelling them after too many failed payments.

When you mark a customer as unpaid, Stripe leaves all of their subscription information intact, so that you can easily resume the subscription at any time in the future. All you need to do is pay their last invoice successfully, and their subscription will pick up right where it left off. It’s the most efficient way to reactivate subscriptions.

Give Stunning a try!

Need help recovering more failed payments on Stripe? Try Stunning. It has all of these best practices built in, and we’re getting better all the time.


We're on a mission to help a million people to get better at fighting failed payments. Become one of them now!