GnuCash Tutorial and Concepts Guide
gnucash.org
gnucash.org
For one example, imagine an Amazon order. You order 3 things, partly paid for by CC card rewards, maybe a gift card, and a CC charge for the balance. With transaction splits, it's easy to put each thing you bought into the appropriate expense account with the correct cost, reconcile the CC charge correctly when your statement comes and you import the OFX/QFX data, and track your gift card balance. In GnuCash, that's all one transaction, with many splits. For expensive durable purchases, I'll sometimes also go and add the serial number to the text of the transaction split from when I purchased it, for lightweight home inventory without a separate program or redundant data entry about what/date/cost.
Compare to a simpler personal finance program that just imports the CC charge and lets you tag it as a single expense category (or takes whatever the CC company says the category is), and if you ever need any more information, you're stuck with keeping a separate program or spreadsheet up-to-date.
(You could use GnuCash the same way as the simpler personal finance program, but GnuCash has more powerful features that are there when you want them.)
Most of my GnuCash transactions are actually split transactions for this reason.
Yes, that is where I was going with my line of questioning. What is the point of all that separating work if you don’t care about it not averaging out?
Obviously, you do you, it’s just funny to me.
My situation has been different than that, in that I wished my GnuCash setup didn't incidentally quantify some categories of expenses so well. I've adjusted some categories since then. (Though it did make me think of a line of awful dialogue, for the worst rom-com jerk character ever.)
At the end of the month we still both get a pretty solid idea of our individual expenses no matter who actually paid of an item. For instance my expenses for the month are ¥2200 while last month it was ¥2500, seems like useful data, right? Who cares if one of us made a better deal than they should have on the sofa while the other consumed a few grams of rice more than other?
I am surprised this inaccuracy makes you question the reason of tracking personal finance.
Edit:
> What is the point of all that separating work if you don’t care about it not averaging out?
Maybe that's the source of the confusion, our finances are already separated, there is no extra work separating expenses. There is extra work for expenses we have in common like the sofa or groceries, in which case we do half and half even if that's sometimes inaccurate.
This is HN. Be careful or someone will build a startup on that.
We just derived the ratio once and never updated it - neither of us were particularly invested in losing, gaining, or tracking our weight - so it seemed an OK proxy metric to handle the fact that we ate noticeably different amounts.
A few years later we've started to consider the fact that we might both be on the spectrum :)
Is that an American custom, going as far as accounting for split groceries runs ?
https://www.avalara.com/blog/en/north-america/2023/07/sales-...
https://www.irs.gov/instructions/i1040sca#en_US_2022_publink...
https://www.irs.gov/credits-deductions/individuals/use-the-s...
Fast forward a decade and we still do it this way. We must be doing something right because we never argue over money or similar topics. Why change something that works?
You Need A Budget stands out as an amazingly useless piece of software that also, for some reason, comes highly recommended.
I’ve found it to be incredibly useful. And prior to that I used ledger for a few years. Ledger was great, but personally I find YNAB to be more useful because the budgeting features are the focus, not the accounting.
I don't think YNAB philosophy would have you tracking reward or gift card balances, so you'd only track the amount that hit your CC, in this example. In that regard, YNAB certainly isn't a tool to track all of your monetary assets.
Is it common to split a single transaction across multiple accounts?
CASH -$7
LOOSE CHANGE +$0.36
STORE +$6.64
Loose change is an account that represents at least as much money as there is in change in my house, pockets, cars, etc while cash is an exact tracking account.Since my cash expenditures represent well under 1% of my total spending, it wasn't worth tracking in detail.
YNAB is basically completely useless as far as anything beyond an extremely extremely rudimentary single user budget.
I’ve never had YNAB double up a transfer.
Also, capital gains - not sure what the issue is there either. Add a transaction and categorize it to “Ready To Assign”. Works great.
Took some time to write the transaction parsers, but updating everything takes about 5 min/month now and I have a complete financial picture without sending any data to something like mint.
BEGIN{
FS = ",";
}
{
if(FNR > 1){
date = gensub(/([0-9]{2})\/([0-9]{2})\/([0-9]{4})/, "\\3-\\1-\\2", 1, $1);
print date, $3
print " liabilities:chase"
if($5 != "Payment"){
print " expenses:" $4, " $", $6 \* -1.0
}else{
## This exists because I have an offset in the account
## I use to pay the card with. If the amount in my residual
## account != 0, I know there is something wrong
print " liabilities:chase:residual $", -$6
}
}
}
Suppose this script is called 'parse.awk', you would then run:
awk -f parse.awk myfile.csvI've been doing this for a couple years now and so far I haven't had file formats change on me. Most of the complexity I have experienced so far is when the regex to parse line-items into the appropriate ledger account is non-trivial. It started off as a way for me to learn awk and double entry bookkeeping and somehow turned into something useful.
This is the way.
“Every financial system is broken in its own way” (ex-coworker who had worked in financial services)
Edit: Missed that his is about ledger-cli, not gnucash. Sorry.
I then use `fava` (a beancount web UI) to fix mistakes, and have another piece of code (this time written in Go, but could be Python/whatever as well) that takes transactions that are generated from my brokerage account and enriches them with data parsed from my brokers' PDF reports (since the FinTS/HBCI info doesn't contain stuff like ISINs or taxes/fees separately).
This is for my personal finances, but I used the same system (minus the brokerage stuff) when I managed the finances of a hackerspace in the middle of Germany for a few years.
At one point, there was a decent standard called "OFX" which financial institutions were supposed to support. It let you use an app like GNU Cash or QuickBooks which could automatically connect to your bank account. That died apparently and was replaced by some API/standard called "Open Banking". It's shittier in every way since it seems to require a middleman now (like Plaid) whereas with OFX you could just query an endpoint easily.
For my own accounts, I don't have time to deal with reconciliation, so I just do csv -> paste into spreadsheet -> have sql queries that sum things up
If it was possible for an open source application to support Open Banking (it isn't), that might now be different.
https://lists.gnucash.org/pipermail/gnucash-user/2020-March/...
In another context this also happens with CRMs where marketing and sales people end up using spreadsheets and from time to time uploading information to the CRM with some push.
Strong disagree on the unnecessary part, as far as I know there is one correct way to count money and a billion wrong ways.
Fortunately the correct way, double entry accounting, is actually fairly easy. People were already using this method 400 years ago. It also scales down very well to the level of an individual and scales up to the level of a megacorp.
It's a skill that takes 30 minutes to acquire and pays dividends your entire life.
Not everyone has the same level of financial education, nor the same intuitive mental model around what's credit and what's debit, and what goes where.
There's also a way for GnuCash to sync data with some financial institutions automatically, but I prefer to save the data interchange files long-term anyway.
Sounds like this UK Open Banking isn't entirely an open standard for open interoperation, but maybe a little closer to a cabal?
The latter would be terrible. The former seems to be more and more common.
I was using Mint connected to my RBC account and loved it, but it stopped working forever about 2 years ago.
Now I just do it all on spreadsheets which isn’t as bad as I thought, but Mint was still nice and actually pinged me when I overspent in a category. Now I have to remember (taking away cycles) that I can only spend $X, Y times a month for lunch, beers etc.
That's correct, "open" is a sham, there's nothing open about it. You need to either have regulatory approval or piggyback off a gatekeeper's (TrueLayer, Plaid, etc) regulatory license to even get access, and when you do, you realize how terrible the data quality is and that it's near-impossible to build anything serious on top of it.
The co-founder of a business I consulted for previously recently wrote a nice summary of the issues you'd get if you wanted to embark on that path: https://www.adamjgo.com/p/the-open-banking-non-standards
Open Banking is implemented as a set of REST APIs using oAuth offered either by the banks directly (if you have the necessary regulatory approval) or by a gatekeeper such as TrueLayer/Plaid/etc (and I believe you can piggyback off their license, so no regulatory approval necessary).
Consuming oAuth APIs relies on guarding a client ID & the associated secret which would be impossible in an open-source app (or any client-side app for that matter, since extracting those is merely a reverse-engineering problem), therefore out-of-the-box Open Banking support is impossible.
However, nothing prevents them from developing the integration and let the end-user provide their own client ID/secret from their own accounts, and I believe most of these Open Banking providers have a free dev plan that can nevertheless connect to real accounts and would be enough for this.
It's almost what I imagine client-server Open Banking could have been.
There's also the EBICS protocol, but that is more for B2B, server-server communication I believe.
That implementation leaves no room for gatekeepers or other busybodies so there's no way it would be in this day and age.
Not that that would change anything, I doubt banks would give individuals access either.
What I really want is some system that lets me just click "Import", and it goes out to my various CC/bank sites and pulls in the data automatically. Or, imports on a schedule 2x/day or something. The thing I want to avoid is having to log in/download/import these files manually from like 7 different sites. I want that because I handle this stuff on a random basis, when I have a few free minutes, and the time it takes to get my records up to date the manual way is about the same amount of time I have overall to do it. And I find reconciling everything on a fixed schedule, say at the end of the month, is much harder than doing it on the fly, because a lot of times I will not remember what a charge was even for if I wait 30 days to process it.
I have recently been thinking about building my own program that implements double-entry accounting in a more approachable form for individuals. I’m not sure if pure accounting concepts are ideal for the average person for keeping track of their budget like how they are essential for businesses. My bias says yes, but perhaps a greater amount could be handled in the background to present a more intuitive interaction for those unfamiliar with accounting concepts. Currently, I prefer using ledger[2] to GnuCash, but I appreciate that both exist.
[0] https://www.winstoncooke.com/blog/2023-10-20-a-basic-introdu...
I dont see any good way to manage this stuff, maybe just by monitoring what goes in and out of a main account. I would love if there was a protocol that all these services supported, but there sure as hell isn't.
At that point, does something like GNU Cash become just another inaccurate representation of in, out and have?
Edit: Maybe you just update it once a month from statements?
In my experience, this is the only reliable way. Most banks also support exporting transaction data as CSV, but the data quality is usually too poor for automatic account assignments.
I do things like that.
All those accounts can be represented. Many of those things are Scheduled Transactions.
When you Reconcile a statement from a bank or something, it'll even prompt you for recurring interest, in case you don't already have a transaction for that (because, e.g., the interest transaction was already there when you imported the OFX/QFX for that statement).
Investments like stocks and funds are tracked by shares, you can easily enter dividend reinvestment, and you can pull data for the current value in whatever primary currency.
You can also mix many world currencies in the same file, and see the totals according to exchange rates, and you can even define your own units and exchange rates for some purposes (which I've done in the past for metals and cryptocurrencies).
You can enter transactions as you go, and when you periodically Import, any transactions you didn't enter will be added. You can check this when you Reconcile a statement.
I use a phone app (there are many out there) for my needs instead of desktop software, but in my case I log every single bit of income/expense ASAP - if I buy groceries, I pull up the app and categorize it (takes like 20 seconds). Sometimes my bank is kind enough to have their phone app alert me of new changes in account balance, but that's really flaky, so I check the balance on their website/app occasionally as well and log the changes.
Since I log just my own data, the approach scales wonderfully well (since it doesn't need to scale much). If I ever want to have a look at more data, I export the statements from my bank and either just open them up in LibreOffice, or maybe do some light Python code.
Once you've entered a transaction once, its autocomplete handles those going forwards so entering a new transaction is as quick as typing the first couple of letters of the shop name, pressing tab a few times, then entering the amount.
Is it? When I last looked at GnuCash (which, admittedly, was like 7 years ago) you could not setup automatic categorization of transactions. You couldn't say, while going through imported transactions, "Every transaction where the payee is utility company should come from the Utilities account". The idea was that GnuCash was using some kind of Bayesian scheme to learn how to categorize your transactions automatically, but you had to input your transactions manually 3 or 4 times before it started working. Which, for me, seemed like a huge waste of time since 90% of my transactions could be automatically categorized by simple keyword matching against the payee or description.
Now I'm thinking if there's an easy way to just give all transactions with metadata to chatgpt and let it tag everything. This would be great!
I’ve had everything balance down to the penny for 20 years now. If you have some attention to detail and make it a habit, it’s not really that difficult or time consuming.
It’s also kind of like paying cash. It makes you more aware of what you are spending.
It's not for everybody, but I want to see every transaction.
I do this by going to the website for the bank account or credit card and looking at the Activity section (or whatever it's called).
I know that I'm weird. This is not for everybody.
But we do not do a lot of micro transactions, so it still works.
Once it doesn't, I'm hoping that the cards and bank accounts we use the most will export the stuff into a format that GnuCash can use.
The key for me and my wife to get it to work was getting into the groove of entering your transactions and reconciling daily. It is a bit obsessive, but we've been able to completely overhaul our finances with it.
Basically every morning I start my day by opening up YNAB and my bank, and for our personal finances, just making sure everything matches. For my business finances, I actually manually input all expenses (from receipts, invoices, etc) then once a week, I will go through and reconcile with online banking (I usually miss a transaction or two).
For unlinked credit, we just create a budget item for that card and we try to budget them out properly, but it isn't as easy, and we lose tracking into the spending.
Process was pretty easy. Some entries manual or automatic during the month. At whatever period you want download OFX/QFX from bank accounts, CC accounts, etc. and import. Or CSV files or whatever you can get from your banks. When you get statements, reconcile those accounts.
Double entry is the only way to really keep track of things and catch errors, but you control granularity so in some sense amount of work. So in your scenarios, you would have expense accounts for interest fees per bank, loans, income accounts for different sources etc. the number of accounts you have is not a reflection of the institutions (eg banks) but the the things you want to keep track of.
If you want things accurate, you pretty much have to add a reconciliation step somewhere, tools like gnucash will let you see what has been reconciled and what hasn’t yet.
GnuCash is made for common people, my wife uses it and loves it.
How much time you need to spend to do a good job can vary widely. It depends on your data sources, your tolerance for error, and how well your use cases match up with your software's assumptions.
Balance that cost against the benefits, which are subjective -- how much do you value easier tax preparation? How much do you value peace of mind from having your financial state clearly articulated? How much do you value understanding your in and outflows, making a budget, monitoring activity for potential fraud?
How can you NOT keep track of “keep track of your credit card(s), bank account(s), possibly your significant other's as well, subscriptions, fees, automated payments, cash in/out, taxes, varying income, investment returns, savings, balances on platforms you may use like wise/revolut (for travel) in different currencies, automated "fees" like interest on savings, loans, which may change every now and then, etc?”.
There’s a lot of people who would absolutely panic at the thought that they have all their money flowing around and they can’t even keep track of it.
Also, there’s an argument that if your finances are so complex that you can’t keep track of it (and youre not wealthy enough to pay someone to keep track of it) maybe that in itself is the problem, and that you need to simplify your finances.
Also, is it really that hard? Is it harder to note that you spent money buying something, or transferred money internationally than to actually spend that money buying the thing or transfer it internationally?
And recurring expenses are fairly easy to keep track of with even the most legacy software solutions.
I use tags to categorize recurring charges and on the 1st of the month I will sit down and pre-enter all of last month's recurring charges into the next month, as well as check the statement to make sure that last month's were really what I expected them to be.
I enter new charges on the day that they happen. It's 5 minutes a day instead of an hr or three at the end of the month.
What I end up with is that I know where everything has been going, and I have a good forecast for where it's going to go in the near future. If I need to answer a question like 'how much of a rent hike can I tolerate' or 'how much car can I afford' I have a good basis for deciding it. I also have a single 'available spending money' number that I can refer to if I need to, but honestly im a casual minimalist and not buying things is a great way to keep your finances afloat with minimal stress.
You can save the mapping of columns <-> GNU Cash fields for each one, and it takes me about 10 minutes for my most heavily used CC account. GNU Cash supports guessing the balancing entry, which speeds things up quite a bit.
The only issue I have is that you can't enter splits from the import dialog, so I leave split transactions unbalanced then go through those manually. My only regular splits are my mortgage payment (Interest, Principle, and Escrow) and deposits (I usually deposit multiple checks at a time, but they show up as a single entry on the CSV I get from my bank).
At the start, nothing more in the app. She would be happy to do the data analysis using her laptop.
I was thinking about a stupid CRUD app with an SQLite database, but I do not want to reinvent the wheel.
If some of you have ideas, we do not need banking integration.
Just took the opportunity to use it as a personal project to experiment with rust and htmx.
1. Double-click on "Expenses" -> "Groceries" in the account tree.
2. In the blank entry that appears at end end of the list of earlier transactions, edit the date if necessary (it will default to today's date).
3. Next to that date (click or press Tab), enter a description, such as the shop name. With text completion.
4. Next to that, enter the payment method (with completion and default). (Note that this will also add the transaction to the GnuCash account for your bank account, credit card, etc.)
5. Next to that, enter the amount.
6. Press Enter to commit the transaction.
You can also leave some of these accounts open as tabs, if you want, rather than find them in the account tree each time.
- It's a document based app, the file format is open (JSON zipped), so you can store it on iCloud Drive, Dropbox or anywhere else, thereby giving you and your wife access via cloud sharing.
- No Signup, No Account, No Ads
I've been using it for a few months to track all my transactions and account balances.
It's still a WIP right now. Planning to add a few features more before making it available on Apple App Store.
Ticks most of your boxes. Nothing fancy, but gets the job done.
1) Imports from our credit cards automatically or from a CSV/Quicken/etc. file
2) Supports entering transactions manually when you can't or don't want to link to a bank
3) Supports reconciliation of the actual account balance with the in-app balance
4) Supports budgeting, but if you just want to track categories then just assign the amounts you spend to each budget at the end of the month and the system will be happy.
Most of the limitations I run into relate to the types of goals you can set.
Before I gave up on YNAB as being complete shit:
-you had to email support to unsubscribe. What the fuck is that?
-it didn’t support carryover surplus properly, which fucked your budget every time expenses carried over due to, for example, holidays, or just cause you paid on a different date.
-it didn’t properly support multiple physical accounts with transfer requirements
-it couldn’t be made to understand that certain postings must come from certain accounts
-it couldn’t split postings to multiple accounts (it could transfer raw amounts on a schedule, but that’s a bullshit hack, and their scheduling options are shit tier)
-it had no, non-bullshit hack way to represent annual payments which should have a monthly accrual to save
And on and on and on and on.
It’s clear that the developers of this app simply do not have even a rudimentary understanding of a plethora of accounting concepts, or even a basic understanding that different transactions have different period requirements, and it leads to an app that is simply impossible to mangle into working for anything beyond extremely basic budgeting that must be monthly based.
- It rolls over surpluses, it doesn't rollover deficits. This is documented and an intentional design decision to get people to "cover" the money. You can roll over negatives in "Ready to Assign" and in Credit Card balances, if absolutely necessary.
- I don't know what you mean about multiple physical accounts with transfer requirements.
- Without knowing what "certain postings" are, I assume you're referring to the fact that Payee association is only based on the text in the transfer and no other signals
- It can split postings, I'm not sure what you mean. You can have a transaction that is subdivided as two transfers to two accounts. You have to use the category split button.
---
I do agree that there are some things it's missing, but the only one I've found interrupts my flow is the lack of flexibility in goal setting (some times of goals can only recur monthly).
If you want to do investment tracking, I don’t think it’s the best for that.
A well done spreadsheet is way easier to handle in the long run. For a company or someone with complex finances it may be the right tool but it's not for most people who just want to track their income and expenses..
There are also many services that connect directly to your banks accounts, retrieve the data, categorize everything and shows you fancy charts with everything you need.
When loading a CSV, GnuCash lets you map each column to the GnuCash-equivalent field. Column mapping configurations can be saved for later reuse.
One nice addition is that you can select columns that contain the _accounts_ related to a transaction. It's pretty easy to have ChatGPT write a script that takes a CSV and categorizes transactions into accounts using some matchint logic.
Splits are a bit trickier as you have to use multiple rows, but doable if you enter a sample transaction first and export it to GnuCash CSV format to see how it should look.
Someone on the Beancount thread explained his workflow using tags link transactions to IRS form entries. I would like to try the same on GnuCash, but haven't yet figured out whether tags even exist (haven't had the time to check since)
Got the idea from https://money.stackexchange.com/questions/91029/gnucash-tags...
Hosting Expenses
[SomeTag] Hosting Expenses
It's nice because its compatible with all the built-in reports, including graphs, though it takes a little while to configure presets for them all filtered by the right accounts.Also curious to hear if anyone knows a better way.
This can't possibly be right... If I'm going on holidays, I don't want to have to open a new "holidays" account; holiday expenses are still expenses. If I accepted this, and I wanted to separate holidays in 2021 from holidays in 2022 by using different accounts, you can imagine how many one-off accounts id have laying around. No, this is confusing the concepts of an account as an accounting concept, with the concept of a generic aggregation segment.
I don't use tags, but GnuCash does have some built-in reporting features for tax forms.
1. You have to have assigned an account to a tax field (Edit -> Tax Report Options). It's what controls the "tax-related" checkbox when you edit an account.
2. Then you can go to Reports -> Tax Schedule Report & TXF Export to generate a report for the last tax year.
Hopefully this helps!
For personal finances, I use Tiller HQ. It's a wrapper around plaid or yodlee and automatically feeds transactions into Google Sheets or Excel. I like it because I own my data and can easily manipulate it enmasse in familiar ways.
Note the full API may be accessible via a cli interface.
The above work will be merged hopefully soon.
I have tried beancount (like ledger but in python) since, and I'm all into plain text accounting since. Also the UI of GnuCash always felt clunky and a bit incomprehensible at places.
The plaintext alternatives like ledger and beancount seem like they lend themselves more naturally to version control.
It's still an early concept though, but at the end of the day it's a vscode-like experience so aspects like git are just an extension away.
Look for files like:
<yourgnucashfilename>.<timestampnumber>.gnucash
<yourgnucashfilename>.<timestampnumber>.log
Also note that your GnuCash file is just a single gzip'd XML file, and not too big. You could store it as-is in Git, or you could have a script/filter to gzcat it first, so you could store deltas/diffs and maybe use less space.Lunch Money is a beautifully designed finance tracker / planner. And it’s also run by a lovely solopreneur who truly cares about the product!
I've used it, so I can tell you that there are definitely some very powerful features hidden away in menu items you didn't know were even there.
But the ledger UI, which you use all the time, probably blows away most software you've used.
(On the occasions I've thought "I should write my own", one of the first objections I think of is that it would take me a lot of work to make a UI that works as well.)
My biggest gripe is not with GNUCash but with the damn banks. The fact there isn't any API to download.u transactions is infuriating. My bank makes me go through so many clicks to download one file and I have many accounts to pull.
It's so frustrating to just simply get my data.
Also, the ofx format doesn't support splits. So there's simply no way to import transactions that are already auto-split (think interest charges).