I’ve been the volunteer treasurer for a local nonprofit (youth sports league, ~$200K annual budget) for the past 3 years. We migrated from QuickBooks to Beancount 18 months ago, and I want to share what we learned about donor transparency and real-time reporting.
Why We Switched
Our league was paying $600/year for QuickBooks Online Plus, but parents (who are essentially our “donors” via registration fees and fundraising) kept asking questions we couldn’t easily answer:
- “How much is left in the equipment fund?”
- “Did my team’s fundraiser money go toward the new scoreboard?”
- “What’s our cash position right now?”
QuickBooks could answer these questions, but it required logging in, navigating menus, and running custom reports. As a volunteer treasurer with a day job, I needed something I could query quickly and share transparently.
Beancount Setup for Fund Accounting
We structured our accounts by fund, following the approach in Beancount’s fund accounting documentation:
2024-01-01 open Assets:Bank:Operating
2024-01-01 open Assets:Bank:EquipmentFund
2024-01-01 open Assets:Bank:ScholarshipFund
2024-01-01 open Assets:Bank:Scoreboard2025
2024-01-01 open Income:Registrations:Operating
2024-01-01 open Income:Fundraising:EquipmentFund
2024-01-01 open Income:Donations:ScholarshipFund
2024-01-01 open Income:Donations:Scoreboard2025
2024-01-01 open Expenses:Uniforms
2024-01-01 open Expenses:FieldRental
2024-01-01 open Expenses:Scholarships
Each “fund” is essentially a sub-ledger. I can run reports on any single fund and it balances independently.
Real-Time Donor Queries
This is where Beancount shines. Parents ask “how much in the equipment fund?” I run:
bean-query league.beancount "SELECT sum(position) WHERE account ~ 'EquipmentFund'"
Instant answer. No navigating software. Just query the plain text file.
For Board meetings, I open Fava (the web interface) and screen-share. The Board sees:
- Real-time fund balances
- Transaction history with full audit trail
- Income statement by fund
- Balance sheet
What We Did NOT Do
We did not build a fancy donor portal. Here’s why:
-
Security: Our .beancount file has parent names, addresses, and payment info. We’re not exposing that publicly.
-
Complexity: Building a secure, donor-facing web portal requires authentication, permissions, ongoing maintenance. We’re a volunteer-run youth sports league, not a software company.
-
Actual demand: We thought parents wanted real-time access. Turns out, they just wanted answers to their questions.
Our “Donor Transparency” Solution
Instead of building software, we do this:
-
Monthly email updates: I run bean-query for each fund balance, paste into email template, send to all families. Takes 10 minutes.
-
Quarterly financial summary: Generate PDF from Fava showing income statement, balance sheet, fund balances. Post to our website. Takes 30 minutes.
-
On-demand queries: Parents email me questions, I run bean-query, reply within hours.
Time Comparison
QuickBooks era (before Beancount):
- Monthly reconciliation: 3-4 hours (fighting bank import issues)
- Answering parent questions: 1-2 hours/month (logging in, navigating, running reports)
- Quarterly board reports: 2 hours (exporting, formatting)
- Total: ~10-12 hours/month
Beancount era:
- Transaction entry: 2 hours/month (we batch-import from bank CSV)
- Monthly email: 10 minutes (run queries, paste, send)
- Quarterly reports: 30 minutes (Fava export to PDF)
- Parent questions: 30 minutes/month (instant bean-query responses)
- Total: ~3 hours/month
Saved 7-9 hours/month + $600/year software cost.
Lessons Learned
-
Start simple: Don’t build the donor portal first. Start with basic reports. See if that satisfies 90% of requests.
-
Security matters: Even small nonprofits have sensitive data. Read-only Fava with password protection for Board access, but not public.
-
Plain text = audit trail: When our league was audited for a grant application, the auditor loved that every transaction was in Git with timestamps. Perfect compliance.
-
You don’t need commercial software: For small nonprofits (<$500K budget), Beancount + simple reporting is often better than expensive commercial solutions.
-
Volunteer-friendly: Other board members can clone the Git repo and run queries themselves. No license fees, no access controls, just plain text.
Would I Recommend This?
Yes, if:
- You have at least one person comfortable with command-line tools
- Your budget is under $1M (above that, you might need audited financials and commercial software)
- You value transparency and audit trails
- You want to save money on software licenses
No, if:
- Nobody on your team is technical (stick with QuickBooks or Wave)
- You need payroll integration (Beancount doesn’t do payroll)
- You’re required to use specific software for compliance (some grants require QuickBooks or similar)
For Larger Nonprofits Considering This
If you’re a $1M+ budget nonprofit currently paying $20K-50K/year for Blackbaud or NetSuite, I’d say:
- Beancount can absolutely handle the fund accounting
- The audit trail is superior to commercial software
- BUT you’ll need real developer resources to build custom reporting
- Consider hybrid: Beancount for internal books, generate reports for donor portal
Questions Welcome
Happy to share our chart of accounts, importer scripts, or query templates. Plain text accounting isn’t just for personal finance nerds—it’s genuinely useful for small nonprofit transparency.
We’re not trying to compete with Blackbaud. We’re just a youth sports league that wanted to answer parents’ questions without paying $600/year or spending 10 hours/month on bookkeeping.
If that resonates, maybe plain text accounting is worth exploring for your nonprofit too.