Tax Payments with Ledger

How I record taxes in Ledger is pretty simple. In my demonstration of how I record salary payments the example entry included tax deductions that show the basic account structure.

2025-12-26 Acme Inc
    Assets:Bank:Checking                    $1000.00
    Expenses:Tax:Federal:FY2025              $200.00
    Expenses:Tax:State:FY2025                 $50.00
    Expenses:Insurance:Medical                $20.00
    Income:Salary

I pay state and federal taxes, so I have two main accounts: Expenses:Tax:Federal and Expenses:Tax:State.

Tax payments (and refunds for overpayments) can occur in years other than the tax years that the payments are related to. This requires some way to query transactions by tax years rather than just the posting date. You could do this by tagging the transactions, but I prefer to use a fourth account level to indicate the fiscal year. Thus my 2025 taxes live in Expenses:Tax:Federal:FY2025 and Expenses:Tax:State:FY2025.

If I pay an accountant to help me file taxes, I will log the payment against the Expenses:Tax:Preparation account, which uses the same fiscal year subaccount.

2026-02-01 The Accountant
    Expenses:Tax:Preparation:FY2025          $100.00
    Assets:Bank:Checking

If I receive a federal refund in March, I will debit it out of the appropriate tax account. I also tag these transactions with refund-tax so I can easily query them later.

2026-03-15 IRS
    ; 2025 Tax Refund
    ; :refund-tax:
    Assets:Bank:Checking                    $1000.00
    Expenses:Tax:Federal:FY2025

If instead I discover that I still owe federal taxes in March, I will credit the payment into the appropriate tax account. I tag these transactions with final-tax so I can easily query them later.

2026-03-15 IRS
    ; 2025 Federal Taxes
    ; :final-tax:
    Expenses:Tax:Federal:FY2025             $1000.00
    Assets:Bank:Checking

Some years I have made quarterly estimated tax payments instead of having taxes withheld from my paycheck. These entries look as you would expect, but I tag them with estimated-tax as well as the quarter number for future queries.

2025-09-02 IRS
    ; 2025 Q3 Estimated Tax
    ; :estimated-tax:q3:
    Expenses:Tax:Federal:FY2025             $1000.00
    Assets:Bank:Checking

The bottom line with all of this is that I can do a simple ledger balance fy2025 and see a complete and easy to understand picture of my 2025 taxes. Or I can run ledger balance expenses:tax:federal to see what I’ve paid in federal taxes over the past 14 years, broken out by year.

As with most things related to Ledger, this seems like pretty basic stuff when you’re doing it but becomes a superpower when you realize how most of the rest of the world lives.

Salary Tracking with Ledger

In my previous descriptions of how I perform plain text accounting I did not discuss logging salary income with Ledger. My basic strategy is to create an entry with all the same data that appears on the paystub. The only number that actually matters to me is whatever amount ends up in my bank account, but it is still important to have withholdings documented for later querying.

A simplified entry would look like this:

2025-12-26 Acme Inc
    Assets:Bank:Checking                    $1000.00
    Expenses:Tax:Federal:FY2025              $200.00
    Expenses:Tax:State:FY2025                 $50.00
    Expenses:Insurance:Medical                $20.00
    Income:Salary

At the time of entry, I store a PDF of the paystub just like a receipt. (In Ye Olden Days this came from scanning a piece of paper, but now I just download the PDF from a web site.) This entry will be reconciled and get cleared with the * mark the next time I login to the bank account and verify the amount I received.

If I want to know how much money the employer or a government thinks I made last year, I can just ask Ledger for the balance of the Income:Salary account.

$ ledger balance income:salary --period 2025
        $-1270.00   Income:Salary

However, this number has no real bearing on my reality. What is much more useful to me is the ability to query how much money I actually received last year, e.g. my take-home pay. I can do this by asking Ledger to show the balance of the bank account, limiting it to postings that involved the Income:Salary account.

$ ledger balance assets:bank:checking -l "any(account =~ /Income:Salary/)" --period 2025
        $1000.00    Assets:Bank:Checking

If the only financial relationship you have with your employer is them giving you money in the form of a salary, then you could simplify this by just asking Ledger for the balance of transactions in the bank account from that payee.

$ ledger balance assets:bank:checking and "@Acme Inc" --period 2025

However, my employer sells stuff, and sometimes I buy that stuff, so for me the above query would show me my salary less my employee purchases. Which is mostly worthless.

When I receive a W-2 after the end of the year, I check all of its entries – gross pay, pre- and post-tax deductions, etc – against Ledger with a simple ledger balance "@Acme Inc" --period 2025. Having all this data stored locally in queryable plain text, rather than needing to access some web portal or read through various PDFs like a prehistoric savage, is a key life strategy for me.

Night Moves

After falling out of the habit for a few months, I resumed my night runs at the end of December. I’ve been back into it for about a month now. It’s great, speed-running night city, just me and the coyotes.

After Dark

New to this cycle, I now stop at one of those outdoor fitness areas near the end of my run and knock out some pull-ups. (It turns out using a bar is in fact easier than my normal finger pull-ups.) There’s usually a couple other weirdos there.

Link Log 2026-01-21

Chimera

VBL 2023

White Rabbit

Designing a Life

Personal computing

When Sega Built the Most Extreme Arcade Cabinet

Beat Godfather Meets Glitter Mainman: William Burroughs Interviews David Bowie

Tam Cruising

I brush my teeth while standing on one foot.

It takes about two minute to brush your teeth. These two minutes are an opportunity to improve balance and ankle strength. Sometimes I switch feet halfway through, other times I’m feeling more ambitious and will balance on one foot in the morning and the other that night.

Better Living Through Getting Stomped

Four years ago I started going to a Thai massage parlor.

This is the practice where they walk on your back, drive their elbows and the heel of their palms into you, and sometimes tie your limbs into knots. My findings are that the older and smaller the Thai lady, the more brutally she stomps on you. I spend much of the session attempting to practice the Vipassana body sweep technique under duress and trying not to vocalize the pain. It’s great and I love it.

They would of course lessen the pressure if asked, but this is both incompatible with my male ego and would go against the teachings of the Bodhisattva in the incarnation known as Patrick Swayze.

If I were a rich man I would go monthly, but I am not, so I limit myself to three or four times per year. I consider this a component of my prana-bindu training.

Just Another Saturday

Two weeks ago I lost power from about 14:00 till about 21:00. This had negligible impact on my day. I took out my lamp and continued with the itinerary. My time was spent:

It was just another Saturday afternoon.

Power Outage Leg Day

I threw Lee and Brian at judo today. Lee is 14, and Brian is 13 but taller and heavier.

I told Sibylla & she asked what my teacher had said. I said he had said it was very good.

Sibylla said that didn’t sound very character-building. I said most authorities on child psychology said a child should be given encouragement and reinforcement. Sib said Bandura and who else? I said everybody else. I didn’t say that the authorities also said a parent had to be able to set limits because I was afraid she might suddenly decide to make up for lost time and set a lot of limits.

Sibylla said: Well just remember Richie, becoming the great judo champion is not the end of the story.

I said I didn’t think I was the great judo champion just because I could beat Lee and Brian at Bermondsey Boys Junior Judo.

Sibylla said: It isn’t a question of beating X and Y. What if there’s no one you can’t beat? It’s a question of perfecting your skill and achieving satori. What on earth are they teaching you in this class?

I said we mainly concentrated on learning how to throw people to the ground. Sib said: Must I do everything myself? She was grinning from ear to ear.

Helen Dewitt, The Last Samurai

Notes

  1. Of course I had to boil water on my gas stove like a savage instead of using the electric kettle.

Concerning the Tawashi

I scrub my dishes and kitchen counter tops with a Kamenoko Tawashi. The palm fiber of the Tawashi is stiff enough for a good scouring, but does not scratch anything. It doesn’t hold onto food scraps the way some other brushes do. It dries relatively quickly when hung from its wire loop or placed in a two-piece soap dish, thus supporting my war on sponges. I use the #1 size, which is small enough to fit comfortably in my hand and to be shoved into drink ware. It is the perfect kitchen brush.

I use the same brush for about two years before replacing it. Every few months I toss it in the kitchen autoclave. I could keep them for longer, but I give my Tawashi enough unintentional haircuts when cleaning knives that I’m usually ready for a new one after a couple years.

The only other brushes I use in the kitchen are a bottle brush and straw brush. I also have one of those chainmail scrubbers for my cast iron, but the Tawashi gets used much more often.

Tawashi, Mamison, Sal Suds

The Tawashi, my Sal Suds spray, and my pink Mamison gloves complete my kitchen ablution armaments. (The pink color is critical for maximum cleaning.)

Tawashi are made by a number of manufacturers. Many are garbage. Those from Kamenoko are consistently good. I avoid it if it does not come in the orange wrapper with the picture of the turtle on it.