I need to share something that’s been keeping me up at night. Three of my nonprofit clients are in a state of near-panic right now, and honestly, I can’t blame them.
The Numbers Are Staggering
The FY2026 federal budget initially proposed cuts of roughly 40% to NIH and up to 57% to NSF. While Congress pushed back and the final numbers aren’t that extreme, the damage is already done in terms of planning uncertainty. The NSF cuts alone would have dropped the number of supported researchers from over 330,000 to just 90,000. Even the reconciled figures mean an estimated 970 fewer new grants in fiscal 2026.
For my nonprofit clients, the question isn’t theoretical anymore: “What happens if our $500K federal grant gets cut by 50%?” And more urgently: “Can you model that scenario RIGHT NOW so we can present it to the board on Friday?”
The Modeling Challenge in Beancount
Here’s where I think our community can help each other. I’ve been building out grant-tracking structures in Beancount using metadata extensively, and I want to share what’s working and get feedback on what could be better.
My current account structure for a typical nonprofit:
; Revenue accounts tagged by funding source
Income:Grants:Federal:NSF:ProjectAlpha
Income:Grants:Federal:NIH:ResearchBeta
Income:Grants:State:HealthDept
Income:Grants:Foundation:CommunityFund
Income:Donations:Individual
Income:EarnedRevenue:ProgramFees
; Expense accounts by program and function
Expenses:Programs:DirectServices:Salaries
Expenses:Programs:DirectServices:Supplies
Expenses:Programs:Research:Equipment
Expenses:Administration:General
Expenses:Fundraising
Using metadata to tag grant attributes:
2026-01-15 open Income:Grants:Federal:NSF:ProjectAlpha
funder: "NSF"
grant-period: "2024-2028"
total-award: "500000"
annual-amount: "125000"
status: "at-risk"
restriction: "research-only"
The Three Scenarios Every Board Needs
When I sit down with a nonprofit ED, I walk through three scenarios using BQL queries against our Beancount data:
Scenario 1 — Maintain Current Programs: Federal funding cut by 50%. Need $250K in replacement revenue. What combination of foundation grants, earned revenue, and individual donations fills the gap? How quickly?
Scenario 2 — Scale Back to Core Mission: Which programs are 100% federally funded vs. diversified? Cut the fully-dependent ones first. What’s the minimum operating budget to keep doors open?
Scenario 3 — Pivot to Fee-for-Service: If federal grants disappear entirely, can program services generate earned revenue? What’s the bridge funding needed for 12 months of transition?
I can run BQL queries to answer questions like:
SELECT account, sum(position) WHERE account ~ "Income:Grants:Federal"
AND year = 2025 GROUP BY account
This gives me the federal grant dependency ratio instantly. Combined with expense queries by program, I can show exactly which staff positions are grant-funded and at risk.
The Compliance Angle
Here’s something my nonprofit clients don’t always appreciate until it’s too late: Uniform Guidance (2 CFR 200) continues to reshape compliance expectations. Having every grant transaction tagged with funder, restriction type, and reporting period in Beancount means we have an audit trail that some commercial grant management software can’t match. Git history shows exactly when every allocation decision was made.
But I’m running into limits. Specifically:
- Cross-fiscal-year grants — A 4-year NSF grant that starts mid-fiscal-year. How do you model the carry-forward and year-specific allocations cleanly?
- Indirect cost rates — Tracking negotiated indirect cost rate agreements (NICRA) and applying them consistently across grants
- Budget-to-actual by grant — Generating funder-specific reports that match their required formats (SF-425 for federal, custom templates for foundations)
What I’m Asking the Community
- Has anyone used Beancount for real nonprofit grant management? Not personal budgets—actual restricted fund accounting with multiple grant sources?
- What account structures work for multi-dimensional tracking? I need to slice by grant, program, function, and time period simultaneously.
- How do you handle restricted vs. unrestricted funds? The distinction matters enormously for nonprofits—donor-restricted funds can’t be reallocated without legal consequences.
- Has anyone modeled budget scenarios using Beancount scripts? I’m thinking Python scripts that generate projected Beancount entries under different revenue assumptions.
The 34% of nonprofits reporting federal funding declines isn’t a statistic to me—it’s three panicked phone calls this week. The more sophisticated our tools are for modeling these scenarios, the better we can serve organizations doing critical work.
What are you all seeing out there?