I've been using beancount [1] and fava [2] to organise my personal finances for a while now, my beancount file has about 3 years of transactions/financial data in it.
I've automated a few things but it's still largely a manual process to update the file, which I do maybe 2-3 times a month. Requires some patience but I think it's worth it. Also the emacs mode for beancount is superb.
The main advantage is it's very flexible, you can track investments, bank accounts, credit cards, pensions and even abstract things like digital currency wallets (e.g. Playstation Network) or vacation time. I've even used it to track RSUs from employment etc.
I love fava/beancount, but I wish the language had some method of abstraction.
I keep repeating myself, but don't see easy facilities for DRY, etc.
e.g. When I do a debit card purchase I move currency from Whatnot:Cheque:Pending to the expense account, then later from Pending to Whatnot:Cheque:Current so for EVERY debit card transaction I'm copy-pasting a template and editing by hand.
Fava/beancount is so good though, that it's a local maximum - I'm a bit stuck.
The place to do this would be in ingest, wouldn’t it? The ingest configuration is just Python, so one could conceivably write a module to assign accounts based on the incoming data. I know there was a module that would try to use ML to do that based on your account history.
If you don’t want to do that, another option is hledger. I used that for a while before deciding to switch back to beancount for its ingest process. However, considering I have made no progress on that over the last year, I might just go back to using hledger.
hledger’s ingest process is not as sophisticated as beancount’s. You can’t write arbitrary plugins like with beancount, but you can pattern match on the incoming text and assign accounts that way. You can also define automatic transactions in your books, which I found incredibly helpful for managing my budget.
You can easily create any kind of abstraction with beancount's programming interface [1]. I find it very comfortable, because I can manipulate the data structure directly (and not just the plain text as in e.g. vim).
For example, here is a plugin that I wrote to "delay" a posting of a transaction to another date via an intermediate ("transfer") account [2] and its tests [3] that solves a problem pretty similar to yours (I should someday package my plugins properly and maybe put them on PyPI, but I haven't had the time yet). The beancount documentations also has a list of existing published plugins [4].
I'd been looking into beancount and fava earlier, but somehow it took your comment for me to realise why the latter tool is called fava (=beans, referencing beancount). I'd previously ignored it as just another pronounceable-nonsense-name on the web.
I've automated a few things but it's still largely a manual process to update the file, which I do maybe 2-3 times a month. Requires some patience but I think it's worth it. Also the emacs mode for beancount is superb.
The main advantage is it's very flexible, you can track investments, bank accounts, credit cards, pensions and even abstract things like digital currency wallets (e.g. Playstation Network) or vacation time. I've even used it to track RSUs from employment etc.
[1] https://beancount.github.io/
[2] https://beancount.github.io/fava/