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.