Why are People Cancelling?
By Angus Cheng
Bank Statement Converter revenue numbers are going down. To understand why, I have created a feature that emails users after they cancel, asking them why.
I don’t like annoying people, so I only email a user once. A lot of users open subscriptions, cancel them, and then open another subscription later. In my book, sending an email every time they click cancel counts as annoying them, so I decided not to do it.
Some users have multiple subscriptions. If they cancel one, but still have an active subscription, I don’t email them.
When a user cancels on Stripe, they can specify reason. I decided to send a different email depending on their feedback, so that they know their feedback reason is being read.
private fun generateEmailBody(feedback: String): String {
val firstLine = "I'm sorry to see you canceled your subscription with Bank Statement Converter."
val lastLine = "<br /><br />Thanks,<br />Angus"
return when (feedback) {
"too_expensive" -> "$firstLine When you canceled you said the service was too expensive. Is there a price point you think is more suitable? I'd be happy to work something out.$lastLine"
"missing_features" -> "$firstLine When you canceled you said the service was missing features. Can you let me know which features were missing?$lastLine"
"switched_service" -> "$firstLine When you canceled you said you switched to another service. Can you tell me which service you switched to and why?$lastLine"
"customer_service" -> "$firstLine When you canceled you said you it was because of our customer service. Can you tell me a bit more about how our customer service was lacking? We're hoping to improve for you or future customers.$lastLine"
"low_quality" -> "$firstLine When you canceled you said you it was because our quality was low. Can you tell me a bit more about what we did wrong? We're hoping to improve for you or future customers.$lastLine"
"too_complex" -> "$firstLine When you canceled you said you it was because we were too complex. Can you tell me a bit more about that? Hopefully we can use your feedback to reduce our complexity.$lastLine"
"other" -> "$firstLine When you canceled the reason you put down was \"other\". Can you tell me a bit more about that?$lastLine"
"unused" -> "$firstLine When you canceled the reason you put down was \"unused\". Can you tell me why you stopped using Bank Statement Converter?$lastLine"
else -> throw RuntimeException("Unexpected feedback of $feedback")
}
}
I decided to send the email in plain text from my own email address, so that it’s clear they can reply to the message. I started sending out these emails on September 1, since then 42 people have responded. Let’s go through the different reasons.
One off job
21 people replied saying they needed it for a one-off job. A lot of them said they use it during tax time. A few accountants said they use it when a customer gives them PDFs. This makes sense.
They buy credits when needed
11 people said they had enough credits and will open another subscription when they need more credits. When a user cancels their subscription, I allow them to continue using the remaining credits on their account. A lot of other SaaS businesses do not allow this. Should I clear user balances when they cancel their subscription, thereby forcing them to keep a subscription open?
Personally I don’t like it when businesses do that to me. So I’m not going to do it to my customers. However I do want to encourage users to keep a subscription open. One idea is to give more credits for an open subscription, versus an initial subscription purchase. JetBrains does something like this. A JetBrains license costs $X a year, and a renewal of the license costs $0.8X. Maybe I’ll do that too.
Using AI now
3 people replied that they use AI to do this now. The AI chat bots are pretty good at extracting transaction data from PDF bank statements. They’re slow, but the results are kind of good enough.
Poor quality
2 people replied saying the quality of the conversion was too low. I have a lot of plans for improving the results, so hopefully soon quality won’t be an issue.
Quikbooks
2 people told me they use Quikbooks, and it now has its own PDF bank statement extraction feature. Oh no.
Maybe that’s not that bad thing. I could contact Quikbooks and ask them if they’d like to replace their feature with my API. So they don’t need to support all the banks. I could also contact the other accounting software companies and say “Hey Quikbooks has this cool feature, do you want it? If so you can use my API”.
Slow support
1 person said I took too long to reply to their support email. Lately I have been very good about replying to support emails, but last year I was very lazy indeed.
Price
1 person said the price was too high. I could try doing an A/B test with lower prices, however I’m not sure the results will be statistically significant based on the amount of traffic I get a month.
Made their own converter with Claude
1 person said they used Claude to make their own Bank Statement Converter. This is something I hear about a lot on Twitter, but I always assumed it was bullshit. I was surprised to learn someone is actually doing this.
Conclusion
This was a good exercise, and it’s nice getting this continuous feedback from my users. It has also given a lot of good ideas for the future.