53% of nonprofits have experienced delays in grant funding decisions or disbursement schedules. Grant reimbursement delays are not going away, and timing gaps between when nonprofits deliver services and when they get paid for them continue to be an issue.
Our youth services nonprofit almost missed payroll last quarter because a $50K grant arrived 3 months behind schedule. Here is the cash flow forecasting setup I built in Beancount to prevent that from happening again.
The Reimbursement Problem
Reimbursement-based disbursement means nonprofits must first incur expenses before receiving funds. If you do not have sufficient reserves, you are operating on borrowed time.
My setup separates three cash concepts:
; Actual cash on hand
2025-01-01 open Assets:Bank:Operating
; Expected reimbursements (money owed to us)
2025-01-01 open Assets:Receivable:Grants:DOE
2025-01-01 open Assets:Receivable:Grants:FoundationX
; Cash reserve for timing gaps
2025-01-01 open Assets:Reserve:CashFlow
Recording Expected Reimbursements
When I submit a reimbursement request, I record the receivable immediately:
2026-02-01 * "Reimbursement request" "DOE January expenses"
Assets:Receivable:Grants:DOE 15000 USD
Income:Grants:DOE -15000 USD
submitted: "2026-02-01"
expected_payment: "2026-03-15"
invoice_number: "DOE-2026-001"
When payment arrives (hopefully):
2026-04-15 * "DOE" "January reimbursement - 6 weeks late"
Assets:Bank:Operating 15000 USD
Assets:Receivable:Grants:DOE -15000 USD
days_late: "31"
The 13-Week Rolling Forecast
Experts recommend rolling 13-week cash flow forecasts. I implement this with scheduled transactions:
; Known future expenses
2026-03-15 # "Payroll" "March payroll"
Expenses:Payroll:Salaries 35000 USD
Assets:Bank:Operating -35000 USD
2026-03-01 # "Rent" "March office rent"
Expenses:Facilities:Rent 4500 USD
Assets:Bank:Operating -4500 USD
; Expected future receipts
2026-03-30 # "Foundation X" "Q1 grant payment - expected"
Assets:Bank:Operating 25000 USD
Assets:Receivable:Grants:FoundationX -25000 USD
confidence: "medium"
The hash mark indicates scheduled/forecast transactions.
The Cash Runway Query
I run this weekly:
SELECT
date,
account,
position,
RUNNING_SUM(position) AS runway
WHERE
account ~ "Assets:Bank:Operating"
AND date >= TODAY()
AND date <= TODAY() + 90
ORDER BY date
This shows me when we hit zero if everything happens as scheduled.
Building the Buffer
Based on historical delays, I maintain a cash reserve:
; Target: 60 days of operating expenses
; Monthly burn: ~$45,000
; Reserve target: $90,000
2026-01-15 * "Transfer" "Cash flow reserve contribution"
Assets:Reserve:CashFlow 5000 USD
Assets:Bank:Operating -5000 USD
Contingency Planning
When cash gets tight, I have documented options:
custom 2026-01-01 "contingency" "Line of credit" "$50,000 available at 7%"
custom 2026-01-01 "contingency" "Board bridge loan" "$25,000 pre-approved"
custom 2026-01-01 "contingency" "Delay vendor payments" "Net-60 with key vendors"
Questions
- What is your target cash reserve in terms of operating days?
- Has anyone used lines of credit to bridge grant timing gaps?
- How do you communicate cash flow risk to your board?