From Concept to Launch: The Birth of Bank Statement Converter [Journey in Coding] #2
April 2021, Enter Dominic
Saturday April 3rd 2021.
I spent the day at my Dad’s house, then later I went over to meet Dom at Lan Kwai Fong. We met at a Japanese ramen place called Nojo.
Dom gets something to eat but I think I already had dinner so I just drank a beer.
Angus: Okay here’s the idea. A website where you upload a PDF bank statement and then it gives you back a CSV file.
Dom: Who needs that?
Angus: Accountants I guess.
Dom: How does it make money?
Angus: We let people convert some documents a day for free, and if they need to do more, we sell them credits.
Dom: What’s the front end going to look like?
Angus: It’s one page. People upload a PDF to the page, and then we trigger a CSV download.
Dom: I do the front end and you do the backend?
Angus: Yup.
We talked a bit more, but basically Dom liked the idea. I told him I didn’t really know if it was going to make money or not, but it’s a pretty simple app and we could use it to figure out if we liked working together. While at Nojo we decided on the domain name bankstatementconverter.com and Dom bought it.
It was an Easter long weekend so Dom had the next two days off work.
I was paying for a hot desk at a coworking space in Sheung Wan but I bought the cheap plan so I could only go in on business days. Dom was living at Jen Hotel in Sai Ying Pun and they had a business centre. We agreed to meet up there the following day to work together on Bank Statement Converter.
Sunday April 4 2021
The next day we met up at 12:00 PM at JEN Hotel. At this point the core converting part of the application could only be run through test cases. I needed to set up a web server, and get the conversion functionality happening behind an API. Probably something like:
POST /api/v1/BankStatement
Where the body of the POST statement is a PDF file and the response is a CSV file. Sounds pretty cool to me, a REST API with a single end point.
There were other things that needed to be done:
- Build the front end. Dom’s job.
- Connect the front end to the back end. Dom’s job.
- Get some virtual machines on AWS. This is where the backend will run.
- Write Ansible scripts to test and build a JAR.
- Write Ansible scripts to deploy the JAR to DEV and PROD.
- Put the front end on the domain.
- Put the back end on the domain.
- Get SSL certificates. Argh this is always fiddly.
These are all things I have been doing since 2016. They’re time consuming tasks, but not difficult. I just sat down and got to work copying bits and pieces from other projects I had on my computer.
As Dom worked on the front end he noticed my single API solution had a problem. The file uploading widget he wanted to use didn’t really expect a file download response. It also wanted to send one request per file.
Dom: With the one API approach, what if I’m uploading 100 files, and I lose internet on file #99. I’ll have to upload all 100 files again.
Dom had a good point. Nice thinking Dom. We decided to break it up into two APIs.
File Upload
POST /api/v1/BankStatement
The request body is a PDF file. The response body is a universally unique identifier (UUID).
PDF Conversion
POST /api/v1/BankStatement/convert?format=CSV
The request body is an JSON array of UUIDs that represent an already uploaded PDF. The response body CSV of the transaction data in that bank statement.
This worked pretty well, and I believe on that day Dom was able to call the two APIs together and trigger a file download.
Reading this you’re probably thinking. “Wow! These two cool guys were able to get the app running in one day”. In reality what we built could not really be called a Bank Statement Converter. It only worked for HSBC bank statements. A better name might be “HSBC Bank Statement Converter”.
Lots of other important features were missing. Features like:
- Payment processing
- User accounts
- User credits
- A real database. The first version wrote to a mocked out database that wrote state to in memory data structures. This meant all state was wiped when restarting the backend process.
Launch Day - Friday April 9 2021
Dom and I worked at my coworking space in Sheung Wan. Dom gets it running live on bankstatementconverter.com
Here’s what it looked like when we launched.
One thing you’ll notice is as soon as we launched we were the world’s most trusted and accurate bank statement converter. I’m not sure how Dom knew this was the case, but I’m glad he was able to figure that out and tell our users about it.
Here’s what it looks like today (February 2024).
Not massively different is it? One thing that changed is we replaced “Approachable” with “Accurate”. As time has passed us by, the Bank Statement Converter has gotten more and more accurate, while the company has gotten less approachable. I get a lot of emails every day and I ignore the majority of them. This is not good, people like it when their emails are replied to.
What next? Sit back and watch as the money comes rolling in?
Well that would have been a swell idea, but sadly the app didn’t really work properly. Which meant if someone stumbled upon the site and uploaded a bank statement, the resulting CSV would be pretty bad. They would then leave our site and never return.
I knew I had to do the following things:
- Make the algorithm better
- Get people to use the app
- Get some money from the users
Being a smart boy with a speedy brain I was able to come up with a smart and speedy plan to do these things.
Make the algorithm better
I thought “I need to get a lot of bank statements, from a lot of different banks, then I can come up with a cool algorithm that works for all these banks”. Then I thought:
“How am I going to get a lot of bank statements?”
Wait a tick. What if I didn’t do it, but instead I hired someone on the internet to get these bank statements for me? I went onto upwork.com and placed the following job ad.
At the time the app was known as “Festive Ritchie”. Festive Ritchie is a good name for someone who wears Christmas sweaters. It is not a good name for a bank statement converting app. Don’t worry we changed the name. If we didn’t change the name this book would be called “Festive Ritchie - Zero to $200K a Year”.
Get people to use the app
This should be easy right? All I needed to do was to enlist the help of Mark Zuckerberg. Mark’s a cool guy. Mark allows you to place ads on his website (facebook.com) in exchange for a fee. I filled in one of his forms to place an ad and then hit submit.
“You have been banned”
Oh no. I guess Mark wasn’t feeling so cool today. I had done something to anger him. Darn. I poked around for a little bit but could not figure out how to get myself unbanned. I suspected the ad I placed made my website look like a scam. “Bank Statement Converter” sounds like a scam to steal people’s private banking information.
I came up with a new plan. To enlist the help of the Google brothers, Leeroy and Cedric Brin. You see, the Brin brothers allow you to place an on google.com in exchange for a fee.
“Dom, let’s place ads on Google instead”
Ads on google.com don’t contain any pictures. They are all text based. That should make buying an ad on google.com simple. However, buying an ad on Google was very complicated. Luckily I am a perspirant person, and I was able to get through the long and complicated google form. As I filled in the form I would heat up, then I would perspire and cool myself down, then I would continue to fill in the form.
On April 17th 2021 our first Google ad went live. Soon after that we started getting random people from the internet using our website.
Get some money from the users
This would require a little bit of coding. Setting up a Stripe account. Using a real database instead of a mocked out ephemeral one. Creating the concept of credits. Using up credits when users converted a document.
The rest of the month I basically spent improving the core algorithm and implementing the stuff needed to process payments. Getting money was very important to me. It still is.
End of Month Numbers
Post article|Why My App Didn’t Make Money Initially and What I Learned [Journey in Coding] #3
Written by Angus Cheng (Link)
Original post : BankStatementConverter.com Chapter #2
0 Comments