Bookkeeping
Posted on 2025-08-29 20:00:00+02:00 in tools • Written by Arno Peters
Knowing how to Keep the Books is a skill, I believe, everybody would benefit from.
Double-entry accounting
Double-entry accounting simply means that this method accounts for every transaction where the money came from and where it is going. It makes "two entries"!
I highly recommend reading Principles of Accounting with Ledger in the Ledger manual. It very clearly explains the principles of double-entry accounting.
I have used GnuCash, SQL-Ledger, Odoo and Ledger. All these programs support double-entry bookkeeping and make it relatively easy to start with double-entry accounting. Of the programs mentioned, GnuCash is definitely easiest for beginners to start with.
Chart of Accounts
Every set of books has a Chart of Accounts (CoA). This is a hierarchical classification system for your money. How you structure your books is (in principle) completely up to you. Unless you own a company and need to comply with the accounting rules of your country, then there can be a CoA you will need to use for your company.
Here are a few general guidelines.
At the top level of most CoAs you will typically find the following accounts (with the Dutch equivalent between parentheses).
- Income (Inkomen)
- Expenses (Uitgaven)
- Assets (Activa)
- Liabilities (Passiva)
- Equity (Eigen Vermogen)
Depending on your taste Equity can also appear as a subcategory to Liabilities.
The goal of a CoA is to provide you with a way to quickly visualize the flow of money. It answers the following questions.
- Where does it come from?
- Income can come from an hourly wage, from a monthly job payment, from dividends or interests from investments. These all bring money into your system;
- What brings it with?
- Liabilities, be it a credit or a loan, produces a (one-time) income stream by financing an expense. It brings with it a legal obligation to repay at some later date and may include regular payments of interest;
- It also brings with it a means to exchange tokens for the necessities and luxuries of life: food, shelter, energy, transportation, toys, etc;
- What is the effect on my system?
- Money flowing in and out changes your Equity. Over a period of time this change is called a Profit if more money is flowing in than leaving or a Loss if more money is flowing out than in;
- Too much money going out relative to money coming in will present a problem at some later stage;
- A large inflow of money (inheritance, lottery winnings, some other financial windfall) can destabilize your system substantially much like a tsunami can wreak havoc on a coastline;
- Where does it leave?
- Expenses are things or services you buy. It's your cost of living: expenses for food, shelter, clothing, transportation, entertainment, etc.;
- Does it leave in a trickle or in a flood?
- What takes it with?
- When liabilities are obligations that a stream of money brings into your system, Assets are its opposite. They take obligations out of your system;
- Having money to solve problems takes away the incentive and imagination on how to solve a problem without spending money; it lets you play life on easy mode.
Example Chart of Accounts
Here is, roughly translated and slightly expanded, the Chart of Accounts I currently use in my own bookkeeping in Ledger (ledger-cli). I will use the same notation as Ledger uses to indicate deeper parts of the hierarchy by separating the parent account and the child account with a colon (:).
Account marked with * have a note further down with some explanation.
On the Assets side of the balance:
Assets Liquid Cash Bank Checking Bank Savings In Transit* Real Estate Investments Bonds Exchange Traded Funds Exchange Traded Commodities Shares Prepaid Invoices*
Notes:
- Assets:Liquid:In Transit: this account is useful for transfers between bank accounts. Each bank account has its own transaction log. If a transfer moves money to Savings when processing the Checking account, a similar transfer will appear when processing the Savings account. The interim account In Transit provides a parking space for the money in transit, recording when the money left Checking and when it arrives in Savings. It also accurately records the value date for both transactions as these can differ.
- Assets:Prepaid Invoices contain subdivisions, one for each supplier; I rarely use this category;
On the Liabilities side of the balance:
Liabilities Credit Card Mortgage Open Invoices* Equity:Opening Balances
Notes:
- Liabilities:Open Invoices: these are either unpaid or on an ongoing payment schedule and thus partially paid. These also have subdivisions, one for each supplier.
On the Income side of profit and loss:
Income* Wages Sales Rental Income Reimbursements Gifts Interests Received Dividends
Notes:
- Income: all categories within income can have subdivisions to clarify where exactly the money is exactly coming. For example, for Income:Wage I could make subdivisions for each employer. If I worked at First Company and later at Second Company, I would use Income:Wage:First Company, Income:Wage:Second Company.
On the Expenses side of profit and loss:
Expenses Personal Groceries Clothes and Shoes Insurance:Health Insurance Physician Dentist Hairdresser Taxes* Dividend Tax Income Tax Services Accountant Notary Banking Services Shelter Rent Interest on Mortgage* Insurance:Home Insurance Taxes:Municipal Tax Energy Water Furnishings Maintenance Gardening Expenses Accommodation Costs* Social Communications Phone Services Internet Access Devices Subscriptions Newspaper Streaming Services Eating Out / Cafe Entrance Fees Pets Veterinarian Feed Stuff Gifts Tips Donations Transportation Public Transport Car Fuel Rental Taxes:Road Tax Insurance:Liability Insurance Maintenance Parking Purchase Fines Toll Bicycle Plane Insurance:Travel Insurance Travel Expenses Studies Lessons Media Subscriptions Other Expenses Cash Differences* Payment Differences
Notes:
Expenses:Cash Differences: This is for small cash expenses without proper categorization, probably because I lost a receipt. It's to correct the amount shown in Assets:Liquid:Cash.
Expenses:Personal:Taxes: This category only shows part of the taxes I pay.
In other categories, there are also taxes paid. For example in Expenses:Transportation:Car:Taxes:Road Tax or Expenses:Shelter:Taxes:Municipal Tax. By coding the accounts this way I easily filter out how much taxes I pay in ledger-cli with ledger bal :Taxes:
Note that I can do the same for insurance with ledger bal :Insurance:.
Expenses:Shelter:Interest on Mortgage: payments of your mortgage usually contain a part interest and a part repayment. The repayment part goes to decrease the absolute amount in Liabilities:Mortgage and is not an expense.
Expenses:Shelter:Accommodation Costs, Expenses:Transportation:Travel Expenses, Expenses:Social:Eating Out, Expenses:Social:Entrance Fees: I use these accounts to record expenses for different aspects of vacations and outings.
Personal Experiences
Over time I have changed how my Chart of Accounts looks. I have changed the amount of detail, the number of top-level accounts under Expenses, reordered accounts. The Chart of Account I presented here is very similar to the one I personally use.
When starting out, keep it simple. Use less accounts and only add more accounts as you want to have more granular detail on your expense. Accounting programs have more ways to filter transaction than using only the account name. Filtering on description, date, amount can provide additional insight without complicating the Chart of Accounts.
When I want an overview of a vacation, I typically will put all transactions related to this vacation in a different ledger file. I can than create a dedicated profit and loss report for just this vacation. I will put this in an org-file and add a little section with the dates and the itinerary.