One of the biggest wins of using Beancount is the ability to generate tax reports programmatically. Instead of manually categorizing a year’s worth of transactions, you can run a command and have everything organized.
I wanted to share the workflow I have developed over the years for generating reports my CPA can actually use.
Basic Tax Reports with bean-report
For a simple income/expense summary:
# Income statement for tax year 2025
bean-report ledger.beancount income -f 2025-01-01 -t 2025-12-31
# Export to CSV for spreadsheet work
bean-report ledger.beancount income -f 2025-01-01 -t 2025-12-31 --format csv > income_2025.csv
Custom Tax Summary Script
I wrote a Python script that generates a tax-form-friendly summary:
from beancount import loader
from beancount.query import query
ledger_file = "ledger.beancount"
entries, errors, options = loader.load_file(ledger_file)
# Query for Schedule C income
income_query = """
SELECT account, sum(position)
WHERE account ~ 'Income:Business'
AND year = 2025
GROUP BY account
"""
result = query.run_query(entries, options, income_query)
for row in result[1]:
print(f"{row[0]}: {row[1]}")
Mapping Accounts to Tax Forms
The key is structuring your chart of accounts to align with tax forms:
| Beancount Account | Tax Form Line |
|---|---|
| Income:Business:Consulting | Schedule C, Line 1 |
| Expenses:Business:Advertising | Schedule C, Line 8 |
| Expenses:Business:CarAndTruck | Schedule C, Line 9 |
| Expenses:Business:Legal | Schedule C, Line 17 |
| Income:Investments:Dividends | Form 1099-DIV |
| Income:Investments:Interest | Form 1099-INT |
Sharing with Your Accountant
Most CPAs do not want to learn Beancount. Here is what works:
Option 1: PDF Reports via Fava
- Use Fava’s print view to generate clean PDFs
- Income statement + Balance sheet are usually sufficient
Option 2: CSV Exports
- Export register or trial balance to CSV
- Import into Excel/Google Sheets
- Add formulas to roll up into tax categories
Option 3: Static HTML with bean-bake
- Generate a browsable HTML version of your ledger
- Accountant can explore transactions without learning tooling
- Read-only, so no risk of accidental changes
What Reports Does Your CPA Need?
In my experience, a good tax preparer needs:
- Income Summary: All income sources with totals
- Expense Summary: Business expenses by category
- Bank/Brokerage Statements: For verification
- 1099s and W-2s: Official forms you received
- Mileage Log: If claiming vehicle deduction
- Home Office Calculation: If applicable
Has anyone built more sophisticated tax reporting tools for Beancount? I am thinking about creating a proper Schedule C generator.