I started to track my personal finances back in 2008. In 2008 iPhone was only 6 months old, there were no fancy apps to track personal finances, and I was using the web app called Buxfer (it is still alive, though). Back in that days, Buxfer was like PHP desktop site with a slow interface and every evening I sat down at the table, turned my computer on and filled in all expenses which I could recollect for that particular day. I used Buxfer for almost 3 years(!), but then it started to degrade and it was close to be discontinued.

Once I got my first iPhone (it was iPhone 4s) I started to use one of those fancy apps and my app of choice was CoinKeeper. It was slow and buggy, but, at least, CoinKeeper tried to make this routine operation called “enter a transaction” to be quick and very simple.

Also I’ve tried MoneyWiz (multiple times), but its interface is too bulky and slow, it is overloaded with features which I will never use.

Until recently I was using another app called Show Me The Money. It is nice and simple, its interface is lightweight and the app overall works just fine.

As you can see, I have been searching for an ideal personal finance app for a quite long time. And the main reason why none of all the apps I have ever tried didn’t suit me is that all these apps have the core flaw: need to enter every single transaction. My ideal personal finance app should have a mechanism to export all transactions from all my bank accounts, so I need to enter manually only those transactions which have been made offline, meaning cash transactions. To be honest, MoneyWiz allows you to export your bank transactions, but at the cost of another nuisance: subscription. Ability to export your transactions from your banks will cost you 60 EUR per year. My ideal personal finance app shouldn’t have a subscription at all.

Having transactions exported automatically turns personal finance app into some kind of mail app where every transaction is an email. So my ideal personal finance app should have rules so I could, for example, assign category for every incoming transaction based on its description or payee.

Unfortunately, I couldn’t find my “ideal personal finance app”, so I wrote it myself. It’s not done yet of course, but let me introduce it.

So I started looking for the way how can I export my bank transactions. I checked MoneyWiz to see how they’re doing it and turned out that they’re using a service called Saltedge. I checked Saltedge’s documentation and API references, both looked quite ok, so I wrote them a letter in which asked if it’s possible to use Saltedge for personal use and how much that would cost. Saltedge support answered that there is a special “Test” mode which gives you access to up to 10 banks for free. And this “Test” mode is eligible to be used for personal needs. What a good guy Saltedge!

Then I wrote an application which I called “ex_money” and made it open source of course: https://github.com/gaynetdinov/ex_money. It’s written in Elixir programming language using Phoenix framework. Framework7 was used to build a mobile version of the app, so it looks quite nice(see screenshots). ExMoney can be easily deployed to free Heroku plan or any super-cheap-vps with 256 MB of RAM. Heroku says that ExMoney consumes 70-80 MB of RAM. htop on VPS says ExMoney consumes 50-60 MB of RAM. So roughly speaking, ExMoney can be deployed to any modern toaster or fridge.

It’s work-in-progress. It is not thoroughly tested piece of software. ExMoney was deployed and tested literally by two persons(myself and my friend). The code smells in some places and it’s written considering happy-paths only. But being deployed to Heroku, ExMoney gives you an app with all your bank transactions exported(some banks allow to export transactions which were made up to a year ago!) instantly and for free. So you can start analyzing your expenses based on 1 year history of your transactions! Amazing, isn’t it? Saltedge provides automagic categorization of the transactions, but ExMoney allows you to set a list of rules which can be applied to every incoming transaction, so it’s possible to reassign category or, for example, detect withdraw transaction and add an income transaction in “Cash” account.

So I’d like to encourage everyone who tracks personal finances and who is interested in that topic to participate in ExMoney development. Please create issues and submit pull-requests. It might be a good place for designers to experiment with different ideas or for developers who want to learn Elixir and Phoenix.