Having tried a couple of different accounting/budgeting applications, this is what I always end up coming back to. As it just works when it comes to keeping track of finances.
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/
A few years ago, I managed to add a new report to GnuCash (specifically, an invoice format requested by a consulting client), but it was difficult because I couldn't find documentation on the application-specific APIs. The Scheme part itself was easy and a great choice for this.
If you’re handy python, check out its python api. Another method is to have gnucash store it’s data in a MySQL database, and query that directly. But I agree that having more powerful reporting built would be nice.
I've been using GnuCash to keep my consulting books for 10+ years now. It does dual entry well, generates pretty invoices, and has never given me any trouble. It's great software. Didn't expect to ever see it on the front page of HN though...
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.
I spent some time thinking about this problem recently (after also discovering beancount) and kind of concluded that double-entry accounting doesn't really work so well - as commonly explained - for individuals.
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.
I hear you there, tools like Mint are more than sufficient for most people, however, it's not about how complicated are your finances (having multiple bank accounts, etc.), but whether you actually want to have a clear picture of your assets.
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.
> the actual "accounts" should represent places money can actually go to or did go to
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.
Agree, and if you don’t like the account naming changing it can be a simple cut-and-replace ^h operation. Beancount also supports hashtags on transactions if you need (e.g.for certain events like vacations)
(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've actually found double-entry bookkeeping really useful for personal finances. Let's say I transfer money from one financial institution to another (say, a bank to an investment firm). With double-entry, I can track and reconcile both sides ("legs") of that transfer: one positive, and one negative. And they have to match up for things to balance.
Real-world example from my Gnucash file: I buy a present for my friend Alice for say 50$. Another friend, Bob, wants to share half of the cost and promises to give me the money next week.
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.
My credit cards are each an account that I transfer money to each month. Most of my purchases go on one of my cards and then get paid off each month. CC transactions match that CC account and a category like Expenses:Auto:Gas.
My checking account is pretty much just account "transfers" and an occasional transfer to my "Cash in Wallet" account for ATM withdrawals.
Have gone through a similar thought process- and don't disagree with the point that double entry specifically is not that helpful for individuals largely tracking cash-
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:
In businesses, accounts represent the what (sales, salaries, rent, hotels, etc). You’d use another dimension altogether for business units. But they all have same chart of accounts. This is so it can be viewed in a consolidated way.
Double entry is for audit ability and balancing the various financial statements. It ensures they stay in balance.
I have the exact opposite experience. Anything that doesn't do double-entry (at least under the hood) is -- eventually -- insufficient for recording the nuances of variation in personal financial needs.
What in the world are you talking about ?! Please consult a CPA and buy a financial accounting textbook. Like in physics every has an equal and opposite transaction.
Beancount really is wonderful. I use it for my personal finances, but I also moved my local hackerspace (Hackerspace.Gent) to use it to keep track of everybody's bar accounts. The backend uses beancount as a library to manage stock and balances, so that the data has a single point of truth in the (public) ledger. We can then always run easy analysis using the command line tools to see how much profit we made from events, which categories of things sell well, etc. Further, the metadata support allows us to keep certain preferences (like who the members are, how they prefer their name displayed, etc) all in one place.
If anybody is interested, the code is open source:
Have you seen Beancount-import (https://github.com/jbms/beancount-import)? It provides a web interface just focusing on the import and transaction reconciling/categorization piece, and includes a decision-tree-based classifier that learns as you go.
I gave it a go based on your suggestion and I found it a horror to set up (it forces you to write a new importer just for it!?) but it's quite nice once you do.
Yeah, I haven't tried it with an existing importer, but I can't say I'm surprised. FWIW, it does work pretty well in combination with finance-dl (same author): https://github.com/jbms/finance-dl
+1 for beancount. I started with gnucash only to discover it doesn't play well with multiple currencies. Then, I looked into ledger and it was much better but I realized I would like access it programmatically. Finally, I settled on beancount which has an amazing UI, has sql-like query utility and good python bindings to extend it in any way I want.
For categorizing new transactions I found that regex matching and doing the rest manually works for me (takes me around 20 minutes every month)
> 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.
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.
Being a beancount user along with fava and also ledger-cli for managing accounts. The solution to your issue is simple, account Expenses:Grocery will record all the transactions related to grocery. In journal entry there is a field for payee where you can record counterparty and on top of that each entry can have multiple tags. You can tag them and then generate report based on those tags. So you can have a simple accounting report where all the Expenses:Grocery involving a specific tag or a counter party. Fava and beancount query makes it very easy to generate. You can check this mailing list thread for narration and payee in entries.
https://groups.google.com/forum/m/#!topic/beancount/tJrA2n9L...
The setup portion can be streamlined using pyenv and pipenv. I've migrated to a few computers over the last several years (3 Linux and 1 Mac), and had beancount and fava running within a minute on each.
One of the biggest shortcomings is it doesn't download bank information reliably. If you're lucky, your main bank supports OFX and the plugins work for you. It doesn't work for me.
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.
I struggle with the same thing. I'm the author of My Budget, and struggle to find OFX credentials to pull transaction details back.
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.
Yep, loss of OFX was the impetus for me to finally leave Capital One. They gave me the runaround for a week then admitted they turned off OFX, after trying to blame my software (Moneydance, which I highly recommend).
USAA. Chase does, too, though I only use them for credit credit cards. Citi the same. I also know that E*Trade and Schwab do.
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.
GnuCash has been around for over a decade-- why post it today? This isn't even a link to a recent release announcement with notable new features. The last release was back in March.
For personal finance on Linux, you may find Moneydance more user-friendly: http://moneydance.com/
The NPR planet money podcast also had an interesting episode from 2012 that recently replayed that talked about the origins of the double entry accounting scheme. Pretty interesting history that I didn’t know.
Somebody should step ahead and create a "cloud version" of it that would allow multiple users to collaborate from their desktop installed GnuCash. It's just an idea from an old user.
With Prudent, you can combine multiple ledger journals from different users (maybe share the journal text files via Git) and obtain aggregated financial reports based on the combined ledgers.
I use Linux, so Prudent is not an option. And even considering its workflow, it would be impossible for my users to adopt it. I have a retail business in which I employ non-tech people.
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.
After doing accounting for my business, a medium-sized non-profit, and our personal finances, I keep coming back to Microsoft Excel. Using someone else's accounting software feels like trying to do an Iron Man with a straight jacket. At least with Excel, you can code VBA/C#/formulas/etc. to your heart's content and make it do exactly what you want. That's what I love about it.
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.
You're brave. I struggled with Excel for a year before giving up and moving to Ledger/SQLite, which was a night and day difference (and I had an easier time scripting).
If I was going to use Excel, I'd store the transactions in a real database and export to Excel for reporting.
I have been using GnuCash for about three years after Quickbooks Online substantially raised their rates. It's a great free alternative for a one person company.
I would not want to use it for personal finances though. As others have said, it can be difficult to navigate.
I do the exact opposite: I keep my personal finances in GnuCash and I absolutely love it. It really changed the way I perceive and spend money. It took me about a day of learning basic accounting and watching Youtube videos before being comfortable with the software.
But I do the accounting for my company using a SaaS because it knows everything about local tax laws (deadlines, online filling...).
I'll offer a different view. I find GNUCash great for my personal finances. It's not too complicated I find, easy to navigate and works on MacOS and Linux (Which I need personally). Before this, I tried a few and all required paying or something like BYOB which I found amazingly complicated and I just couldn't wrap my head around it.
I got my Dad set up using GnuCash several years ago when I transitioned him from using an ancient version of Quicken on Windows 3.1. He's in his 70s and uses it to manage his small business finances. Although the dense menus can make it hard to find what he's looking for (and for me to help him), he's been pretty happy using it for just basic accounting and creating monthly/yearly reports.
Good to see that it's still being developed.
Switched to GnuCash about four years ago after Quicken forced me to pay for a new version of their software. I have very complicated personal finances (churning, crypto trading, etc.) and double-entry is the only possible way to keep an accurate account of my cash flow and net worth.
What were some of your favorite resources for learning it? I've tried a few times to sit down and learn it, but always ended giving up because some of the things I thought should be easy were just so obtuse.
I had issues with the save files corrupting them selves, and it happened so often that I had to stop using it. I suspect it was me inputing an invalid date or something but it was quite frustrating to come back after a day, or week and have progress wiped out.
I'm curious under what situations you'd use Undo/Redo.
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.
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.
Not an accountant, but that would suck more than not having undo.
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.
Ah, personal finance tracking. One of the first programs I wrote as a teenager was to track my expenses. It was written in Turbo Pascal and only had room for 10 entries per month. Then I found GnuCash and even later ledger-cli. Unfortunately, I lost about 10 years of my GnuCash files when moving data from one notebook to another. I searched old backups but the data is gone. It would be interesting to run some queries over the data.
I've used GnuCash, but the UI is very ugly (programmer design—disclaimer: I'm a programmer) and it doesn't work over the web.
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!
Hmm, I suppose spreadsheets would work, but I'd like if there was something with a friendlier interface for seeing how much someone owes me after a certain time, and with partial payments.
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/