Real-Time Donor Portals on Plain Text Accounting: A Volunteer Treasurer's Experience

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:

  1. Security: Our .beancount file has parent names, addresses, and payment info. We’re not exposing that publicly.

  2. 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.

  3. 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:

  1. Monthly email updates: I run bean-query for each fund balance, paste into email template, send to all families. Takes 10 minutes.

  2. Quarterly financial summary: Generate PDF from Fava showing income statement, balance sheet, fund balances. Post to our website. Takes 30 minutes.

  3. 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

  1. Start simple: Don’t build the donor portal first. Start with basic reports. See if that satisfies 90% of requests.

  2. Security matters: Even small nonprofits have sensitive data. Read-only Fava with password protection for Board access, but not public.

  3. 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.

  4. You don’t need commercial software: For small nonprofits (<$500K budget), Beancount + simple reporting is often better than expensive commercial solutions.

  5. 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:

  1. Beancount can absolutely handle the fund accounting
  2. The audit trail is superior to commercial software
  3. BUT you’ll need real developer resources to build custom reporting
  4. 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.

This is fantastic timing. I run a small CPA practice and just last week had a client (local food bank, ~$800K budget) ask about alternatives to their current setup.

They’re using QuickBooks Desktop for accounting, but it doesn’t handle fund accounting well. They have 5 different restricted funds (building fund, operations, emergency relief, summer meals program, capital equipment) and currently track them in… wait for it… separate Excel spreadsheets that reference QB account numbers.

Every month, their executive director manually reconciles QB against the spreadsheets. It’s accounting purgatory.

Your Fund Accounting Structure Is Exactly What They Need

The account hierarchy you showed:

Assets:Bank:EquipmentFund
Income:Donations:ScholarshipFund

This is brilliant because each fund becomes its own self-balancing sub-ledger, which is exactly what ASC 958 (nonprofit financial reporting standards) requires. You can run a balance sheet on any fund individually and it balances.

Commercial nonprofit software (Blackbaud Financial Edge NXT, MIP Fund Accounting) does this, but charges $15K-40K/year for it. Beancount does it natively with plain text.

The Compliance Angle

Here’s what nonprofit accountants care about:

  1. Restricted vs Unrestricted Net Assets: ASC 958 requires tracking and reporting. Your fund structure handles this—just categorize funds as Restricted:BuildingFund or Unrestricted:Operations.

  2. Form 990 Reporting: The IRS Form 990 Schedule D asks for reconciliation of funds. With Beancount, you run bean-query for each fund balance, drop into the form. Done.

  3. Audit Trail: When nonprofits get audited (often required for grants over $750K), auditors want to trace every dollar. Git + Beancount = perfect audit trail. Every transaction timestamped, every change documented.

What I’d Add for CPA Practice Compliance

If I were setting up a client on Beancount for nonprofit accounting, I’d add:

  1. Monthly close checklist: Document the reconciliation process (bank statements vs ledger, fund balance verification)

  2. Board approval metadata: Add metadata to large transactions showing board approval date

    2024-06-15 * "Purchase new scoreboard" ^board-approved-2024-05-10
      Assets:Bank:Scoreboard2025  -25000 USD
      Expenses:CapitalPurchases    25000 USD
    
  3. Donor intent documentation: For restricted funds, document the donor restriction in transaction metadata or comments

  4. Annual financial statement generation: Most nonprofits need Statement of Financial Position, Statement of Activities, Statement of Functional Expenses. These can be generated from Beancount queries.

The Real Question: Who Does the Accounting?

Your setup works because you are technical and volunteer your time. But for a nonprofit that needs to hire a bookkeeper, will they find someone who knows Beancount?

Probably not. QuickBooks bookkeepers are everywhere. Beancount bookkeepers are rare.

So here’s my practical advice for nonprofits considering this:

  • Under $500K budget + technical volunteer: Absolutely use Beancount. Save the $600-3K/year software cost.
  • $500K-$2M budget + paying a bookkeeper: Hybrid approach—Beancount for internal books (technical person manages it), but generate reports that look like traditional financials for the board and bookkeeper.
  • Over $2M budget + audit requirements: Probably need commercial software for CPA firm integration. But you could still use Beancount internally and export to auditor-friendly formats.

Would Love to See Your Query Templates

You mentioned you run bean-query for fund balances and generate reports. Would you be willing to share:

  • Your query templates for fund balance reports
  • How you handle interfund transfers
  • Whether you track in-kind donations (donated goods/services)

I have a few clients who could benefit from this, and I’d love to build a Beancount nonprofit template that other CPAs could use.

Thanks for sharing this—it’s genuinely valuable for small nonprofits struggling with expensive software that doesn’t fit their needs.