When you’re hustling hard to grow recurring revenue, it’s always discouraging to churn good customers.
And nothing is more frustrating than losing good customers to failed payments, aka involuntary churn.
A poor setup for fighting involuntary churn will cost your business today, and hamstring growth forever. The problem only gets worse, as lost customer value compounds month-over-month-over-month.
The math is pretty simple: for every dollar of MRR lost per month, multiply by 78.
That’s the annual cost in LTV, assuming 12 months of retention and without factoring for growth. Here’s a calculator to estimate the upside of improved retention.
Gaining an additional $100 MRR each month is worth $7,800 after 12 months.
Here’s the silver lining:
Because of it’s involuntary nature, this is a solvable problem, and there is no reason to simply accept it as a cost of doing business. At Churn Buster we spend our days making sure no one loses another customer unnecessarily. And while it’s our job to continuously optimize the processes for doing so, there are basic guidelines that every serious business should establish right away.
This stuff is hard to get right, but incredibly valuable (💰 literally). The following guide will help you avoid some mistakes we’ve been seeing.
Here are 11 key considerations when optimizing your process for recovering customers when payments fail:
1. Stop Pre-Dunning. Turn it Off. Now.
5 years ago, it was a good idea to give customers a heads up 30 days, 15 days, 3 days before their card expired. You could plug a potential leak before it became an issue.
Today, just check with your payments provider to see if they have partnerships with card issuing companies.
In the case of Stripe (and many others), they have something called “Card Updater.” It communicates with Visa, MasterCard, and others to update cards in your account automatically. It’s not fully implemented worldwide, and it’s already effective for over 70% of cards that look like they’re going to expire.
If you use Stripe, and want to see Card Updater at work…visit this link to see all the card updates happening: https://dashboard.stripe.com/events?type=customer.source.updated
Most card updates will look like this:
See that “Source: Automatic” bit? That’s card updater at-work! 💳
Why does this matter?
Let’s say you are sending pre-dunning emails to warn customers their cards will expire without their prompt attention…
For every 10 customers you email, 7 would have completed a successful payment. Their cards will be auto-updated, and their recurring billing won’t skip a beat.
How many emails does your support team get about card updates from confused customers? How many customers are getting emails about billing issues, when they could be getting emails about how awesome your product or service is? And how many customers are cancelling because you emailed the wrong point of contact—someone who doesn’t know your software is actually in-use by the team? (This happens surprisingly often.)
The upshot of shutting down pre-dunning:
- Fewer support requests
- Fewer cancellations
2. Go Beyond Emails Triggered by Payment Attempts ✉️
Most in-house and free/cheap dunning solutions are set up “the easy way.”
The easy way = emails get triggered every time a payment fails. For Stripe users, this would mean triggering emails based on failed payment webhooks.
The problem with this approach is that emails just go out when payments fail, and you have no control over optimizing the recovery process. Retention funnels (driving traffic to a conversion point via email or phone call) can be optimized similarly to acquisition funnels. Build a process, analyze performance, and iterate on the behavior.
For example, as a general best practice, you should wait to email a customer until their card has been retried once or twice.
Around 20% of your charges will clear within the first 5 days simply by retrying the card.
At Churn Buster, we typically hold off emailing customers until 5 days after the initial failed payment.
See the Pre-Dunning section above for why it’s a bad idea to email customers about a payment problem that doesn’t actually exist. The more your company grows, the more critical this will be.
With custom funnels, you’ll also be able to:
- Add additional emails, and extend your process longer than the retry schedule. Without a custom funnel, you won’t be able to implement opportunities you spot for better performance.
- Segment customers and send different campaigns based on price point or other factors.
3. Optimize Your Card Update Page 📱
When you email customers, you need to link them somewhere to update their card.
This step is one of the most important you can focus on, and we see a lot of sub-optimal setups.
There are a few key features that should be built into your page to ensure awesome performance:
Don’t require a login to update a card. Assume that most your emails will get opened on mobile devices. Your customer needs to be able to click a link, fill out a simple form, and move on. The more hurdles you put in front of them, the less likely they are to update.
For the same reasons, your page needs to be responsive and mobile-optimized. Remove navigation, remove unnecessary copy. Test across multiple browsers, devices, and screen sizes. At this stage, it’s most important to a) show the customer this isn’t a sketchy phishing campaign, and b) display cleanly and reliably in their browser.
Host a dedicated page where customers can update their card. If you use a modal to show the form, it’s possible that other code on the page will interact/conflict with the billing code, and cause problems. If it there isn’t a conflict today, it may happen after a future website update when you least expect it.
Routinely test your card update page. We’ve seen companies update their app or marketing site, and not realize the page they are linking customers to had been broken during the update—for several months! Once you’re at five-figure MRR, this is a problem that scales disastrously… and is well worth your effort to fix.
Please, make sure your page is encrypted, and don’t store credit card details on your server. Pass them directly through to your payments provider.
You may think that customers will find a way to update their card if they value your service, but that’s not always the case. Shit happens, people get busy or go on vacation, they leave their job at the company, or if you’re B2B you could be dealing with multiple points of contact who may not see the value/usage of your product.
Company credit cards, manager authorizations, and other internal operations of the customer’s company all find their way into the updating process. Make it easy for them to pay you.
4. Ensure Subscriptions Get Reactivated ✅
Specifically with Stripe (check with your payment processor on this), when the retry process wraps up a customer can either be marked as unpaid, or canceled.
Depending on your settings, this will happen after a certain number of days (1 to 22 days in Stripe).
When it’s set to “Mark as Unpaid”:
After a subscription is marked as unpaid…they won’t automatically reattempt payment of that invoice. So let’s say you have that set to happen on day 10. If the customer updates their card on day 11, you’re screwed. The new card will be stored on-file, but the subscription won’t have an automatic payment attempted.
And here’s the terrible part: When a subscription is marked as unpaid, all future months/years will generate an invoice, but payment won’t be attempted.
So in this scenario, you get a good card on-file, and a customer who showed intent to renew, yet they’ll never pay you again.
When it’s set to “Cancel Subscription”:
This scenario isn’t much better. Let’s take the same schedule, and assume a card update happens on day 11. The new card will be stored, but since there is no subscription anymore, payment won’t be attempted and future renewals won’t occur.
In either of these cases, it will likely look like you saved the customer depending on your reporting tool. But they’ll never pay you again.
You either need to manually ensure all customers who update their cards get a subscription back into an active state. Or you need to write code that handles these scenarios.
5. Collect on Unpaid Invoices 💰
Whenever a card is updated, decide how far back you’d like to go for collecting unpaid invoices. Beyond re-activating the subscription, you can also collect for any invoices that went unpaid in that time frame.
Some companies like to collect all unpaid invoices, others only go back 30–60 days. And some prefer to just forgive the balance and move on.
It depends on your specific business model, but make sure you put thought into this, and build the proper solution.
You don’t want customers to be surprised when they get charged $100 18 times when they update their card after an extended-delinquency.
If that’s your preference, that’s fine, but set some expectations with your customers in these cases.
6. Explore Edge Cases and Plug Leaks 🔍
There are various edge cases that can result in revenue churn. Here is a non-exhaustive list of some edge cases we’ve witnessed that you may want to consider, particularly if you are high-growth or at-scale:
- What happens if your payment processor’s API is temporarily down?
- Will payment be initiated if a customer updates their card after a subscription has been marked as canceled/unpaid?
- How will customers with multiple subscriptions be handled? Customers with multiple customer IDs? Customers with discounts? In-trial?
- What if a customer’s email changes in your app — does it change in your payment processor?
- What happens when an email bounces?
- What happens when someone leaves their position at their company?
- If a customer updates their card multiple times will they be billed multiple times?
- How far back will you collect on delinquent invoices? When collecting on multiple invoices, will you get notified of large balances so you can personally manage the customer experience?
- (Stripe-specific) Will an invoice be auto-paid if it’s already been closed? What if it’s been forgiven?
7. Build in Visibility 📊
For several reasons:
- Keep business folks/investors in the loop
- Help customer support/success interact better with customers
- Trust that the system is working as expected (we’re talking about emailing thousands of people about billing issues — you want to know that’s working as expected)
Then, you’ll need visibility into the following:
- Who is currently past due? (what’s your current opportunity for recovery?)
- Where is each person in your “funnel?” (i.e. emailed 3/5 times, next email on Friday)
- (important) How does our recovery break down over time? When a funnel ends in a “win,” what was the cause? Did they update their card? Was that before or after you emailed them? Was it reattempted successfully? When did it happen during the funnel timeline? Should you add another email to the end of the process?
- Are emails getting delivered?
- Are emails getting opened?
- Are people converting after clicking the link in your emails?
Having answers to these questions is critical. Otherwise you’re flying blind hoping for the best.
That can work for very early stage companies, but once you’re growing, visibility is critical.
8. Prioritize Regular Maintenance 🔧
A basic system can be fun to build as a one-time project, but someone is going to need to keep the gears greased.
When you have 5+ figures of revenue at-risk monthly…simple oversights can be VERY costly and take months to discover.
Once you’ve setup your system, you should assign someone to watch for broken links, pages that aren’t responding, deliverability issues, updates in Stripe’s API, etc.
Automated monitoring systems can help here too and take a bit of load off your team…
Personally, we use Slack alerts very heavily to monitor client accounts and get notified of any issues ASAP.
One example you could monitor for that goes beyond basic maintenance is this: Customer tries to update their card on your page, card gets denied, customer doesn’t try another card.
That’s someone showing intent to reactivate, and then being failed by your system.
Reach out to them! Escalate it to customer success! Just don’t let them walk for good.
9. Set Up Emergency Handling 💣
You should not only be keeping an eye on Stripe’s (or other integrations) API uptime, but also that of your own dunning system.
How fast are your card update pages? Are you notified when they go down? Can you detect who tried to access those pages during the downtime?
When your email delivery provider (we use Postmark and love them) has downtime, or their queues back up…do your emails still get sent out? Do opens and bounces still get tracked?
These are the things your team can’t ignore when you build or update your dunning system.
10. Follow up!
If you ask Steli from Close.io to give you one tip, it’d likely be, “Follow up ’til you die!!”
And he’s right, too many people give up early whether they’re sending sales emails, or retention emails.
Our brains tell us that the person we’re working with is no longer interested, that they’re mad at us, or that they’re going to tell the world we’re spamming them. But it’s simply not the case.
We see card updates come in at every stage of our process, and we’ve regularly lengthened our process to retain more customers.
Shit happens, people have long to-do lists, they get distracted. And all they often need is a nudge.
Follow. Up. Relentlessly.
11. Get on the phone ☎️
Emails are the bread and butter of your recovery process, but don’t underestimate the power of getting on the phone. Particularly with high-value subscribers. You should absolutely be calling them for card updates.
When you do, keep in mind that it’s rare for people to answer the phone from an unknown number these days, so you’ll be leaving a lot of voicemails. You’ll need a process for leaving effective voicemails and following up several times before you speak with a real human. But don’t stress, it’s totally worth it.
Particularly with B2B, these calls are very helpful for people. Remember, these aren’t collections calls (“you owe us $x”), but rather a chance to show stellar customer service and help them get updated on the spot and keep your service running, while you have a minute of their attention.
In our experience these calls are almost always positive, appreciated, and a chance to stay connected with your highest value customers. As a business owner, finding opportunities to stay connected at various points in a customers lifecycle is a gift… don’t ignore it!
This isn’t an exhaustive list of considerations, but it’s a solid baseline. Start iterating on some improvements and you’ll see an uptick in customer retention. Every percent counts.
When you’re beyond $20k MRR, optimizations have a huge impact when considered in terms of LTV impact.