GnuCash: Open-source double-entry accounting software
gnucash.org
gnucash.org
However GnuCash really falls short if you have anything other than default locale settings. Want US language and EU number/date formatting? Syncing that across different OS'? GnuCash will probably struggle with it, you'll need to sometimes set locale, sometimes `LC_MONETARY`, sometimes system regional settings, sometimes all of it, and sometimes it still won't work.
I really wish they would move to a more user friendly settings system.
Also, the whole UI is extremely ugly, and the reports UI/UX could be better. But at the end of the day as a whole package it's still a lot better than a lot of alternatives, and more importantly it's not cloud based.
I hope that one day they'll rework the UI and perhaps adapt reporting, portfolio, etc to be more like something you'd see in banktivity (scroll down for screenshots) https://www.iggsoftware.com/banktivity/
~95% of the reason is the fantastic web interface Fava: https://beancount.github.io/fava/
It's a bit annoying that you have to configure it with Python code but once you set it up it's pleasant to use.
The pain point for me right now is figuring out the counterparty for transactions (e.g. I can see that money went out of my bank account to pay the grocery store but I need to map that to the "Expenses:Groceries" category). It seems I need to use some kind of smart importer or something.
One application I thought got that part quite right was Buchhaltung (which works with Ledger/hledger rather than Beancount): https://github.com/johannesgerer/buchhaltung. It's matching system made that dead easy. Buchhaltung also comes with an AqBanking integration if you live in a country where banks actually provide useful APIs.
If you were a business for example, then your "expenses" would actually represent things like business units and other managers and stuff - other people handling money - which is basically what double-entry was invented to manage. But there isn't a "Coffee" business unit for you - it's just a nominal category and really more of a tag explaining why you were paying "Joe's Coffee Cart Holding Inc." $3
My conclusion on this then is that what I really need is an extensive tagging system to associate with transactions, because the actual "accounts" should represent places money can actually go to or did go to - since in the event of unexplained balances and the like, that's the type of thing I can actually track down.
If you borrow your friend money, the fact that someone owes you that money is an asset. If you split rent with someone, and you don't settle it all immediately, that's also an asset or liability. If you do any independent work, double entry lets you realize that when you do the work, and then it's waiting in your receivables until you get paid. Someone pointed out that you don't usually have multiple accounts, but it doesn't have to be just bank accounts - we're talking broker accounts, retirement accounts, savings, credit cards, etc., transfers to these things should not show as expenses. Additionally, you can get smarter and (just like a business) remove money from your available pool, and budget for future.
To be fair, some single-entry bookkeeping tools probably implement some of these features, but in that case they really are just trying to simulate double entry bookkeeping.
On a higher level, I suspect that double entry for individuals would be more popular among HN crowd that in outside world; software is area that slightly selects for people being a little anal about code quality, getting all cases / code paths covered etc., and that is similar quality to wanting to make sure your accounts are in order.
I'm not an accountant but I don't believe this is true. You can use accounts for anything you like. I implement a simple tagging system on top of beancount using accounts like Expenses:Food and it works just fine.
(Plug: I helped add “extension reports” to Fava recently, so you can now also make your own Jinja templates for your bespoke financial goals if querying+custom links isn’t enough)
I can easily [1] represent this as a split transaction where 50$ go out of my wallet's account. Half goes into Expenses:Gifts:Alice, half goes into AccountsReceivable:Bob. Once Bob pays me back, I transfer the money from AccountsReceivable:Bob back into Wallet.
[1] I guess I have different standards of "easy" than most of the population.
Not that it can't be used. I would be happy if this was taught in grade school more. But, I admit it is a rarely needed skill for most.
My checking account is pretty much just account "transfers" and an occasional transfer to my "Cash in Wallet" account for ATM withdrawals.
HOWEVER-
Let me share that beancount actually has the most extensive and flexible tagging and metadata system of any accounting software I've used.
In addition to the conventional hierarchical accounts/categories, with beancount one can attach to transactions- and query with beancount's sql- both:
* arbitrary single value labels, like tags
* arbitrary name-value pairs, like metadata
The flexibility is truly a game changer.
Double entry is for audit ability and balancing the various financial statements. It ensures they stay in balance.
If anybody is interested, the code is open source:
Backend: https://github.com/0x20/backtab
Frontend: https://github.com/0x20/tab-ui
I'm not going to explicitly link to the data but it shouldn't be hard to find if you want to see it
For categorizing new transactions I found that regex matching and doing the rest manually works for me (takes me around 20 minutes every month)
Not necessarily a good idea in every case, but if it's "just data" in the Python config file, you could make the Python config instead slurp in an actual data file of your desired format (YAML, TOML, whatever), and then transform it into Python data structures as needed.
I'm also maintaining an "awesome" resources list for Beancount here - https://awesome-beancount.com/ , in case it's helpful for others.
Fail
I've thought of starting an open source plaid alternative, scraping webpage information, but dealing with sensitive information and the banks changing undocumented interfaces have scared me away.
Would you consider taking up the open-source plaid alternative? I've talked to someone who shared some great ideas with me how it can work. We can work on it together.
For USAA you need a military angle to get in. My dad served in the Army, so that was enough. If you have any close relatives that have served, you can get an account.
For personal finance on Linux, you may find Moneydance more user-friendly: http://moneydance.com/
Maybe because the author found out about GnuCash today and wanted to share? https://xkcd.com/1053/
https://www.npr.org/2019/05/15/723715402/episode-407-a-mathe...
https://www.accountingcoach.com/accounting-basics/explanatio...
Concurrency and finance are difficult to mix, at least for some types of tasks.
But I appreciate your suggestion anyway. I think Prudent looks very elegant from a UI perspective -- 100x more elegant than GnuCash, for example. And it ended up stimulating me to think about a possible text/command-line based financial solution for SMEs. That would be great in many ways. For example, imagine something like IntelliSense working on top of a workflow.
>Create expense of $39.99 paid to Staples on 6/1/2019
>Show me expenses this month
Well, I believe design and implementation of such solution would be enormous given all the processes and situations that would have to be covered and forethought, but the end result would give so much agility to end users that I believe it would compensate the effort.
Want to import bank data? Well, you DO have to export the CSV manually from the bank, but then you can code something to make your financial reporting do exactly what you want.
Need graphs or reporting? MS Excel, well, excels at that.
Want to munge the data in a special way? Easy to do with formulas, coding, excel builts-ins, or some combination thereof.
Want to pre-process data before you suck it into a finances program? Write an external munger that exports to a .txt file, and then link an Excel Data Range to that .txt file.
I wonder sometimes if I have blinders on for choosing Excel, but hey, it works. And since I like coding, it actually makes doing finances kinda fun.
If I was going to use Excel, I'd store the transactions in a real database and export to Excel for reporting.
I would not want to use it for personal finances though. As others have said, it can be difficult to navigate.
But I do the accounting for my company using a SaaS because it knows everything about local tax laws (deadlines, online filling...).
I agree it's a bit difficult to navigate, though once set up there's not too much navigating new territory.
While it was working, i loved it.
I would think that anything related to transaction records specifically should not have an "undo" feature, or if it does, it is recorded as part of the transaction.
It's a silly scenario perhaps, but I'd not want to pay someone, record the transaction, then "undo" that I had payed them.
1. Accidentally deleting an old transaction
2. Accidentally modifying the value of an old transaction (and not realizing which transaction)
3. Accidentally overwriting the payee/notes of the transaction.
The list could get very long, but basically: "Accidentally" anything. I think it's even more likely if you are dealing with downloaded transactions.
It's happened a number of times that I am entering perhaps 10 transactions into it, and I screw something up. My only option is to quit and restart everything.
If gnucash doesn't do that, I'd consider it disqualified for any kind of accounting.
Real accountants may be very diligent. The average user (even tech user) is going to make tons of mistakes while entering data. I've often found when reconciling accounts that I put a transaction in the wrong account and I fix it.
It's fine if that's automated, the point is that it's recorded in the first place.
(OK, I misspent my youth as an assistant to an accountant. With actual hand-written ledger books. Maybe I am super-picky about these things :)
Sounds like back in the days you were not aware about dynamic allocation and only had record[10] some fond memories
At the moment I use waveapps.com. It's not open source, but it's free. From the outside, it looks like it's for businesses, but once you create an account, on the top-left you can toggle between business and personal!
EDIT: Apart from that, AMA using GnuCash with SKR03.
I would advise to start with a spreadsheet and then move to custom accounting software after you are used to keeping track of numbers.
money_in_account * exp( interest_rate/12 )