The other day I had a bit of revelation about what problem Bank Statement Converter solves. The obvious answer seems to be “it solves the problem of extracting transaction data from PDF bank statements”. That’s true, but you could also say it solves a more general problem. “It gives user access to their bank transaction data”. However, it’s a bit of a pain to use. To get your 2021 transaction data you need to:
- Go to your internet banking
- Download 12 PDFs for each account
- Go to bankstatementconverter.com
- Upload the 12 files
- Click convert.
Wouldn’t it be cool if we could cut out some of those steps? I’ve been thinking about ways to achieve this.
Approach #1 - Driving Browser Extension
It may be possible to create a browser extension that can control your web browser and automatically download your PDF bank statements. The user would do something like this:
- Login to their internet banking
- Tell the browser extension to pull the documents
- The browser extension would click on link, press buttons and fill in fields in order to get to the PDFs.
A good thing about this solution is there is no need for the user to give us their internet banking credentials. The extension can be audited by a 3rd party to prove it does not do anything malicious.
A downside is this requires building integrations for every internet banking platform out there. There really is no “generic solution”.
Sadly, I do not believe it is technically possible. I haven’t confirmed it yet, but I highly suspect web browsers do not let 3rd party extensions “drive” the browser.
Approach #2 - Guiding Browser Extension
Very similar to the previous approach, except this time the browser extension just tells the user what to do. “Click here”, “Fill in XYZ”, “Press this button”. A lot less nice but still somewhat helpful.
This should be possible, but I wonder if users will find this helpful or not?
Approach #3 - Driving Desktop Application
This approach is similar to approach #1 except that it’ll be a Windows/MacOS application instead of a Browser extension. If browser extensions cannot navigate through pages then perhaps a desktop application that controls a user’s mouse/keyboard could. This would be very hard to write, I’m not sure exactly how it would work, but I feel it is possible. A nice thing about this approach is users do not need to give us their credentials, everything happens on the user’s computer and banks will not be able to block this application.
Approach #4 - Fully Automatic API
This would involve creating an API that logs into your internet banking, downloads your PDF statements and then processes them. Here’s how I imagine it would work:
- User provides us their internet banking credentials
- Our server calls the APIs for their bank and downloads their PDF bank statements
- Our server converts their bank statements from PDF to CSV
- We give the CSV results to the user
A nice thing about this approach is the user has to do very little. There are quite a few downsides though! For some reasons banks do not like 3rd parties pulling data from their internet banking portals, they put up a lot of road blocks to prevent this behaviour. It’ll require a lot of work to fight against these road blocks. Lots of monitoring will need to be in place to figure out when integrations with banks break.
How to build all the integrations?
I have two bank accounts. This means I can personally write code to extract the data from my two bank accounts. Sadly (for the purposes of this app), there are more than two banks in the world. How will I build integrations for banks that I do not have an account with. Here’s a few methods:
- Pay developers to build integrations for their bank
- Create a tool so that non-developer users can create integrations for their own bank
- Go nuts and open a bank account with every bank in the world.
- Pay people to let me access their bank account so that I can build an integration for it
This is quite a big problem I’m not sure how to approach it. That doesn’t matter too much at the moment. I have two bank accounts, I can start off by building integrations for them.