beancount
Command-line Double-Entry Accounting
What it is and what it does
Beancount is a command-line double-entry accounting system designed for developers and power users who want to track finances in plain text. You write financial transactions in a simple text-based format, load them into memory, and generate reports such as balance sheets and income statements, or query the data using an SQL-like language. It also includes a web interface to render reports to HTML and provides infrastructure to automate conversion of external financial data into Beancount syntax.
The package is actively maintained, has an engaged user base, and depends on only three common libraries: click, python-dateutil, and regex. It requires Python 3.9 or later and is released under GPL-2.0-only, which means any modifications or derived works must also be open-source under the same license.
Use it for:
- Track personal finances in version-controlled text files alongside code repositories.
- Generate monthly or annual balance sheets and income statements from transaction records.
- Query and aggregate financial data across multiple accounts using SQL-like syntax.
- Automate import of bank statements or investment data into a unified ledger format.
- Build custom financial reports by parsing Beancount's in-memory transaction objects.
Worth the install?
AI-flagged interpretation of the facts on this page — verify before relying
Beancount is a double-entry accounting system that reads financial transactions from text files, loads them into memory, and generates reports like balance sheets and income statements with an SQL-like query interface.
Yes, if you want a text-based accounting system that integrates with your development workflow. The package is actively maintained, has no known vulnerabilities, and three lightweight dependencies. The GPL-2.0-only license is not a barrier for personal or internal use but matters if you plan to redistribute or embed it in proprietary software. Medium install friction is typical for compiled packages.
Install
beancount on PyPI
pip
pip install beancountuv
uv add beancountpoetry
poetry add beancountInstalling beancount
Before you install
Medium install friction due to compiled wheels; actively maintained with recent commits and a substantial user base. Requires Python 3.9 or later. Three lightweight runtime dependencies with no known security vulnerabilities.
License in practice
GPL-2.0-only copyleft license means any derivative work or modification must also be released under GPL-2.0. This restricts commercial redistribution or proprietary extensions without source disclosure.
Quickstart
pip install beancount
from beancount import loader
entries, errors, options = loader.load_file('ledger.beancount')
Requires Python 3.9 or later; a Beancount-format text file is needed to load transactions.
Verify before relying
- Whether the web interface and HTML report rendering require additional dependencies beyond click, python-dateutil, and regex.
- Performance characteristics when handling large transaction files or complex queries.
- Availability of plugins or extensions for automating external data conversion beyond the scaffolding mentioned.
Package facts
| License | GPL-2.0-only (copyleft) |
| Python support | supports the current Python release (>=3.9) |
| Install friction | medium — platform-specific wheel |
| Runtime dependencies | 3 — click, python-dateutil, regex |
| Maintenance | actively maintained — 101 days since the last release |
| Last repo commit | |
| First released | |
| Downloads | 147,941/month — #11,047 on PyPI (30-day window, as of 2026-08-14) |
| Known vulnerabilities | none known (OSV.dev, checked 2026-08-14) |
Evidence: beancount-3.2.3-cp310-cp310-macosx_10_9_x86_64.whl; beancount-3.2.3-cp310-cp310-macosx_11_0_arm64.whl; beancount-3.2.3-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl; beancount-3.2.3-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl; beancount-3.2.3-cp310-cp310-win32.whl; beancount-3.2.3-cp310-cp310-win_amd64.whl; beancount-3.2.3-cp311-cp311-macosx_10_9_x86_64.whl; beancount-3.2.3-cp311-cp311-macosx_11_0_arm64.whl; beancount-3.2.3-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl; beancount-3.2.3-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl; beancount-3.2.3-cp311-cp311-win32.whl; beancount-3.2.3-cp311-cp311-win_amd64.whl; beancount-3.2.3-cp312-cp312-macosx_10_13_x86_64.whl; beancount-3.2.3-cp312-cp312-macosx_11_0_arm64.whl; beancount-3.2.3-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl; beancount-3.2.3-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl; beancount-3.2.3-cp312-cp312-win32.whl; beancount-3.2.3-cp312-cp312-win_amd64.whl; beancount-3.2.3-cp313-cp313-macosx_10_13_x86_64.whl; beancount-3.2.3-cp313-cp313-macosx_11_0_arm64.whl
Tags
More Utilities packages
Converts domain names between Unicode and…
permissive · top 100 on PyPI
charset-normalizerDetects and normalizes text encoding from…
permissive · top 100 on PyPI
setuptoolsSetuptools is a Python build backend and…
permissive · top 100 on PyPI
pluggyPluggy provides a plugin system that lets you…
permissive · top 100 on PyPI
PygmentsPygments is a syntax highlighter that colorizes…
permissive · top 100 on PyPI
sixSix provides utility functions to write Python…
permissive · top 100 on PyPI
mt-940Parses MT940 bank statement files into fully…
permissive · top 15,000 on PyPI
tigerbeetlePython client library for TigerBeetle, a…
permissive · top 15,000 on PyPI
bai2Parses and writes BAI2 files, a standard format…
permissive · top 15,000 on PyPI
ofxparseParses Open Financial Exchange (.ofx) format…
permissive · top 15,000 on PyPI
beanstreamProvides a Python client library for the…
permissive · top 15,000 on PyPI
eth-accounteth-account signs Ethereum transactions and…
permissive · top 5,000 on PyPI
numbers-parserRead, edit, and write Apple Numbers spreadsheet…
permissive · top 5,000 on PyPI
ofxtoolsParses, generates, and converts Open Financial…
copyleft · top 15,000 on PyPI
xlsx2csvConverts XLSX spreadsheet files to CSV format,…
permissive · top 5,000 on PyPI
edgartoolsEdgarTools parses SEC EDGAR filings into typed…
permissive · top 5,000 on PyPI