Beancount & Fava vs. commercial accounting software
Plain-text accounting is the best free bookkeeping system you can run, if you're part of a specific technical minority. Here's exactly who that is, and why we recommend it even though we earn nothing when you choose it.
The short version: Beancount + Fava gives you a real double-entry ledger you own forever, for $0, with perfect version control. If you're comfortable in a text editor and the command line, it's hard to beat. If you're not, or you need bank feeds, mobile receipt capture, payroll, or an accountant who can log in, a hosted tool's subscription buys back the hours plain-text would cost you. We run MULTIVAC LLC's own books on Beancount, so this comes from doing it, not guessing.
What "plain-text accounting" actually is
Beancount is a double-entry bookkeeping system where your entire ledger is a single human-readable text file. You record transactions as plain text, with a date, a description, and the accounts money moves between, and Beancount enforces that every entry balances, exactly like commercial accounting does under the hood. Fava is the web interface that reads that file and renders balance sheets, income statements, and interactive charts.
There's no vendor, no monthly fee, and no lock-in. Your data is a .beancount file on your own disk. Nobody can deprecate it, raise its price, or hold it hostage behind an export wall.
Why a money-tools site covers the free option
Because independence means telling you when not to pay. If a $0 tool fits your brain and your business, we'll say so, even though we earn no commission on it. That's the whole credibility play, and it's why you can trust the paid recommendations elsewhere on this site.
The head-to-head
| Dimension | Beancount + Fava | QuickBooks / Xero / FreshBooks |
|---|---|---|
| Price | $0 self-hosted | $15 to $80+/mo |
| Data ownership | Total; it's your text file | Vendor-hosted; export to leave |
| Learning curve | Steep (text + CLI + accounting) | Gentle, guided onboarding |
| Bank feeds | Manual / scripted CSV import | Automatic, built-in |
| Audit trail | Perfect; git the ledger | Vendor's history log |
| Reporting | Fava + custom queries (BQL) | Polished, click-to-generate |
| Accountant handoff | Friction (most don't know it) | Universal |
| Multi-user | DIY | Built-in roles |
Where Beancount + Fava genuinely wins
- Cost at scale. Transaction volume never raises the price. A tool that bills by clients, users, or features can quietly triple over a few years; a text file is free at one transaction or one million.
- Auditability. Commit the ledger to git and every change is diffable forever. You can see exactly what you edited and when, and roll back a mistake. No commercial tool gives you a cleaner audit trail than version control does.
- Automation. Importers, plugins, and scripts mean a technically inclined user can automate reconciliation in ways a closed SaaS simply won't allow.
- Longevity. A plain-text file outlives any vendor. Tools get acquired, sunset, or repriced; UTF-8 doesn't.
Where it loses, and this part matters most
- Onboarding. There's no hand-holding. You need to understand debits and credits, or at least be willing to learn them, before the file makes sense.
- Bank connections. No native live feeds. You import CSV or OFX and configure an importer per account. It's a one-time chore, but a real one.
- Accountant friction. Your CPA almost certainly doesn't use it. At tax time you'll be exporting reports rather than handing over a file they recognize.
- No built-in extras. No mobile receipt-snap, no payment links, no payroll. If you need those, they live in separate tools you'd stitch together yourself.
Who should actually use it
Use Beancount + Fava if
- You're a developer or technically comfortable founder who wants zero lock-in.
- You value data ownership and a git-backed audit trail over polish.
- You're happy living in a text editor and running a command or two.
Skip it (get a hosted tool) if
- You want to hand a login to a bookkeeper or accountant.
- You need payroll, built-in payments, or mobile receipt capture out of the box.
- The phrase "configure an importer" makes you want to close this tab.
Getting started (the five-minute version)
- Install both:
pip install beancount fava - Create a
main.beancountfile with your account names and opening balances. - Run
fava main.beancountand open the web UI it prints. - Import a month of transactions from a bank CSV.
- Reconcile, then read your first income statement in Fava.
The verdict
Beancount + Fava is a real, powerful, free alternative, and it's the right answer for a specific technical minority. It's the system we trust enough to run our own company's books on. But for most people, a hosted tool's subscription buys back the hours plain-text would otherwise eat. If you're not sure which camp you're in, you're probably in the hosted camp, and that's fine.
Common questions
Is Beancount really free?
Yes. Beancount and Fava are open-source and cost nothing. The only cost is your time to learn them; you can run Fava on your own laptop for $0, or self-host it on a small server if you want remote access.
Can my accountant use Beancount?
Probably not directly. Most US accountants work in QuickBooks and have never seen a plain-text ledger. You can export reports to PDF or CSV, but if your CPA will be in the books regularly, a mainstream tool removes a lot of friction.
Does Beancount connect to my bank?
Not automatically. There are no live feeds. You import CSV or OFX statements with Beancount's importer framework, configured once per account. That's more setup than a one-click feed, but it's fully scriptable.
Who should use plain-text accounting?
Developers and finance-comfortable solos who value ownership, zero lock-in, and version control, and don't mind a text editor. Everyone who wants hand-holding, receipt capture, payroll, or an accountant login is better served by a hosted tool.