home

Personal Finance Software

Building Custom Software

Managing my own Personal Finance software for many years now has been a learning experience. I had started a micro business where I thought I had needed the services of a software company to do my own bookkeeping at a monthly cost of $30. After only a month of usage, I decided to see if I could build my own custom bookkeeping solution. This set me off on this very long journey of building and running my own custom software to record my personal finances.

perl and 2000s

Early 2000s I spent some time and effort using Finance::Quote, a perl module which provided a way to pull down stock exchange data from public sources such as Yahoo.

Also around this time, DBD::Chart::Plot helped me build candlestick graphs and I was able combine this module and Finance::Quote to produce my own custom candlestick charts of stocks I was interested in or may have purchased.

Firefly III

Late 2010s I setup firefly-iii and started to write software to import transactions from my customer personal finance system into firefly. firefly has alot of useful features and I did find it useful though I found that response times were too long. I had imported over a decades worth of transactions and listing transactions and accounts was very slow. I’m sure it was down to a combination of lacking indexes and not very fast hardware.

I revisited firefly again in 2024 and I’m very pleased to see the project thriving. Perhaps one day I’ll return to trying it out again.

GNUCash

At time of writing it’s 2024, and I’m yet to jump in with both feet with GNUCash. I’ve read various parts of the manual over the many years and have dabbled with it but never committed to it as my primary personal finance tracking system. I have nothing but respect for the developers of GNUCash with it’s long standing within the opensource community.

In the last 2 years, I’ve been making more of an effort to learn more and do more with GNUCash. I’m not at the point where I am importing OFX and auto categorising transactions. To be honest though I’m not convinced that I will ever use GNUCash to import transactions through the supported import method or auto categorise transactions using the supported methods either. I couldn’t find a way I could automate this import and categorise process using the supported methods. It was very tedious though I’ve read that it gets better over time.

Instead, lately I’ve been writing custom software that takes transactions from my customer built personal finance system and imports these transactions directly into the GNUCash sqlite3 database. I’m not entirely happy with this method given the high risk of data corruption, but it is working for me so far.

But my vision is that once I import most of my finance history into GNUCash, is that I will use GNUCash as the base system to track my finances.

Custom software

OFX and FITID

The OFX file format has a FITID attribute which is a Financial Institution Transaction ID. OFX transactions I’ve imported that are related such as a bank transfer between 2 accounts I own with the same financial institution share the same FITID. This is one attribute that links both sides of the transaction from an OFX perspective and can be used to link these transactions together.

Transfers between accounts

Automatically categorising transfers between accounts has always been a hard problem to solve for me. Consider the following transactions:

Checking Account transfers $100 to Credit Card Account

With my current bank, this single transaction has a different memo for both accounts. Sometimes the credit card transaction date does not match the date of the transaction. My guess is the bank reconciled it sometime in the future.

Both transactions do share the same FITID, but my history of bank transactions shows that some transactions between accounts (say a Home Loan account and a Credit Card account) is missing a FITID. I can’t explain this and reviewing the OFX files for these transactions shows no “checking account transfer” side but does show the credit card account side receiving the transfer.

This has a real implication in reconciling a credit card account as the amount it reconciles to never goes to $0.