Cube.js Blog

How to Reduce Churn Rate By Handling Stripe Failed Payments

How We Automated Dunning Management

Author avatarNurzhan Ospanov/Analytics/June 14, 2017
How to Reduce Churn Rate By Handling Stripe Failed Payments
Show Original

Decreasing churn rate is the way to increase revenue in SaaS business. When some of the customers churn, a product or customer success manager starts an investigation, connecting them by email and asking for feedback. Such dunning management can take tons of time, whereas the reason can be just a failed charge.

At the early stage of building Statsbot, we came up with a solution to the question of how to automate failed charges in 2 hours.

As a result, we reduced churn due to failed charges by nearly 27%.

In this post we share our experience and results in churn management.

What we did wrong

Imagine, one of the most active teams utilizes Statsbot for several months. They actively use all key features and chat with our support quite often. We’ve even shipped a new useful feature 5 days ago which they were asking for. And all of a sudden, we receive a notification that this team has just cancelled their subscription!

The first question that comes to our mind at this moment is: “What did we do wrong?”

Once we reached the client, it was discovered that the card they left on a profile has expired. Phew… move on. The team quickly replaced the expired card with a new one to keep their subscription.

The second question that grilled us pretty hard was “How many clients have we lost due to failed charges last month?”

The results shocked us. 30% of all churned users were gone due to expired cards.

We definitely knew that Stripe failed charges exist, and we had faced them before as users, but that was the first time we were on the other side. And the only thing we did wrong was not finding the issue sooner. We started to seek a solution for churn management.

Stripe + Intercom Solution

We use Stripe for our payment processing, and Intercom to provide support and onboarding for the clients. The integration of these two tools seemed to be the best solution to reduce the customer churn rate.

Step 1

Sometimes Stripe can’t charge a client’s card. The reasons could be that the card is expired, the amount we try to charge is higher than the limit set by the bank or client , or the card is reported stolen. In such situations, Stripe makes some additional attempts based on your configured settings.

In our case, Stripe makes the first attempt on the renewal date and if it fails, there are three more attempts — once a day for the next three days.

Step 2

Since we have already used Intercom, which has integration with Stripe, it was rational to utilize it for our failed charges issue.

Intercom automatically syncs events from Stripe in the form of attributes, and lets you create a campaign based on the filters you could apply with these attributes. Currently, there are decent amount of attributes available right away without a need to configure anything.

We quickly configured a custom attribute and called it stripe_failed_charge_last_occured_at. It actually allows us to catch the last failed attempt for certain users and immediately makes it visible in Intercom.

Step 3

Setting up a campaign was an easy task.

We applied the rule “Stripe_failed_charge_last_occurred_at exactly 0 days ago” and the goal for the campaign called “charged is triggered.” When we get a failed payment in Stripe, the user enters our email campaign in Intercom. Once one of our attempts to process the payment is successful, the user will exit from the campaign.

There are two emails that we send to users who enter the failed charges campaign:

• The first email is sent after Stripe gets a failed charge event. It contains a note that we couldn’t process the payment, advice to get in touch with the card issuer, and instructions on how to update billing info at Statsbot.

  • If our further attempts to charge the client keep failing, then Intercom automatically sends the second email two days after the first one. This email informs the client that we will make a final attempt to process the payment before our service will be suspended.

If you are curious about how we configured a 2 day interval between those emails, you might take a look at the screenshot below. Intercom allows you to choose an interval in an easy way.

This churn reduction campaign on the whole reduced our churn due to failed charges by 27%.

At Statsbot, we love getting results by leveraging tools we already have, with the smallest possible time investments from our side. This easy solution took us only 2 hours, and it continues to bring us positive results. We hope our experience can be useful for your SaaS business as well.


Thanks to Shoffner we’ve found that according to Intercom’s setup, if users will enter and leave campaign after successful charge they won’t be able to re-enter it again. A workaround in this case could be either initiating a new conversation with client via Intercom API or simply removing campaign goal which is Charged triggered.

Intercom and Stripe are a couple of our most favorite tools. We even integrated Statsbot with Stripe to make your analytics easier for metrics like MRR, Net Revenue, Trials, etc. Check it out.

You may also like: