As someone who’s worked with law firm finances for over a decade—including a stint as an IRS auditor—I can tell you that trust accounting is one of the most heavily scrutinized areas in professional practice. Trust account violations are the #1 reason attorneys face disciplinary action from state bars. So when I discovered Beancount’s potential for IOLTA compliance, I had to explore it seriously.
2026 brings critical new compliance requirements that small law firms need to address immediately:
- Starting January 1, 2026, all client trust accounts must designate a specific licensee who is responsible for reconciliations
- Existing accounts have until July 1, 2026 to comply
- California’s CTAPP (Client Trust Account Protection Program) reporting is due March 30, 2026
- The designated licensee must be a signatory and is personally liable for proper reconciliation
If you’re a solo attorney or small firm scrambling to meet these deadlines while managing trust accounts, read on.
The Trust Accounting Compliance Burden
The fundamental requirement is straightforward but demanding: monthly three-way reconciliation matching:
- Bank statement balance
- Trust account master ledger
- Sum of all individual client ledger balances
These three numbers must match perfectly every month. Add to this:
- Absolute prohibition on commingling: Not one penny of firm money can mix with client funds
- Transaction-level documentation: Every deposit, withdrawal, and transfer needs clear source documentation
- Interest income rules: Determining whether funds go into pooled IOLTA or individual interest-bearing accounts
- Bar association reporting: Quarterly and annual reports demonstrating compliance
- Audit preparedness: Complete records accessible for bar examiner review
Traditional legal accounting software handles this, but at significant cost: $50-150/month per attorney, vendor dependencies, and limited flexibility for complex scenarios.
Why Beancount Could Transform Trust Accounting
After experimenting with several attorney clients, I believe Beancount’s design principles align beautifully with trust accounting compliance requirements. Here’s my approach:
Account Architecture
The key insight: mirror client obligations with liability accounts
; Pooled IOLTA account (for small or short-term client funds)
2020-01-15 open Assets:Trust:IOLTA:WellsFargo
2020-01-15 open Liabilities:ClientFunds:SmithDivorce
2020-01-15 open Liabilities:ClientFunds:JonesEstate
2020-01-15 open Liabilities:ClientFunds:BrownRealEstate
; Individual interest-bearing trust accounts (large/long-term funds)
2020-01-15 open Assets:Trust:Individual:JohnsonSettlement:WellsFargo
2020-01-15 open Liabilities:ClientFunds:JohnsonSettlement
; Operating account (firm money - completely separate)
2020-01-15 open Assets:Checking:Operating:WellsFargo
The liability accounts track what you owe each client. The asset accounts track where the money actually sits. They must always balance.
Transaction Documentation with Metadata
Every trust transaction includes metadata required for compliance:
2026-03-10 * "Client retainer - Smith divorce case"
matter: "2026-DIV-001"
client_id: "SMITH-M-2026"
source: "Client check #1523"
deposit_type: "retainer"
Assets:Trust:IOLTA:WellsFargo 3500.00 USD
Liabilities:ClientFunds:SmithDivorce -3500.00 USD
2026-03-12 * "Court filing fees paid from trust"
matter: "2026-DIV-001"
expense_type: "court_costs"
receipt: "Superior Court receipt #45234"
Assets:Trust:IOLTA:WellsFargo -435.00 USD
Liabilities:ClientFunds:SmithDivorce 435.00 USD
2026-03-15 * "Earned fees - 8 hours legal work"
matter: "2026-DIV-001"
invoice: "INV-2026-0315"
hours: "8.0"
rate: "250"
Assets:Checking:Operating:WellsFargo 2000.00 USD
Assets:Trust:IOLTA:WellsFargo -2000.00 USD
Liabilities:ClientFunds:SmithDivorce 2000.00 USD
Income:LegalFees:FamilyLaw -2000.00 USD
Automatic Three-Way Reconciliation via Balance Assertions
This is the killer feature: Beancount’s balance assertions provide built-in three-way reconciliation.
; Month-end reconciliation for March 2026
2026-03-31 balance Assets:Trust:IOLTA:WellsFargo 23450.00 USD
; Individual client ledger balances must sum to match
2026-03-31 balance Liabilities:ClientFunds:SmithDivorce -2300.00 USD
2026-03-31 balance Liabilities:ClientFunds:JonesEstate -8650.00 USD
2026-03-31 balance Liabilities:ClientFunds:BrownRealEstate -12500.00 USD
; Total: -23,450.00 USD ✓ (liabilities are negative, matching positive asset balance)
If the bank statement shows $23,450 but your individual client balances don’t sum to exactly that amount, Beancount errors immediately. You cannot close your books for the month until reconciliation is perfect. This is exactly what bar associations require.
Compliance Reporting with Beancount Query Language
Bar associations require detailed reporting. BQL makes this straightforward:
-- Summary of all client fund balances (for quarterly bar report)
SELECT account, sum(position)
WHERE account ~ 'Liabilities:ClientFunds'
GROUP BY account;
-- All trust account activity for reporting period
SELECT date, narration, account, position
WHERE account ~ 'Assets:Trust'
AND date >= 2026-01-01
AND date <= 2026-03-31
ORDER BY date;
-- Identify potential commingling (operating funds in trust account)
SELECT *
WHERE account ~ 'Assets:Trust'
AND any_meta('expense_type') = NULL
AND NOT any_meta('client_id');
Critical Compliance Considerations
Interest Income Rules
This is where it gets complex. You must determine whether client funds should go into:
Pooled IOLTA account (interest goes to state bar foundation for legal aid):
- Small amounts where individual interest wouldn’t exceed account costs
- Short-term holdings (funds expected to be disbursed within weeks)
Individual interest-bearing trust account (interest belongs to client):
- Large amounts that can earn net interest (interest > account maintenance costs)
- Long-term holdings (settlement funds, estate administration)
The decision factors from Illinois rules (similar across states):
- Amount of client funds to be deposited
- Expected duration of deposit
- Interest rate at the financial institution
- Cost of establishing and administering separate account
- Bank’s capability to calculate and pay interest to individual client
State-Specific Reporting Variations
While the core principles are consistent, reporting formats vary:
- California: CTAPP annual reports, designated licensee requirements (new in 2026)
- New York: Reconciliation reports, IOLTANYapproved bank requirements
- Illinois: ARDC Client Trust Account Handbook compliance
- Texas: Quarterly reconciliation certifications
You’ll need to customize BQL queries for your jurisdiction’s specific report formats.
Outstanding Implementation Questions
I’m still working through several challenges:
-
Automated interest allocation: How to distribute IOLTA interest proportionally to client balances for accounting purposes (even though interest goes to the bar foundation)?
-
Commingling detection queries: What BQL patterns identify accidentally deposited operating funds in trust accounts?
-
Check register integration: Most firms still write physical checks from trust accounts. How to integrate check writing workflows?
-
Earned fee transfers: Automating the two-part transaction (trust → operating + liability reduction + income recognition)?
-
Bar examination exports: What format makes Beancount records most accessible to bar examiners during audits?
-
Cost advance tracking: How to clearly distinguish client cost advances (court fees, expert witnesses) from retainers?
Tax Reporting Implications
As a tax specialist, I must mention: trust accounts have tax reporting requirements too.
- Interest income: Even IOLTA interest must be reported (by the bar foundation, not the attorney)
- 1099 reporting: Some client disbursements may require 1099 forms
- Firm income recognition: Earned fees transferred from trust must be properly reported as income in the year earned
Beancount’s metadata capabilities make tax-time reporting much cleaner than traditional systems.
Seeking Practical Feedback
I’d love input from:
- Attorneys who handle trust accounting: What compliance nightmares keep you up at night?
- Bookkeepers managing law firm finances: What workflows would make this practical?
- Beancount developers: Are there plugins or tools that could make trust accounting more accessible to non-technical solo practitioners?
- Anyone who’s implemented regulatory compliance tracking in plain text accounting
Has anyone successfully deployed Beancount for trust accounting in production? What worked? What failed? What would you do differently?
The stakes couldn’t be higher: mishandled trust accounts can result in disbarment, criminal prosecution, and malpractice liability. But the opportunity is compelling: transparent, auditable, version-controlled trust accounting with zero recurring software costs and complete data ownership.
Am I missing critical compliance requirements? What questions should I be asking that I haven’t thought of yet?
Sources: