plaintextaccounting.org
Welcome! Plain text accounting is a way of
doing bookkeeping and accounting with plain text files and scriptable,
command-line-friendly software, such as Ledger, hledger, or Beancount.
This site collects the PTA community's tools, docs and practices. It is
maintained by Simon Michael (hledger project leader, PTA fan) and
contributors like you. See also our discussion forum and chat rooms.
Site map
What is Plain Text Accounting ?
News &
discussion
Videos
Slides
Docs: Accounting basics , PTA app docs , comparisons , intros , cheatsheets , cookbooks
, FAQs
FAQ
Cookbook
Software: PTA apps , Feature
matrix , Editor plugins , Data import/conversion , Price fetching , Data generation , Workflows , Formatting ,
Reporting , Time
logging , UI, console , UI, curses , UI, GUI , UI, web , UI, mobile , Library , Utilities , API
This is a community-supported site; if you find it useful, why not
contribute to the github
repo or help with finance. Thank you sponsors, including:
Chat - matrix
room - matrix
space - IRC
channel - project chats
Blogs & articles - See the PTA forum's News category
and RSS
feed - Older blogs &
articles, 2006-2024
PTA forum - forum.plaintextaccounting.org
Reddit - /r/plaintextaccounting
Lemmy - lemmy.world/c/plaintextaccounting
Hacker News - stories
- comments
Mastodon - #plaintextaccounting
- #ledgercli - #hledger - #beancount
Twitter - #plaintextaccounting
- #ledgercli
- #hledger - #beancount - LedgerTips 2014-2018
Stack Exchange - ledger-cli
tag - ledger-cli
search - hledger
tag - hledger
search
Project specific - Project mail
lists - This Week In
Hledger
plaintextaccounting.org site - commits
- contributors
- issues
- email the site
admin
https://www.youtube.com/results?search_query=plaintextaccounting
- Thanga
Ayyanar: Ledger CLI (in Tamil) 2024
- Edwin
Espinoza: Ledger CLI, Personal finance in the command line 2023
- Prakash Joshi
Pax: How to Use Obsidian to Track Your Expenses 2022
- Peter
Berger: Plain Text Accounting: An Opinionated View 2022
- Glenn Ramsey:
Plain text accounting for fun and profit 2022
- 季路LJ:
Beancount |简略记账说明 2021
- Robert
Nielsen: hledger fan channel short hledger beginner lessons,
2019-2021
- Brian Ryall:
Managing Your Finances Using Python 2020
- Steve
Anderson: Plain Text Accounting: How to do Signed Number Accounting
2019
- Quiliro
Ordóñez: ledger-mode lightning talk 2019
- Dickson
S. Guedes: Cuide de suas FINANÇAS pessoais ou profissionais usando
TEXTO 2019
- John Nduli:
Plain Text Accounting 2019
- Jean Louis:
GNU Emacs database accounting and rant on text ledgers 2019
- Cindy
Zimmerman: Triple Entry Accounting, Ledger-cli, The blocktree hash tree
- Guld Ledger File Format 2018
- Colin Dean:
Plaintext Accounting with the ledger ecosystem 2017
- Colin Dean:
Plain Text Accounting 2017
- Simon Michael:
Hands-on with hledger 2016
- Chris Vollick:
hledger, an open source accounting tool 2016
- Austin Walker:
Conquering Your Finances with Emacs and Ledger 2016
- Simon Michael,
Randal Schwartz, Simon Phipps: FLOSS Weekly 375: hledger (3m overview, show notes)
2016
- John Wiegley,
Randal Schwartz, Aaron Newcomb: FLOSS Weekly 150: Ledger (show notes)
2011
Accounting basics , PTA app docs , Comparisons , Intros , Cheatsheets , Cookbooks
, FAQs
PTA apps , Editor plugins , Data import/conversion , Price fetching , Data generation , Workflows , Formatting ,
Reporting , Time
logging , UI, console , UI, curses , UI, GUI , UI, web , UI, mobile , Library , Utilities , API
To do Plain Text Accounting, try one (or more) of the apps below.
Generally it's possible to migrate data between them.
A rough comparison of the big three PTA apps' main features,
plus some relevant third-party tools in
italics. (Plus some
geeky technical bits that you may not care about.) Corrections and
suggestions are appreciated (chat).
You can also use this as a kind of overview, quick reference or porting
guide. (See also syntax quick reference.)
|
|
|
|
User
interfaces |
|
|
|
CLI: |
ledger |
hledger |
beanquery |
TUI: |
regdel |
hledger add, hledger-ui, hledger-iadd,
puffin |
bean-add |
GUI: |
Prudent, ledgerble, addtrans |
fruit-credits |
|
WUI: |
ledgeraccounting,
paisa, cashier, ledgible, ledger (howeyc), ledger-web (vifon),
ledger-web
(peterkeen), ledger-pyreport,
ledger-analytics,
node-ledger-web |
hledger-web,
ledgeraccounting,
paisa, cashier |
fava, paisa, BeanHub |
Android: |
cashier, NanoLedger |
cashier, MoLe, NanoLedger |
Beancount Mobile CE,
beancount-mobile
(xuhcc) |
IOS: |
|
|
Beancount Mobile CE |
|
|
|
|
Help |
|
|
|
CLI help: |
general --help, also available as man page |
general and command-specific --help, commands summary,
built-in asciinema
demos |
command-specific --help |
TLDR short help: |
ledger |
hledger and
commands,
also built-in |
|
User manual formats: |
web |
web, info, man, also built-in
info/man/text with jump
to topic |
web |
Active support channels: |
|
chat, mail list, forum, reddit |
mail list |
Easy install and setup: |
yes |
yes |
no |
|
|
|
|
Data
formats |
|
|
|
Input formats: |
journal
(ledger), timeclock,
csv |
journal
(hledger), timeclock, timedot, csv, tsv, ssv, *sv |
journal
(beancount) |
Output formats: |
text, csv,
xml, lisp |
text, html,
csv, tsv, fods, beancount, sql, json |
text, ? |
|
|
|
|
Commands |
|
|
|
Commands: |
accounts, balance,
cleared,
commodities,
convert,
csv,
entry, emacs,
equity,
lisp,
payees, pricemap,
pricedb,
prices,
print,
register,
select, source, stats, tags |
accounts, activity, add, aregister, balance, balancesheet,
balancesheetequity,
cashflow, check, close, codes, commodities, demo, descriptions,
diff, files, help, import, incomestatement,
payees, prices, print, notes, register, rewrite, roi, stats, tags, test |
beancount: check,
doctor,
example,
format |
Add-on commands: |
|
bar, check-fancyassertions,
edit, git, iadd,
interest,
lots, move, pijul, plot.. |
beanquery: balances,
journal,
print,
select |
|
|
|
|
Configuration |
|
|
|
Config file: |
general
options |
general and
command-specific options |
? |
Extensibility: |
built-in
expression language, embedded
python, HTTP-JSON |
add-on
commands, haskell
library, HTTP-JSON |
data-modifying
plugins, python
library |
|
|
|
|
Other
features |
|
|
|
Account names: |
any |
any |
capitalised,
no spaces, english top level names |
Account types awareness: |
no |
yes |
yes |
Budget report: |
built-in |
built-in |
fava |
Charting tools: |
paisa, etc.. |
activity, hledger-bar, hledger-web, hledger-plot,
paisa, etc.. |
paisa.. |
Commodity names: |
any,
on left or right, optional |
any, on left or
right, optional |
2-24
uppercase letters / digits / punctuation, on right, required |
Data importing: |
built-in
from CSV, others.. |
built-in from any
input format, others.. |
beangulp
framework, beancount_reds_importers
framework, beancount-import
library, others.. |
Data deduplication: |
checksum-based
(requires unique CSV records) |
date-based
(requires date-ordered CSV records) |
? |
Date range: |
1400-01-01 to 9999-12-31 |
0000-01-01 onward |
0001-01-01 to 9999-12-31 |
Generate postings by rule: |
built-in |
built-in |
? |
Generate recurring transactions: |
built-in |
built-in |
beancount-repete |
International number notations: |
no |
yes |
no |
Lot management: |
lot
matching syntax, lots
report, revaluation
transactions, lotter |
manual,
hledger-lots,
hledger-move,
lotter |
lot
matching syntax, ? |
Multi-period balance reports: |
no |
yes |
fava |
Pivoting: |
on
single tag |
on one or more
tags / other fields |
no |
Precision (journal): |
254 significant digits |
"unlimited" integer digits + 255 decimal digits |
28 significant digits |
Precision (internal): |
"unlimited"
(rational numbers) |
"unlimited"
integer digits + 255 decimal digits |
28
significant digits |
Precision (balancing): |
max
precisions in local entry |
global
commodity precisions |
max
precisions in local entry / 2 (configurable) |
Precision (display): |
inferred
commodity precision, or a default max precision of 6 |
inferred
/ specified commodity precision, or a default max precision of
8 |
inferred
commodity precision, or a default max precision of 0
(configurable) |
Price fetching: |
pricehist |
pricehist |
beanprice,
pricehist |
Querying: |
cli
options, custom
query expressions |
cli options,
custom query
expressions, sql |
SQL-like
beancount query language |
REPL: |
built-in |
haskell
GHCI |
beanquery,
python |
Shell completions: |
bash
(commands, flags, maybe accounts) |
bash
(commands, flags, flag values, query types, journal data) |
|
Unrealised gains report: |
--unrealized |
--gain,
roi |
fava |
Validation: |
configurable |
configurable |
always
strict |
Miscellaneous: |
? |
standard
financial reports |
? |
|
|
customisable
account display order |
|
|
|
customisable amount styles for input and output |
|
|
|
documentation-first
development |
|
|
|
regular
releases |
|
|
|
regression
bounties |
|
|
|
|
|
Atom - language-ledger - ledger
Emacs - beancount-mode -
hledger-mode -
ledger-mode
(good for hledger also)
IntelliJ - Ledger
CLI
Nano - scopatz/nanorc
Sublime - sublime-ledger-syntax
TextMate - Ledger.tmbundle
VIM - vim-ledger - vim-beancount -
hledger-vim - cmp-beancount
VS Code - hledger-vscode - ledger
- vscode-beancount
- Ledger
and hledger have CSV
conversion built in. Also:
- bean-identify, bean-extract, bean-file - Beancount built-in
tools
- banks2ledger -
CSV to *ledger converter
- beanborg
Advanced transaction importer with auto-categorization (python)
- beancount-import web
app/framework for converting various formats to beancount (python)
- beancount-reds-importers
Simple importers and tools for Beancount. A framework to allow you to
easily write your own importers.
- beancount-ynab
Import YNAB4 (legacy desktop-based version) into beancount
- beancount-ynab5
Import YNAB5 (cloud-based version) transactions into beancount
- beanhub-extract
Simple Python library for extracting all kinds of bank export CSV files
into standardized transaction data objects
- beanhub-import
Declarative idempotent rule-based beancount transaction import engine in
Python consumes data extracted by beanhub-extract
- buchhaltung
CSV/FinTS/HBCI/OFX to *ledger conversion/deduplication (haskell)
- Costflow convert one line
message to beancount/*ledger format
- csv2beancount CSV
to beancount converter (clojure)
- CSV2Ledger CSV to
*ledger converter (perl)
- double-entry-generator
Rule-based double-entry bookkeeping importer (from Alipay/WeChat/Huobi
etc. to Beancount)
- fints2ledger
FinTS/HBCI to csv to *ledger or beancount journals (python)
- gcash2ledger.py
GNUCash XML to *ledger converter (python)
- gnucash-to-beancount
GNUCash sqlite to beancount converter (python)
- gnucash2ledger.py
GNUCash sqlite to *ledger converter (python)
- grisbi2Ledger
Grisbi to *ledger converter
- gsheet-csv.hs
a script to download Google sheets (haskell)
- hledger-Excel
Excel spreadsheet to *ledger journal converter (visual basic for
applications)
- hledger-import-dsl
alternate, programmable CSV converter for hledger
- hledger-to-influxdb
hledger to InfluxDB converter (haskell)
- hledger2beancount
hledger to beancount converter (haskell)
- homebank2ledger
HomeBank to ledger and beancount converter (perl)
- icsvledger
interactive CSV to *ledger converter (python)
- into-ledger
CSV to *ledger converter
- invoice2data
extract data from PDF invoices (python)
- jali
downloader/importer to *ledger (python)
- kmymoney2hledger
KMyMoney to *ledger converter (clojure)
- kmymoney2ledgers
KMyMoney to *ledger/beancount converter (python)
- kmymoney2ledgers.awk
KMyMoney to *ledger/beancount converter (Awk)
- ldgclip import
bank transactions via the clipboard with one click (bash/awk)
- Ledger in Go has
limport, a CSV to *ledger converter
- ledger-autosync
OFX download, OFX to *ledger conversion, deduplication
- ledger-guesser
neural network for generating entries like past ones, can be used with
ledger-autosync (javascript)
- ledger-myexpenses
MyExpenses android app sqlite db to *ledger conversion (python,
2017)
- ledgermyexpenses
sync MyExpenses android app to/from Ledger (bash, 2023)
- ledger-to-beancount
yet another simple ledger to beancount converter (python)
- ledger-tutorials
convert Pete Keen's tutorials to ebook format
- ledger2beancount.py
*ledger to beancount converter
- ledger2beancount/beancount2ledger
the best converter between h/ledger and beancount formats (perl).
- moneymoney-ledger
MoneyMoney export extension for *ledger
- outofit QuickBooks
to *ledger converter
- piecash GNUCash
SQL to *ledger converter (python)
- plaid2qif
Download transactions from plaid as QIF or CSV files
- plaid2text
Plaid API to *ledger/beancount download/conversion
- qb2ledger
QuickBooks General Journal CSV to *ledger converter
- QIFtoLedger
(Bank of America's) QIF to *ledger converter
- reckon smart
interactive/non-interactive CSV to *ledger converter
- slc generates
Ledger accounting entries, works with generic CSV files as well as the
Stripe API
- smart_importer
library for building smarter CSV to beancount/Fava converters
- Tiller service to download
from mostly-US banks to google or microsoft spreadsheets (commercial but
pretty good)
- total_recall CSV
to *ledger converter
- ynab-to-ledger
You Need A Budget (YNAB) to *ledger converter. Handles multiple
currencies, multiple number formats, reconciliation, memos, transfers,
and split transactions
- ynab_to_ledger You
Need A Budget to *ledger converter
- bean-price
Beancount's price fetching tool (python)
- hledger-stockquotes
download market prices for your hledger commodities (haskell)
- ledger-get-prices
download market prices (ruby)
- LedgerStockUpdate
update a Ledger price database (go)
- market-prices
download market prices from several sources (python)
- market-prices.hs
small, easy to adapt script to scrape market data from the internet
(Haskell)
- pricehist
fetch and format historical price data, with support for multiple
sources and output formats (python)
- the-solipsist/scripts
download prices for your hledger commodities, including indian
commodities (bash)
- beancount-extract-price
generate prices transactions based on your beancount ledger
(python)
- DepreciateForLedger
generate *ledger depreciation transactions (python)
- hledger-interest
generate *ledger interest entries (haskell)
- ledger-ts
typescript EDSL for generating beancount journals (typescript)
- ledgerbil
schedule recurring txns, interactive reconcile, date sorting
- LedgerScheduler
move entries from one file to another when they come due (python)
- lotter generate postings
for capital gain/loss (go)
- recurring
generate recurring *ledger entries (python)
- reorder-journal.sh
sort hledger entries, preserving directives/comments at top of file
(bash)
- sassetti adds lisp
macros to ledger files (common lisp)
- kairos (repo) generate
invoices from hledger timedot files (go)
- docker-finance
hledger/hledger-flow/docker-based system for tracking and reporting on
traditional and cryptocurrency finances
- Full-fledged
hledger scripts and detailed tutorial for generating hledger
journals from CSV files (haskell, shell)
- hledger-flow
command-line tool to generate hledger (or Ledger) journals from CSV
files (haskell)
- rtrledger
another hledger journals from CSV files system, designed for chaotic
German freelancers (shell etc.)
- Lazy
Beancount Beancount packaged in Docker with additional plugins and
tools
- budget_report
budget reporting with beancount (python)
- gainstrack
personal wealth analysis app with beancount export
(scala/typescript)
- hledger-diff
report differing transactions between two journals (haskell)
- hledger-irr
calculate an account's internal rate of return (superseded by roi) (haskell)
- hledger-sankey
Script + HTML files to plot income next to expense money flows from an
hledger ledger file (shell + javascript)
- hledger-tools
generating charts from hledger (typescript)
- hledger-vega
makes configurable vega-lite charts from
hledger (shell)
- hreports customise
hledger reports with templates and PDF output (python)
- ledger-plot
interactive tool for making GNUplot charts from Ledger (python)
- ledger-plots
R package & script to make charts from Ledger (R)
- r-ledger an R
package for reading and reporting on ledger/hledger/beancount files
(R)
- TaxingLots
calculates capital gains for a ledger journal (python)
- org2tc org to
timeclock converter
- on-modify.timetrack.py
taskwarrior hook for timeclock output
- t ledger timeclock
shellscript
- tim time
logging/reporting tool using hledger
- timekeeping-template
time logging/reporting examples/how-to using hledger
- tito time logging
bash scripts that avoid double clock-in
- bean-add
interactive transaction entry tool (python)
- hledger add
interactive transaction entry tool (builtin command)
- ladd
create and edit a new *ledger transaction by fuzzy-matching past
descriptions
- ldgr command
line tool to add/sort/tag ledger files (ruby)
- ledger
xact history-aware transaction generator (builtin command)
- hledger-iadd
TUI for *ledger transaction entry (haskell)
- hledger-ui TUI
for *ledger browsing (haskell, video)
- ledger-add TUI
for *ledger transaction entry (python)
- puffin TUI for
hledger browsing (go)
- regdel TUI
for browsing Ledger files (python)
- favagtk
app of Fava web UI for beancount browsing (Python, GTK)
- fruit-credits
data entry/reporting GUI for hledger (Vala, GNOME)
- ledgerble
reporting GUI with charts & adjustable reports (Javascript)
- ledgerhelpers
misc. GUI tools + helper library (Python, GTK)
- Prudent integrated journal
editing/importing/reporting GUI for Ledger (Javascript, mac only, closed
source)
- fava web UI for
beancount browsing (python, demo)
- hledger-web
web UI for *ledger browsing, data entry (haskell, demo, Sandstorm
app)
- hledger-web-rs web
UI for hledger reports (rust)
- Paisa web UI or desktop app for
ledger, hledger and beancount (go, javascript, demo)
- Ledger in Go web UI
for browsing ledger transactions, reports, and porfolios
- Ledger Web
ledger HTML reporting system (ruby, postgres)
- Ledger Web web
UI/API for ledger browsing, data entry (python)
- ledger-analytics
web UI for ledger data analytics (javascript)
- ledger-dashboard web
UI for ledger browsing, data entry (python)
- ledger-pyreport
web UI for standard accounting statements and unrealised gains
(python)
- ledgeraccounting
web UI for hledger: data entry, basic reports and budgets
(javascript)
- ledgible web UI
for ledger browsing, data entry (python)
- n4s
danish-language ERP system (php)
- node-ledger-web
web UI for ledger browsing (javascript)
- WealthPulse web
UI for ledger browsing, price fetching (F#)
- BeanHub web UI for beancount
browsing, data entry with a Git repository (proprietary SaaS; some
components open source)
- gledger Go package
to interface with Ledger (go)
- hledger-lib
library for parsing and generating reports from *ledger files
(haskell)
- hledger-web
the web app includes a JSON API server for *ledger files (haskell)
- ledgerhelpers
extends Ledger's python library (python)
- node-hledger
Node.js API for *ledger files (javascript)
- BeanHub API proprietary
SaaS API for operating on hosted beancount repositories and beanhub-forms
(c) 2016-2024 Simon Michael & contributors |
Send updates via github