I don't think this is only applicable to the software, but it's the one that I'm using.

In the documentation it talks about using charitable giving (e.g. tithing) as a Liability.

An example for 10% tithing would look like this:

= /^(?:Income)/
    (Liabilities:Tithing)    0.10

2019-09-01  Salary
    Income:Salary    -$1,000.00
    Assets:Bank       $1,000.00

This would give your liabilities a balance of $-100.00, like I expect. However, the problem comes when it's time to pay this amount.

If I do this:

2019-09-01 Pay tithing
    Assets:Bank    -$100.00
    Expense:Tithing $100.00

I still have a balance in my liability. I can't just throw that in the transaction though:

2019-09-01 Pay tithing
    Assets:Bank          -$100.00
    Liabilities:Tithing   $100.00
    Expense:Tithing       $100.00

Clearly that doesn't balance out.

So how do I say that I'm taking money from my bank, sending it to the expense categor(ies), but that I'm also decreasing my liabilities?

  • 1
    To better help you, why are wanting to track a tithe as a liability? You have it correctly paid as an expense already. A liability account typically represents a delayed expense, such as with a credit card. When using a credit card, you're taking out a mini-loan. It's not until you pay off the balance that you incur an expense and the obligation is removed. The liability account tracks the obligation. A tithe, which as I understand it, is charged immediately. Therefore, it's an expense and not a liability. There's no delay. Sep 15, 2019 at 23:09
  • @LoremIpsum it would be due immediately, but depending on how it's paid, it's unlikely to actually be paid immediately - for instance, if you pay by check or via an offering plate, you're going to have some delay between your increase and the actual payment of the tithe. For me that definitely says liability first. Sep 16, 2019 at 1:23
  • To me that sounds like a state (e.g. pending), rather than an account type. Ledger supports various markers, such as * and ! to indicate the state of a transaction (or posting of a transaction). These can be filtered on the CLI with the --cleared, --uncleared, and --pending flags. ledger-cli.org/3.0/doc/ledger3.html#Transaction-state Sep 16, 2019 at 18:41

2 Answers 2


The answer can actually be found in the documentation, you just have to look closer.

Virtual Postings will do it. The parenthesis around the automatic transaction means that you aren't representing real money - you can think of it as a label that you're putting on your dollar bills, rather than the bills themselves.

You just put the parenthesis around your postings

2019-09-01 Pay tithing
    Assets:Bank    -$100.00
    (Liabilities:Tithing)   $100.00
    Expenses:Tithing        $100.00

Now ledger balance comes out correctly:

             $900.00  Asset:Bank
             $100.00  Expense:Tithing
          $-1,000.00  Income:Salary

If you decide that you want a fixed amount to come out of each check, you can do it like this:

= Income:Salary
   ; Note the parenthesis mean virtual here, too
   (Liabilities:Roof Fund)    -$10

Then your journal entry could just look like this:

2019-09-02 Tithes & Offerings
    (Liabilities:Tithing)    $100.00
    (Liabilities:Roof Fund)   $10.00
    Expense:Tithing          $100.00
    Expense:Roof Fund         $10.00

I'm not sure if other software also keeps track of virtual accounts/posting, but I suspect they do. With ledger you can exclude these values by passing the --real flag in when you're doing reports/balances/etc.

  • If you're looking for a label...why not use tags? Also, be wary of unbalanced virtual postings; they're oft cited as being unnecessary. There is likely a more robust way to represent what you're looking to track. The author of Beancount provides some arguments against unbalanced virtual postings here: docs.google.com/document/d/… Sep 15, 2019 at 23:13
  • @LoremIpsum I just read through that bit of document and the linked document and didn't find any arguments, just claims. What am I missing? Sep 16, 2019 at 1:31
  • 1
    You're correct, it's a bit hand-wavy. I had been reading the ledger mailing list and Martin Blais, the author of Beancount, had provided a few concrete examples.. I had meant to link the mailing list, but accidentally linked the comparison document. Of course, I can't find the mailing list post now! My apologies for sending you down the wrong path. Sep 16, 2019 at 18:51

In your example, Liabilities:Tithing is being used as a "reminder to self", of how much you need to give to meet your tithing target. Nothing really to do with transaction delays in this case, contrary to comments.

It's being increased with an unbalanced ("virtual") posting. This means it's not part of your double-entry accounts or the accounting equation, and so you have to decrease it the same way, with an unbalanced posting.

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .