Replacing mint.com with my own (automated) webapp
I’ve been using mint.com since 2010. I was happy with the service; it worked pretty well, most of the time.
But recently, I decided it just wasn’t worth the risks.
So I unlinked all my banking accounts, and then deleted my mint account.
Since then, I replaced it with a custom solution: my own mint.com alternative.
In no particular order, here’s what I did / how it works.
My banking credentials (usernames, passwords, security questions answers) are stored only on my (Mac) computer, in Keychain. (Bonus: my hard-drive is encrypted, and I use a pretty long passphrase as my encryption/login/Keychain password.)
Daily (at 10am), a Python script runs: it uses those credentials to connect to all my institutions websites, and download either OFX or CSV-formatted exports of my recent transactions.
Those transactions are stored in a local SQLite database, and sent via a simple remote web service. (buzzwords: JSON, API, HTTPS, Bearer authentication token)
Newly inserted transactions are post-processed by matching them against a set of rules. This post-processing will rename, categorize and tag known transactions, pretty much the same way mint was doing. Bonus: I use regular expressions to find known transactions, can rename them using RE capture groups, and will add specific tags to some transactions, all of which mint was not allowing me to do.
Since I already had a lot of data in mint, I imported all of that into my own solution. I re-used most of the tags and categories I already had in mint, but cleaned them up a little.
It took me a couple of days just to go through all of those, and make sure they were correctly categorized, tagged, and named. It didn’t help that I had my Paypal account in mint; when the Paypal transactions were not duplicates of other transactions (from my credit card or checking accounts), I had a hard time finding it they used my USD or CAD balance. I even had some transactions that were partially funded from my Paypal balance, and partially paid using my credit card. Those were a mess to sort!
I created a simple web frontend that allows me to browse those transactions, grouped by month. For each month, it lists all the categories of expenses and incomes, and displays those in both a table and a pie chart. Rows (and slices of pies!) can be clicked to see all the transactions that are in the specific category, for the selected month. At that point, I can manually edit each of those transactions, for example to add a comment, or change the tags, category or displayed name of the transaction.
Each year, during tax season, I had to go in mint, and look for specific transactions in order to be able to find all the expenses and income to include in our tax return forms. I now have a simple web page that lists all those transactions in a simple HTML table (I find them by category and/or tags). The result can be quite easily copy-pasted into Excel, in order to validate the transactions, and sum each category for easy inclusion in our taxes return forms.
I have now released my web-app as an open-source project:
EasyMalt - Easy mint Alternative - Personal financial management web-app: accounts aggregation, categorization, tagging, reporting.
The downloader-importer is a separate repository: EasyMalt Local Downloader & Importer.
Financial institutions support is pretty bare right now… But help me help you by implementing new institutions!
Some institutions have easy to use OFX URLs, which greatly simplify the downloading of transactions; I just used the ofxclient project to fetch those. (For me, only Tangerine was supported by ofxclient.)
For other institutions, we need to fake browser access to download OFX or tab-separated data files.
You can find how to help in the CONTRIBUTING file.