Stripe is awesome. Their product itself, and their great APIs are a breath of fresh air for developers who are dealing with payments on the internet. The kind people over there have been very supportive of the entire ecosystem of apps that have sprung up around them.
I’ve been dealing with failed payments in SaaS apps since 2006, and on Stripe since 2012. When I signed up for Stripe. I already had a couple of successful web apps under my belt, and so I quickly realized that there were features (dunning emails, receipts, and other types of email) that I needed that Stripe didn’t provide out of the box at the time. So, I started building them for my apps. After I finished the code to send dunning emails from my first app, I decided to extract the code so that I could use it in my other apps. Then, I turned it into an app that anyone on Stripe could use in the future: Stunning. It was the first app of its kind (the Dunning section on Stripe’s integration page was created just for Stunning), and we firmly believe that it’s still the best, both in terms of its feature-set and the value that it provides for the money.
One of Stunning’s main features is making the process of dealing with failed payments a bit less painful. We automate the messages that go out before credit cards expire, or after payments fail, and we even let your customers know in-app when they have billing issues.
We’ve recently hit a big milestone: $85,000,000 in recurring revenue that we’ve recovered for our customers, so to celebrate, we’re sharing 10 things that we’ve learned over the past few years. You can apply these to your own SaaS app today to cut down on 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:
1. Make sure that your app is actually valuable.
This is just about the best non-automated way to ensure that your customers keep using your app. If your app consistently produces value for your customers, they’ll get a notification about a failed payment and immediately update their billing information 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. Want to know how to determine if your app is valuable? I’ve been sharing everything I’ve learned over the years/am still learning in a free email course over at the Customer Retention Academy.
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 customers’ cards. 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 way to communicate with your customers on a regular basis is to send a monthly email that tells them what’s new in your app . Need help getting started with these kinds of emails? We’ve released a free lifecycle email starter kit that will help you get a jump start on communicating better with your customers.
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 SMS in addition to emails. In our experience, in-app notifications have proven to be 56% more effective in terms of getting a customer to update their billing information, because they arrive while your customers are engaged with your app. If your app 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 mobile phone numbers for your customers, you can use all 3. If you don’t, we’ve released a free app named Metadater that makes it simple to automatically collect that (and whatever other information you’d like) from your customers and save it into their Customer metadata within Stripe.
“What about phone calls?”, you may ask. Although picking up the phone and following up when customers don’t respond to dunning emails sounds like a great idea in theory, in practice we haven’t found that to be the case. Of course, that has a lot to do with our customer base, which consists mostly of SaaS apps. We’ve definitely found that if your customers sign up online, they most likely won’t want to be contacted offline. SMSes are more effective (and kinder to customers) than phone calls. With SMS you aren’t making immediate demands on a customer’s time (an unexpected phone call is never really appreciated) and you can give them a direct link to update billing information, as you would with an email.
With a phone call, you usually just end up speaking to voicemail (because customers generally don’t pick up when the phone rings from an unknown number). Even if they do pick up, if you want to be PCI compliant and never be exposed to the liability of taking credit card numbers over the phone, you still have to send a follow-up email about the phone call that contains the billing update link, which may or may not arrive if the original emails didn’t get there.
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.
We’ve seen 20-25% of failed payments resolve themselves when we just reattempt to charge the card a few times. This is normally due to soft declines, lack of funds, accounts hitting a daily limit, 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 up to 4 times, on a schedule that you have control over.
7. Why is more important then “when”.
We’ve sent over 1.2 million emails for SaaS apps 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 what days/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 alternate contact methods 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/in what context a customer will receive your message.
Vero has sent a lot more email than we have, and their recent post about what they’ve learned from sending 100 million emails also seems to support what we’ve seen.
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 apps 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 payment, and then update their billing information. By the way, if you must require customers to log in to update their billing information, at least send them 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 autofilling the card number using the camera on iOS, so if a customer receives a dunning email and opens it on their iPhone, they don’t have to type their card number in at all.
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 will 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). We have recovered over 3 million dollars in recurring revenue for our customers using pre-dunning emails.
10. Vary the wording in your dunning emails.
I’ve seen lots of companies send the same dunning 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 apps 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.
The wording of your dunning emails is very important. I’ve talked about it more here: Increase your SaaS app revenue and kill churn with awesome dunning emails
You’ve worked hard to acquire customers. I hope that this helps you to keep them from slipping away due to failed payments!