Bookkeeping

Posted on 2025-08-29 20:00 in tools • Modified on 2025-11-11 11:10 • 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. It provides a simple install on all major platforms and gives users a point-and-click interface to work with.

I found it helpful to just start experimenting. Start with a basic suggested Chart of Accounts and start adding transactions to journals. See what changes, compare totals with bank statements, try out different reports and try to make sense of the numbers. As I gained more experience, I started customizing the Chart of Accounts to my needs and liking.

Starting over is always an option! Simple restarts can be done at the end of a month or at the end of a year. Be sure to keep your old files in backup so you can look back at them. This can be like a trip down memory lane: seeing a major purchase, or finding out how much money you have actually spent over the years.

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, in which case 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
  Accounts Receivable*
  Prepayments*

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:Accounts Receivable (Debiteuren) is for invoices sent to customers but not yet payed.
  • Assets:Prepayments contain subdivisions, one for each purpose; I use this for payments to utilities like water and energy.

On the Liabilities side of the balance:

Liabilities
  Accounts Payable*
  Credit Card
  Mortgage
  Value Added Tax
Equity:Opening Balances

Notes:

  • Liabilities:Accounts Payable: these are either unpaid invoices or invoices on an ongoing payment schedule and thus only partially paid. If on a payment schedule, I prefer to put these liabilities in a separate account.
  • Value Added Tax: for businesses these accounts record the amount of tax collected on behalf of the tax office. These amounts will need to be transferred to the tax office, usually on a monthly or quarterly schedule.

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 from. Alternately use tags to clarify origin. Filter by account, date, tag and/or payee to get more finely grained reports on your inflows.

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
  Unknown*

Notes:

  • My Expenses categorization has quite a fine granularity. I sometimes struggle with keeping sufficient generalization

  • 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.

  • Expenses:Unknown: I use programs to classify transactions. These programs use a matching system to map a (bank) transaction to an account in the Chart of Account. If no match is found, the transaction uses this account. Whenever I see it appear in my reports, I need to add a further classification to my data file.

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.