<!-- mobian-agent-page publisher="dailydev" canonical="https://daily.dev/posts/plain-text-accounting-is-pretty-cool-uhgpbwqu4" -->

---
title: Plain Text Accounting is Pretty Cool | daily.dev
description: A personal experience report on switching from apps like Origin, Rocket Money, and Mint to plain text accounting using hledger for tracking personal finances....
canonical: https://daily.dev/posts/plain-text-accounting-is-pretty-cool-uhgpbwqu4
twitter:card: summary_large_image
twitter:site: @dailydotdev
og:type: website
og:site_name: daily.dev
og:title: Plain Text Accounting is Pretty Cool | daily.dev
og:description: A personal experience report on switching from apps like Origin, Rocket Money, and Mint to plain text accounting using hledger for tracking personal finances....
og:url: https://daily.dev/posts/plain-text-accounting-is-pretty-cool-uhgpbwqu4
og:image: https://api.daily.dev/og/posts/UhGpbwqu4.png
og:image:alt: Plain Text Accounting is Pretty Cool
og:image:width: 1200
og:image:height: 630
og:locale: en
---

> ## Documentation Index
> Fetch the complete documentation index at: https://daily.dev/llms.txt
> Use this file to discover all available pages before exploring further.

# Plain Text Accounting is Pretty Cool

**[Lobsters](https://daily.dev/sources/lobsters)** · 13 min read · 0 upvotes · 0 comments

## Summary

A personal experience report on switching from apps like Origin, Rocket Money, and Mint to plain text accounting using hledger for tracking personal finances. Covers hledger's journal file syntax, multi-account transactions, commodity and price tracking, multi-file journals, transfer tracking via equity accounts, reimbursable expense tracking with accounts receivable, and balance assertions for catching discrepancies. The author, a few weeks into the switch, finds the double-entry rigor and plain text format worthwhile despite manual entry overhead.

## Full article

daily.dev links to this article rather than hosting it. Read it at the original source: <https://sumnerevans.com/posts/money/plain-text-accounting>

## Questions this post answers

### How do you record a transfer between two accounts in hledger so both journal files stay balanced?

Use an intermediate equity:transfers account to represent money in transit between accounts. In the source account's journal file, debit the account and credit equity:transfers; in the destination account's journal file, debit equity:transfers and credit the destination. This keeps each account's journal file reading like a linear bank statement while the overall books stay balanced, and it gives visibility into transfers that take days to settle.

_Developers building personal finance tooling can find more hledger patterns like this through daily.dev._

### How do I record a reimbursable work expense in hledger without it showing up as a personal expense?

Post the expense against an accounts-receivable asset account instead of an expense account, for example assets:accounts-receivable:expense-reimbursement:employer-name. When the reimbursement arrives, debit checking and credit that receivable account back to zero. This avoids the problem of a large expense in one month and a matching negative expense the next month once reimbursed, and it correctly zeroes out even when the original expense spanned multiple subcategories.

_Anyone automating expense tracking can compare double-entry approaches like this via daily.dev._

### How do balance assertions work in hledger and what happens when they fail?

A balance assertion is written after an amount using the = syntax, such as $32.00 = $82.00, asserting the account's running balance at that point. Running hledger check replays all transactions and reports a failure showing the journal file, line number, the asserted balance versus the calculated balance, and the difference, helping catch data-entry errors or unaccounted transactions early.

_Developers tracking finances programmatically can dig into tools like hledger through daily.dev._

## Community take

How the wider developer community reacted, aggregated from 2 discussions and 29 comments across lobsters, hackernews (as of 2026-08-20).

**TL;DR:** Long-time plain text accounting users voice enthusiasm for hledger and beancount, sharing tips on manual entry workflows, bank statement imports, and tooling, while a few raise practical friction points like data entry burden and bank statement quality.

**Sentiment:** 75% positive · 20% mixed · 5% skeptical

**The case for**

- Several longtime users say double-entry plain text accounting has stuck with them for years unlike other tools they've tried.
- Multi-currency and commodity/inventory tracking features are praised as powerful, especially in beancount.
- Scripting and CLI-based workflows are described as enjoyable and well-suited to automation and even LLM-assisted tooling.
- Tools like fava provide visualizations that surpass what banks offer natively.

**The pushback**

- Manual transaction entry is a real burden for some, especially if you fall behind and have to catch up on weeks of activity.
- Some banks provide vague transaction descriptions (e.g. just 'Spending' or amounts with no vendor info), undermining the CSV-import workflow.
- Sharing plain text ledgers with a partner who prefers a GUI/phone app is a friction point.
- Integrating shared/split expense tracking (e.g. Splitwise-style) with double-entry systems is unclear and confusing.

**By community**

- lobsters (positive): Enthusiastic, experience-sharing thread from people already using hledger, beancount, or similar tools, with practical tips and some minor gripes about data entry and bank statement quality.
- hackernews (mixed): No discussion content was available to assess.

**Open questions**

- How best to integrate double-entry plain text ledgers with shared/split expense tracking tools like Splitwise.
- Whether and how to automate bank transaction ingestion via APIs versus manual entry or CSV import.

**Highlights**

> Do you really enter every transaction manually into hledger? So if you spend a day out and have a coffee, buy a book and dinner you keep the receipts and sit down in the evening to enter it? Is it discouraged to use your bank's/credit card's API or something to ingest the transactions?
> — [lenny on lobsters · 1 points, 3 comments](https://lobste.rs/s/i4lxyt/plain_text_accounting_is_pretty_cool#c_dz4tjf)

> So this whole thing relies on having a bank that populates your statements with more detail than "Payment for Goods/Services" or "Purchase via eChannels" or <Debit card branded name>".... I don't think it's going to work for me then.
> — [stephenr on lobsters · 1 points, 1 comments](https://lobste.rs/s/i4lxyt/plain_text_accounting_is_pretty_cool#c_tjj7d9)

> On Saturday afternoon, you pull the last ~8 days of activity from your bank as a csv. Then you use a script or macro to swizzle it into hledger format, then you correct it. Not that huge a burden, until you miss ~12 weeks and decide to just start from a new baseline lol
> — [rondahlgren on lobsters · 1 points, 2 comments](https://lobste.rs/s/i4lxyt/plain_text_accounting_is_pretty_cool#c_jaqakn)

> I'd be fine with hledger personally, but I manage my finances with someone less interested in learning to interact directly with plain text and would rather use a phone with a GUI. I'm considering hledger Android and Syncthing but I'm not sure how well those will hold up in practice.
> — [liberty on lobsters · 1 points](https://lobste.rs/s/i4lxyt/plain_text_accounting_is_pretty_cool#c_vyzsnf)

> Any tips on how to best integrate my double-entry based system (like hledger, Beancount) with shared expense tracking (like spliit.app, Splitwise)? I guess it would be possible to convert transactions entered to the expense tracker into the plaintext format. But for expenses I paid, there already will be a transaction, so they have to be merged somehow. Do I use an intermediary account here? And I also got confused because one ends up tracking assets and liabilities of *others*. Any solutions out there?
> — [lorenzleutgeb on lobsters · 1 points](https://lobste.rs/s/i4lxyt/plain_text_accounting_is_pretty_cool#c_0lns0i)

**Source threads**

- [lobsters](https://lobste.rs/s/i4lxyt/plain_text_accounting_is_pretty_cool) · 63 points · 29 comments
- [hackernews](https://news.ycombinator.com/item?id=49367783) · 1 points · 0 comments

## Similar posts on daily.dev

- [One Number I Trust: Plain-Text Accounting for a Multi-Currency Household](https://daily.dev/posts/one-number-i-trust-plain-text-accounting-for-a-multi-currency-household-rpex4z21e) · Lobsters · 0 upvotes · 0 comments
- [10 years of personal finances in plain text files](https://daily.dev/posts/10-years-of-personal-finances-in-plain-text-files-uscnbakm1) · Hacker News · 0 upvotes · 0 comments
- [Modern and Flexible Accounting](https://daily.dev/posts/modern-and-flexible-accounting-lhvqrr3ir) · ElixirStatus · 41 upvotes · 0 comments
- [I ditched the fancy notes apps for a system so simple it almost feels boring](https://daily.dev/posts/i-ditched-the-fancy-notes-apps-for-a-system-so-simple-it-almost-feels-boring-rt1xg9cax) · XDA Developers · 20 upvotes · 2 comments
- [You Don't Know What a Ledger is For](https://daily.dev/posts/you-don-t-know-what-a-ledger-is-for-zjdw8smrs) · The PayEng Playbook · 0 upvotes · 0 comments

---

Tags: [#open-source](https://daily.dev/tags/open-source)

[View this post on daily.dev](https://daily.dev/posts/plain-text-accounting-is-pretty-cool-uhgpbwqu4)

```json
{"@context":"https://schema.org","@graph":[{"@type":"Organization","@id":"https://daily.dev/#organization","name":"daily.dev","url":"https://daily.dev","logo":{"@type":"ImageObject","url":"https://daily.dev/apple-touch-icon.png","width":180,"height":180},"sameAs":["https://twitter.com/dailydotdev","https://github.com/dailydotdev","https://www.linkedin.com/company/daily-dev-ltd"]},{"@type":"WebSite","@id":"https://daily.dev/#website","url":"https://daily.dev","name":"daily.dev","publisher":{"@id":"https://daily.dev/#organization"},"potentialAction":{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https://daily.dev/search?q={search_term_string}"},"query-input":"required name=search_term_string"}}]}
{"@context":"https://schema.org","@type":"TechArticle","headline":"Plain Text Accounting is Pretty Cool","url":"https://daily.dev/posts/plain-text-accounting-is-pretty-cool-uhgpbwqu4","mainEntityOfPage":{"@type":"WebPage","@id":"https://daily.dev/posts/plain-text-accounting-is-pretty-cool-uhgpbwqu4"},"datePublished":"2026-08-19T20:34:10.499Z","dateModified":"2026-08-20T09:07:54.823Z","description":"A personal experience report on switching from apps like Origin, Rocket Money, and Mint to plain text accounting using hledger for tracking personal finances....","image":"https://media.daily.dev/image/upload/s--2-1xRawN--/f_auto/v1722860399/public/Placeholder%2011","thumbnailUrl":"https://media.daily.dev/image/upload/s--2-1xRawN--/f_auto/v1722860399/public/Placeholder%2011","isAccessibleForFree":true,"articleSection":"Lobsters","inLanguage":"en","publisher":{"@type":"Organization","name":"daily.dev","url":"https://daily.dev","logo":{"@type":"ImageObject","url":"https://daily.dev/apple-touch-icon.png","width":180,"height":180}},"author":{"@type":"Organization","name":"Lobsters","logo":"https://media.daily.dev/image/upload/s--tl8v_Fku--/f_auto,t_logo/v1698841318/logos/lobste.jpg","url":"https://daily.dev/sources/lobsters"},"commentCount":0,"discussionUrl":"https://daily.dev/posts/plain-text-accounting-is-pretty-cool-uhgpbwqu4","interactionStatistic":[{"@type":"InteractionCounter","interactionType":{"@type":"LikeAction"},"userInteractionCount":0},{"@type":"InteractionCounter","interactionType":{"@type":"CommentAction"},"userInteractionCount":0}],"keywords":"open-source","timeRequired":"PT13M"}
{"@context":"https://schema.org","@type":"BreadcrumbList","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https://daily.dev"},{"@type":"ListItem","position":2,"name":"Lobsters","item":"https://daily.dev/sources/lobsters"},{"@type":"ListItem","position":3,"name":"Plain Text Accounting is Pretty Cool"}]}
{"@context":"https://schema.org","@type":"FAQPage","@id":"https://daily.dev/posts/plain-text-accounting-is-pretty-cool-uhgpbwqu4#faq","mainEntity":[{"@type":"Question","name":"How do you record a transfer between two accounts in hledger so both journal files stay balanced?","acceptedAnswer":{"@type":"Answer","text":"Use an intermediate equity:transfers account to represent money in transit between accounts. In the source account's journal file, debit the account and credit equity:transfers; in the destination account's journal file, debit equity:transfers and credit the destination. This keeps each account's journal file reading like a linear bank statement while the overall books stay balanced, and it gives visibility into transfers that take days to settle. Developers building personal finance tooling can find more hledger patterns like this through daily.dev."}},{"@type":"Question","name":"How do I record a reimbursable work expense in hledger without it showing up as a personal expense?","acceptedAnswer":{"@type":"Answer","text":"Post the expense against an accounts-receivable asset account instead of an expense account, for example assets:accounts-receivable:expense-reimbursement:employer-name. When the reimbursement arrives, debit checking and credit that receivable account back to zero. This avoids the problem of a large expense in one month and a matching negative expense the next month once reimbursed, and it correctly zeroes out even when the original expense spanned multiple subcategories. Anyone automating expense tracking can compare double-entry approaches like this via daily.dev."}},{"@type":"Question","name":"How do balance assertions work in hledger and what happens when they fail?","acceptedAnswer":{"@type":"Answer","text":"A balance assertion is written after an amount using the = syntax, such as $32.00 = $82.00, asserting the account's running balance at that point. Running hledger check replays all transactions and reports a failure showing the journal file, line number, the asserted balance versus the calculated balance, and the difference, helping catch data-entry errors or unaccounted transactions early. Developers tracking finances programmatically can dig into tools like hledger through daily.dev."}}]}
```

