PTPL 206 · Plain Text Accounting: Envelope Budgeting in Beancount
How a phantom currency keeps bank account reports clean
Envelope budgeting is the practice of planning ahead for known expenses by regularly putting money into pre-determined categories, or envelopes. As the name suggests, it is often done with real cash placed into real envelopes.
Envelope budgeting can be done in digital banking with a series of separate accounts, but that can be limiting. Unless your bank allows a single account to be split into multiple categories (like UP Bank- Australia-only referral link), you will need to track things carefully on a spreadsheet.
Or you can enter the satisfying world of plain text accounting, where you can create as many virtual categories as you need while still easily keeping track of real-life bank transactions and balances.
Envelope budgeting in plain text accounting
I began with plain text accounting from a position of profound financial and technical ignorance, so it feels incredible to finally be able to say I am now confidently using plain text to run an envelope budgeting system!
There’s a lot more to learn and I’m sure over time parts of the process will change, but that’s the beauty — and flexibility — of using plain text. Things are working and that’s enough for me right now.
This system is helping a family member keep on top of their spending, and also to save up for bills and holidays. It’s been life changing for them, and I’m both surprised and grateful to be part of the process. Instead of seeing a bulk amount in a single bank account, they can now see exactly how much is available for discretionary spending as distinct from money set aside for future expenses.
What comes next assumes you are familiar with the basics of Beancount and double-entry accounting.
I have created my ‘envelopes’ with a new currency called BGT (budget). There are other ways to do envelope budgeting without creating a virtual currency, but using the budget envelopes separate to the regular currency keeps reporting on the actual balance of the real-life bank account, clean; uncluttered by extra accounts that appear to but don’t actually exist.
AUD = Australian dollars, the currency of my bank account.
Beancount examples
It’s vital to ensure that assets, income, and expense accounts can use both currencies:
2020-05-01 open Assets:Bank:Saver AUD, BGT
2020-05-01 open Assets:Cash AUD, USD, NZD, XPF
2020-05-01 open Expenses:Food:Groceries AUD, BGT
2020-05-01 open Expenses:Food:Eating-out AUD, BGT
2020-05-01 open Expenses:Utilities:Electricity AUD, BGT
2020-05-01 open Income:Salary AUD, BGT
2020-05-01 open Income:Freelance AUD, BGT
2020-05-01 open Equity:Opening-balances
Then you’ll need to open virtual accounts for each of your budget categories. Call them what you want, just make it clear they aren’t regular real-life assets. Include a reference to the real-life bank account that contains the funds.
2020-05-01 open Assets:BUD:Saver:Misc BGT
2020-05-01 open Assets:BUD:Saver:Travel BGT
2020-05-01 open Assets:BUD:Saver:Food BGT
2020-05-01 open Assets:BUD:Saver:Donations BGT
2020-05-01 open Assets:BUD:Saver:Christmas BGT
2020-05-01 open Assets:BUD:Saver:Health BGT
2020-05-01 open Assets:BUD:Saver:Utilities BGT
On pay day, you’ll record the new BGT currency alongside the real currency you receive. Leaving the amount blank on the Income:Salary line allows Beancount to assign that as the source for both sets of currencies.
2026-05-04 * "Pay Day" "Company A"
Assets:Bank:Saver 1000.00 AUD
Assets:BUD:Saver:Misc 1000.00 BGT
Income:Salary
Next you’ll split the BGT amount into your budget categories. Make as many of these as you like! In this example, $100 of this week’s funds remains in the Miscellaneous budget category for unforeseen expenses:
2026-05-04 * "Pay Day" ""
Assets:Bank:Saver 1000.00 AUD
Assets:BUD:Saver:Misc 1000.00 BGT
Income:Salary
2026-05-04 * "Budgeting" "week 19"
Assets:BUD:Saver:Misc -900.00 BGT
Assets:BUD:Saver:Travel 250.00 BGT
Assets:BUD:Saver:Donations 100.00 BGT
Assets:BUD:Saver:Christmas 50.00 BGT
Assets:BUD:Saver:Health 150.00 BGT
Assets:BUD:Saver:Utilities 350.00 BGT
When entering transactions, you’ll subtract the same amount from both the real and the virtual budget currencies:
2026-05-04 * "Origin Energy" "electricity bill"
Assets:Bank:Saver -245.00 AUD
Assets:BUD:Saver:Utilities -245.00 BGT
Expenses:Utilities:Electricity
2026-05-05 * "Blind Society" "annual donation"
Assets:Bank:Saver -50.00 AUD
Assets:BUD:Saver:Donations -50.00 BGT
Expenses:Donations
2026-05-05 * "Origin Energy" "electricity rebate"
Assets:Bank:Saver 10.73 AUD
Assets:BUD:Saver:Utilities 10.73 BGT
Expenses:Utilities:Electricity
2026-05-06 * "Grill'd" "Tuggerah"
Assets:Bank:Saver -48.56 AUD
Assets:BUD:Saver:Food -48.56 BGT
Expenses:Food:Eating-out
Beancount now has all it needs to show you how much has been spent in each budget category, and how much remains. To keep things accurate, remember to regularly insert asset account balances, padding where necessary so they match your actual bank balance:
2026-05-02 pad Assets:Bank:Saver Equity:Opening-balances
2026-05-03 balance Assets:Bank:Saver 2,374.00 AUD
2026-05-03 balance Assets:BUD:Saver:Misc 324.00 BGT
2026-05-03 balance Assets:BUD:Saver:Travel 500.00 BGT
2026-05-03 balance Assets:BUD:Saver:Food 200.00 BGT
2026-05-03 balance Assets:BUD:Saver:Donations 150.00 BGT
2026-05-03 balance Assets:BUD:Saver:Christmas 200.00 BGT
2026-05-03 balance Assets:BUD:Saver:Health 450.00 BGT
2026-05-03 balance Assets:BUD:Saver:Utilities 550.00 BGT
One example of how my family member uses envelope budgeting is to track how much they have saved up for a holiday they’ll be taking in September. The Travel category is broken down into specific sub-categories, making it easy to see that every aspect is covered:
2026-05-03 balance Assets:BUD:Travel:Misc 100.00 BGT
2026-05-03 balance Assets:BUD:Travel:Fares 950.00 BGT
2026-05-03 balance Assets:BUD:Travel:Rooms 1500.00 BGT
2026-05-03 balance Assets:BUD:Travel:Car 870.00 BGT
2026-05-03 balance Assets:BUD:Travel:Eating-out 450.00 BGT
Does anything about doing envelope budgeting this way feel confusing? Please let me know (see below) and I’ll do my best to make it clearer.
More on plain text accounting
- Beancount Manual
- 2024-08-05 Plain Text Accounting Level 1, Complete!
- 2024-10-07 Choosing Between Digital and Analog, and a Plain Text Accounting Update
- NOTE: beancount.io with its slick AI promo video is not an official website. You do not need to pay to use Beancount, and you certainly don’t need to sign up for a subscription!
- I started my plain text accounting journey with hledger. It’s great for those who gel with it and don’t care that the amounts in the right hand column aren’t auto aligned and has a supportive community around it. Beancount wins out for me because I don’t enjoy working in the terminal. The fava interface is fantastic, and visual alignment of input is more important to me than it possibly should be(!)
Next week
Next week 🤞 I’ll explain how to use the todo.txt format to create a functional plain text calendar.
💬 I love to hear from readers! email hello at ellanew dot com or message me on Mastodon or Bluesky. Follow my RSS feed (https://ellanew.com/feed.rss), or sign up to receive a weekly plain text themed email.
If you’ve found value here, I invite you to share this post with someone you think will appreciate it or make a contribution to my support jar.
Discussion in the ATmosphere