Personal Finance

I manage my money using plain-­text ac­counting (spe­cific­ally, hledger; though the choice of tool is un­im­port­ant), fol­lowing a YN­ABish ap­proach. The four YNAB rules are:

  1. Give every dollar a job: my money is split into named cat­egor­ies, I have no “gen­eral sav­ings”.
  2. Em­brace your true ex­penses: large ex­penses (like a rental de­posit) are planned and al­loc­ated for in ad­vance, as a reg­ular monthly con­tri­bu­tion.
  3. Roll with the punches: if things aren’t working out, I ad­just the plan rather than lie to my­self.
  4. Age your money: I save more of each reg­ular ex­pense (rent, travel, etc) than I spend in a given period, so I gradu­ally build up a buf­fer.

Rather than im­porting trans­ac­tions from my bank or something, I enter all data manu­ally. This may sound te­di­ous, but I feel that the aware­ness I get from doing so is worth it.

Why track my fin­ances at all?

  • Makes me more con­scious of my spend­ing.
  • Lets me see how my spending has changed over time.
  • Lets me plan for the fu­ture with some de­gree of con­fid­ence.

This memo is con­cerned with my mech­anism for im­ple­menting this ap­proach. It could serve as a starting point for your fin­an­cial plan­ning; but working out what your sav­ings cat­egories are and how to al­locate your in­come to them re­quires in­tro­spec­tion.

Data Files

My hledger data files (the “journal files”) are shared with sync­thing, so I can add trans­ac­tions from any ma­chine.

I have one journal for each cal­endar year:

  • cur­rent.­journal, the journal for the cur­rent year.
  • $YEAR.­journal, is the journal for a pre­vious year.

I also have two files which all my journals in­clude:

  • com­mod­ities, a list of all com­mod­ities (cur­ren­cies, crypto­cur­ren­cies, funds) I deal with.
  • prices, en­d-of-day ex­change rates for all of my com­mod­it­ies.

Chart of Ac­counts

Ac­counts are broken up into five broad cat­egor­ies:

  • as­sets: money I have or am owed.
  • equity: used to start off the ledger for the year.
  • ex­penses: money I have spent.
  • in­come: money I have re­ceived.
  • li­ab­il­ities: money I owe.

Then as­sets is fur­ther sub­divided into:

  • cash: easily li­quid­ated as­sets.
  • in­vest­ments: brokerage ac­counts.
  • pen­sion: em­ploy­er­-­man­aged pen­sion funds.
  • re­ceiv­able: money I am owed.

The set of ac­counts I use is fairly stable: some­times I’ll add one, or one will cease to be use­ful, but that’s a rare event. Here are all the reg­ular ac­counts, which are mostly self-­ex­plan­at­ory:

  • as­sets
    • cash
      • paypal
      • petty
        • hand
          Phys­ical cash, in my wallet
          • budgeted
            … which was with­drawn from my bank ac­count
          • un­budgeted
            … which was a gift
        • home
          Phys­ical cash, not in my wallet
      • sant­ander
        • cur­rent
          • float
            Cash which can be with­drawn
          • goal
            Sub­ac­counts for spe­cific fu­ture ex­penses, like re­newing my pass­port; money added when I am paid
          • month
            Living ex­penses; money added at the start of the month
            • food
            • fun
            • other
          • pending
            Money put aside for trans­ac­tions which take a while to clear
          • saved
            Sav­ings; money added when I am paid
            • clothing
            • gift
            • health
            • house­hold
            • in­sur­ance
            • in­vest
            • monthly
            • phone
            • rent
            • tech
            • travel
            • util­ities
      • starling
        • float
          Cash which can be with­drawn
        • web
          Sav­ings for AWS, do­main names, and web hosting (all charged in for­eign cur­ren­cies)
    • in­vest­ments
      • cav­endish
        • s&s
      • coin­base
    • pen­sion
      • civilser­vice
    • re­ceiv­able
      • de­posit
        The de­posit on my flat
  • equity
  • ex­penses
    • books
    • clothing
    • fees
      • cav­endish
        My in­vest­ment broker
      • cur­rency
      • cus­toms
    • food
    • fun
    • gift
    • health
    • house­hold
    • in­sur­ance
    • music
    • other
    • phone
    • rent
    • tax
      • council
      • in­come
      • ni
        Na­tional In­sur­ance
    • tech
    • travel
    • util­ities
      • elec­tri­city
      • in­ternet
      • water
    • web
  • in­come
    • dona­tion
    • in­terest
    • job
  • li­ab­il­ities
    • loan
      • slc
        My stu­dent loan
    • over­draft
      • sant­ander
        • cur­rent
          My bank ac­count over­draft
    • pay­able
      Sub­ac­counts for people I owe money to

An ac­count name is the path to it through the tree, sep­ar­ated by colons. For ex­ample, as­set­s:cash, or ex­penses:util­it­ies:elec­tri­city. Be­cause typing these ac­count names would be pretty te­di­ous, I use some ali­ases in my journal file:

alias hand    = as­set­s:cash:­petty:hand
alias cur­rent = as­set­s:cash:sant­and­er­:­cur­rent
alias month   = cur­rent:­month
alias saved   = cur­rent:saved
alias goal    = cur­rent:­goal

Many of these ac­counts do not cor­res­pond to any real-­world bank or brokerage ac­count, they are used to track the flow of money in more de­tail than if I just re­corded which bank ac­counts things came from or went to.

Money (and other com­mod­it­ies) is only stored in leaf ac­counts.

Fin­an­cial In­sti­tu­tions

I have two bank ac­counts and two in­vest­ment ac­counts.

For bank ac­counts I use:

  • Sant­ander, my main bank ac­count. My pay goes here, al­most all of my ex­penses come out of here.

  • Starling, my backup ac­count. I keep a small amount of money in here to with­draw for if my Sant­ander debit card is not working (Sant­ander is Visa, Starling is Mas­ter­card). I also use it for paying for AWS, do­main names, and web servers, as Starling doesn’t charge cur­rency con­ver­sion fees.

For in­vest­ment ac­counts I use:

  • Cav­endish On­line, who are as far as I can tell just a front-end to ser­vices provided by Fi­delity (who do not them­selves offer ac­counts dir­ectly), and who provide a reas­on­able se­lec­tion of funds for my stocks & shares ISA.

  • Coin­base, who offer a few dif­ferent crypto­cur­ren­cies. I have very little in crypto, be­cause it’s so volat­ile.

Most of the time I am dealing with Sant­ander, only rarely do I need to touch the oth­ers.


A trans­ac­tion has a date, a payee, and a list of post­ings:

2018-01-01 Payee
    ac­count1                                            £amount1
    ac­count2                                            £amount2

The amounts must sum to zero, which means that the trans­ac­tion is bal­anced.

hledger al­lows trans­ac­tions to be marked with a ! or a *. The tra­di­tional meaning of these is “pend­ing” and “cleared”.

I use ! slightly dif­fer­ently. I use it for trans­ac­tions which are just an arte­fact of the way I track my fin­ances, which don’t in­volve any bal­ance changes to a real-­world ac­count. For ex­ample, set­ting up my monthly budget:

2018-06-01 ! Budget
    month:­food                                           £250.00
    month:fun                                             £50.00
    month:other                                           £25.00
    saved:­monthly                                       -£325.00

I use * as nor­mal, al­though I usu­ally only con­sider cash trans­ac­tions “cleared” after I check that the cash in my wallet matches what hledger thinks it should be.


In­come is re­corded as the pre-tax amount coming from in­come:$­source, and is split across saved:*, ex­penses:tax:*, and li­ab­il­it­ies:*. All amounts are in­cluded.

2018-06-29 * Cab­inet Of­fice
    goal:tax                                              £50.00
    saved:clothing                                        £13.00
    saved:­gift                                            £20.00
    saved:health                                           £7.00
    saved:­house­hold                                       £15.00
    saved:in­sur­ance                                       £11.49
    saved:in­vest                                         £116.00
    saved:­monthly                                        £385.71
    saved:­phone                                           £13.00
    saved:rent                                          £1700.00
    saved:tech                                            £13.00
    saved:travel                                          £25.00
    saved:util­ities                                      £100.00
    saved:web                                             £60.00
    ex­penses:tax:in­come                                  £788.00
    ex­penses:tax:ni                                      £385.39
    li­ab­il­it­ies:loan:slc                                 £237.00
    as­set­s:pen­sion:­civilser­vice                          £227.08
    in­come:job                                         -£4166.67
    as­set­s:pen­sion:­civilser­vice                          £920.83
    in­come:job                                          -£920.83

In­come may not ne­ces­sarily be taxed:

2018-06-02 * In­terest
    saved:­monthly                                          £4.00


In­vest­ments are a trans­ac­tion from saved:in­vest to the ap­pro­priate in­vest­ment ac­count. All amounts are in­cluded, using the @@ form to ex­actly spe­cify the overall price. Trading fees go to ex­penses:fees:$broker.

2017-12-18 * Coin­base
    as­set­s:in­vest­ment­s:­coin­base                             0.25 LTC @@ £60.17
    ex­penses:fees:­coin­base                                 £2.50
    saved:in­vest                                         -£62.67

Trans­fer­ring the cash to the in­vest­ment ac­count and then in­vesting it may be two sep­arate steps:

2018-06-01 * Cav­endish
    as­set­s:in­vest­ment­s:cav­endish:s&s                     £100.00
2018-06-01 * Cav­endish
    as­set­s:in­vest­ment­s:cav­endish:s&s                        0.47 VANEA @@ £100.00

A broker may charge a man­age­ment fee by selling some of the as­sets:

2018-01-03 Cav­endish
    as­set­s:in­vest­ment­s:cav­endish:s&s                       -0.02 MCMEA @@ £0.03
    ex­penses:fees:cav­endish                                £0.03

Al­though it is best to keep some cash in the ac­count, if pos­sible, to avoid the as­sets from being whittled away.

With­drawing Cash

Cash that can be with­drawn lives in cur­rent:­float. This is be­cause it’s useful to have cash on hand without ne­ces­sarily having de­cided up front what it’s for, but it’s also good to bound the amount of un­al­loc­ated money I have.

2018-05-24 With­draw
    hand:budgeted                                            £20

Cash can also be with­drawn in a for­eign cur­rency, which will have an ex­change rate and may im­pose an ad­di­tional fee:

2018-05-11 With­draw
    hand:budgeted                                          10000 JPY @@ £70.41
    ex­penses:fees:­cur­rency                                 £1.99

“£” is the only com­modity I give a sym­bolic name.

Ex­penses (bank ac­count)

There are two main types of ex­penses: ex­penses from my bank ac­count, and cash ex­penses. The former are straight­for­ward:

2018-01-01 Subway
    ex­penses:­food                                          £5.99

For­eign cur­rency ex­penses are re­corded like so:

2018-01-01 Linode
    ex­penses:web                                              20 USD @@ £15.31
    ex­penses:fees:­cur­rency                                 £1.25

Some­times I’ll add a trans­ac­tion note, which comes after a ver­tical bar:

2018/06/04 * Steam | Cultist Sim­u­lator
    ex­penses:fun                                       £13.49

Some­times trans­ac­tions take a long time to clear. For ex­ample, if you buy some­thing out of stock on Amazon, they’ll charge you when it ships. This could even be months later. For such trans­ac­tions, I want to re­move the money from the rel­evant budget cat­egory im­me­di­ately, but not from my as­sets until the charge ac­tu­ally oc­curs. The solu­tion is a tem­porary ac­count:

2018-06-09 ! Amazon | 203-1811543-7064312
    cur­rent:pending                                       £14.99

Later, when the money is taken from my bank ac­count, I can add the trans­ac­tion to ex­penses:

2018-07-31 Amazon | 203-1811543-7064312
    ex­penses:­books                                        £14.99

If this is a trans­ac­tion with a note, the same note goes on both to tie them to­gether.

I prefer this ap­proach to posting dates, as with posting dates the ledger does not bal­ance between the two dates. By simply using an ad­di­tional ac­count, bal­ance is main­tained.

Ex­penses (cash)

Cash ex­penses re­quire an ad­just­ment to the ap­pro­priate budget cat­egory, trans­fer­ring money back to the float to rep­resent that that money has been al­loc­ated and spent:

2018-01-06 * Mor­risons
    ex­penses:­food                                          £2.43
2018-01-06 ! Cash budget spend
    month:­food                                            -£2.43

This could be done in one trans­ac­tion, but I think it’s clearer with two. If I’m using cash I was gif­ted, the ex­pense comes from hand:un­budgeted and there’s no trans­ac­tion up­dating cur­rent:­float.

For­eign cur­rency cash trans­ac­tions re­quire picking an ap­pro­priate ex­change rate when re­moving the money from the budget cat­egory:

2018-05-08 * Fam­ily­Mart
    ex­penses:­food                                            548 JPY
2018-05-08 ! Cash budget spend
    month:­food                                              -548 JPY @@ £4.60

The ex­change rate is kind of ar­bit­rary, but some­thing reas­on­ably close to the then-­cur­rent ex­change rate should be used.


Re­im­burse­ments are much like in­come, but are gen­er­ally un­taxed. In­come comes from some re­im­burse­ment ac­count and is put in some sav­ings ac­count:

2018-01-04 * Pusher
    saved:de­posit                                           £186

As with in­come, the re­im­burse­ment could be split over mul­tiple sav­ings ac­counts.

Pre­dicting the Fu­ture

Pre­dicting the fu­ture can be the down­fall of an oth­er­wise-­sound fin­an­cial plan. Al­ways be pess­im­istic! Only in­clude in­come which you are cer­tain you will get (bar­ring some ex­treme change in your life cir­cum­stances); but in­clude any ex­penses you can think of, even if they are un­likely. If you can be pess­im­istic and still have some wiggle room in your plan, then you are prob­ably in a good place.


By a “budget” I mean an al­loc­a­tion of cur­rent money to ex­pense cat­egories and new money to sav­ings cat­egor­ies. I budget on a monthly basis.

Firstly, my monthly ex­penses:

~ every 1st day of month
    month:­food                                           £250.00
    month:fun                                             £50.00
    month:other                                           £25.00
~ every 1st day of month
    ex­penses:web                                          £40.00

~ every 1st day of month from 2018-03
    ex­penses:util­ities                                    £75.00
~ every 15th day of month from 2018-03
    ex­penses:rent                                       £1300.00
    ex­penses:tax:­council                                  £82.00
~ every 16th day of month from 2018-03
    ex­penses:in­sur­ance                                    £15.00

This is based on ex­per­i­ence. It’s in two chunks be­cause I moved to London in March.

Now, my monthly in­come:

~ every 30th day of month from 2018-04
    saved:clothing                                        £13.00
    saved:­gift                                            £20.00
    saved:health                                           £7.00
    saved:­house­hold                                       £15.00
    saved:in­sur­ance                                       £15.00
    saved:in­vest                                         £116.00
    saved:­monthly                                        £380.46
    saved:­phone                                           £13.00
    saved:rent                                          £1700.00
    saved:tech                                            £13.00
    saved:travel                                          £25.00
    saved:util­ities                                      £100.00
    saved:web                                             £60.00
    ex­penses:tax:in­come                                  £848.20
    ex­penses:tax:ni                                      £382.61
    li­ab­il­it­ies:loan:slc                                 £100.00
    as­set­s:pen­sion:­civilser­vice                          £219.51
    in­come:job                                         -£4027.78
    as­set­s:pen­sion:­civilser­vice                          £890.14
    in­come:job                                          -£890.14

This is based on my pay in April. The month-to-­month al­loc­a­tion of cash to saved:... cat­egories will vary a little.

No­tice how I’m only spending £325 of saved:­monthly a month, but I’m adding £380 to it. I do this with all the sav­ings ac­counts, gradu­ally building up a buffer so I will not be living paycheck to paycheck.


In its simplest form, fore­casting is just ap­plying your budget into the fu­ture. I plan for each cal­endar year, so I look ahead to the end of December to see that everything is working out.

However, ex­pected fu­ture events can be added to the fore­cast too:

; Dentist
~ 2018-03-20
    ex­penses:health                                       £20.60

It is es­sen­tial that none of my sav­ings ac­counts dip below zero, and ideally their bal­ance should be in­creasing every month, due to saving ex­tra. When I have enough of a buf­fer, I will re­move this extra al­loc­a­tion (just main­taining the cur­rent bal­ance) and put the extra money to some other use.

In my mind, it doesn’t really make sense to talk about budgeting and fore­casting as sep­arate en­tit­ies. A budget only makes sense if it serves your fu­ture pur­poses, so it’s not as simple as looking at what you have vs. looking into the fu­ture. I try to think of it like this in­stead: budgeting is the al­loc­a­tion (which may in­volve plan­ning ahead) whereas fore­casting is looking at how your al­loc­a­tion (plus any other ex­pected trans­ac­tions) changes your fin­an­cial situ­ation over time.


In ad­di­tion to simply re­cording trans­ac­tions, there is some book­keeping I do oc­ca­sion­ally, to keep my re­cords easy to pro­cess.

End of Month

At the end of a month I re­con­cile the trans­ac­tions of the month-just-en­ded:

  1. For every trans­ac­tion in the on­line bank state­ment, find the cor­res­ponding journal trans­ac­tion and mark it.
    • If there are trans­ac­tions missing from the journal, add and mark them.
    • If there are trans­ac­tions missing from the bank state­ment, the bank is being slow; re­con­cile as they come in over the next few days.
    • If the bank bal­ance is below the cur­rent bal­ance, even dis­carding un­cleared trans­ac­tions, either figure out what happened or add a trans­ac­tion to ex­penses:­ad­just­ment (see “bal­ance cor­rec­tion”).
  2. Check the bal­ance in my wallet and mark all hand trans­ac­tions.
    • If the wallet bal­ance is below the hand bal­ance, add a trans­ac­tion to ex­penses:­ad­just­ment (see “bal­ance cor­rec­tion”).

I also set up the budget for the month-just-star­ted:

2018-06-01 ! Budget
    month:­food                                           £250.00
    month:fun                                             £50.00
    month:other                                           £25.00
    saved:­monthly                                       -£325.00

This is just the reg­ular monthly budget, but with a date.

End of Year

  1. Re­con­cile, as at the end of any other month.
  2. Add any ne­ces­sary bal­ance cor­rec­tion (see “bal­ance cor­rec­tion”).
  3. Re­name the cur­rent journal file from “cur­rent.­journal” to “$YEAR.­journ­al”.
  4. Identify fin­an­cial goals for the up­coming year.
  5. Create a new “cur­rent.­journal” for the up­coming year with budget and fore­cast trans­ac­tions.
  6. Ini­tialise all ac­counts on the first of January by trans­fer­ring from equity.

The budget cre­ated in (5) will de­pend on the goals iden­ti­fied in (4). Here’s an ex­ample of a (6) trans­ac­tion set­ting up the starting bal­ances:

2018-01-01 ! Start of year
    hand:budgeted                                        £242.70
    cur­rent:­float                                         £77.30
    saved:­gift                                             £5.00
    saved:­house­hold                                      £100.00
    saved:in­vest                                           £5.00
    saved:­monthly                                        £342.36
    saved:­moving                                         £950.00
    saved:rent                                          £1038.00
    saved:travel                                         £100.00
    saved:web                                            £195.00
    as­set­s:in­vest­ment­s:cav­endish:s&s                        2.54 VADEA @@ £800.00
    as­set­s:in­vest­ment­s:cav­endish:s&s                       65.00 MCMEA @@  £99.77
    as­set­s:in­vest­ment­s:cav­endish:s&s                       31.19 MCOUA @@  £50.00
    as­set­s:in­vest­ment­s:cav­endish:s&s                        7.15 MHMIA @@  £50.00
    as­set­s:in­vest­ment­s:­coin­base                            0.004 BTC   @@  £51.91
    as­set­s:in­vest­ment­s:­coin­base                             0.10 ETH   @@  £62.04
    as­set­s:in­vest­ment­s:­coin­base                             0.25 LTC   @@  £60.17
    as­set­s:in­vest­ment­s:­coin­base                            10.00 EUR   @@   £9.11
    as­set­s:re­ceiv­able:de­posit                            £300.00
    as­set­s:re­ceiv­able:pusher                             £186.00
    as­set­s:re­ceiv­able:uni­versity                         £188.38
    li­ab­il­it­ies:over­draft:sant­and­er­:­cur­rent            -£2000.00
    li­ab­il­it­ies:loan:slc                              -£28592.25

This is the tem­plate for a new journal file:

in­clude com­mod­ities
in­clude prices

alias hand    = as­set­s:cash:­petty:hand
alias cur­rent = as­set­s:cash:sant­and­er­:­cur­rent
alias month   = cur­rent:­month
alias saved   = cur­rent:saved

* Fore­cast
* Starting bal­ances
* Ledger
** January
** Feb­ruary
** March
** April
** May
** June
** July
** Au­gust
** September
** Oc­tober
** November
** December

The reason for the *-style head­ings is so that org­struct-­mode can be used to col­lapse sec­tions.

Bal­ance Cor­rec­tion

Some­times I get things wrong. I will make a mis­take re­cording a trans­ac­tion, and a mis­take reading that same trans­ac­tion from my bank state­ment at the end of the month. Be­cause it takes time for trans­ac­tions to ap­pear in my on­line bank­ing, and even then they often ap­pear out­-of-order, just com­paring my hledger en­d-of-­month bal­ances with what my bank thinks they are is not easy.

Tracking down the ori­ginal error is usu­ally far more trouble than it’s worth.

If I sus­pect I have made a mis­take (or just want to verify that I haven’t), I avoid spending money from my bank ac­count for at least one working week. A simple way to achieve this is to with­draw a bunch of money and just use cash for that week.

After a week, every un­cleared trans­ac­tion should really be in my on­line bank­ing, so I can re­con­cile, and in­sert a bal­ance ad­just­ment trans­ac­tion if I need to:

2017-03-01 * Bal­ance ad­just­ment
    ex­penses:­ad­just­ment                                    £8.51

2017-03-31 * Wallet ad­just­ment
    ex­penses:­ad­just­ment                                   £14.98

2017-04-30 * Bal­ance ad­just­ment
    saved:­monthly                                          £1.25

I made 11 trans­ac­tions to ex­penses:­ad­just­ment and 1 from in­come:­ad­just­ment in 2017. As the year went on, the fre­quency (and mag­nitude) of these ad­just­ments dropped. So far in 2018 (as of June), I have only needed 2. Hope­fully in 2019 I won’t need any.

finance, hledger, howto
Target Audience
Mostly me, & possibly personal finance nerds.
Epistemic Status
Documents my way of doing things, doesn't attempt to speak more generally than that.
Attention Conservation Notice
You may get something out of this if you're rethinking how you manage your finances.