Every small nonprofit finance person I’ve talked to has the same three headaches: keeping restricted grant money separate from the general fund, splitting expenses into program vs. admin vs. fundraising for the 990, and turning all of that into something a board member can actually read in a meeting. This nonprofit budget template puts all three in one workbook — enter actuals and a budget by account, and a fund-accounting split, a functional expense split, and a board-ready dashboard build themselves automatically, for whatever month you pick.
Download the nonprofit budget template — it’s a plain .xlsx, no macros, no external data connections, and no sign-up. Open it in Excel or Google Sheets and start replacing the sample numbers with your own.
Who is this template for?
I built this for a small nonprofit’s bookkeeper, executive director, or volunteer treasurer — the person who closes the books every month and then has to explain the numbers to a board or finance committee that doesn’t want to read a raw general ledger. It works just as well as a church budget template: a church’s chart of accounts looks almost identical structurally, just with offerings and pledges standing in for individual donations and a building fund standing in for a restricted program grant. If you can export actuals and a budget by account and by month, you can drop them into this workbook and get a board-ready summary out the other end.
What’s in the workbook, sheet by sheet
The workbook ships with six sheets, in this exact order, because each one depends on the sheet before it:
- Instructions — a short setup guide plus a clean-room disclosure: every formula, layout, and sample figure in this workbook was authored from scratch for Excel.TV. No vendor template, workbook, or dataset was downloaded, inspected, or adapted to build it.
- Chart of Accounts — the master list of 15 sample accounts (code, name, type, category, fund type, and notes). Category does double duty: it’s the revenue source (Grants, Donations, Program Fees, Fundraising, In-Kind) for Revenue accounts, and the functional expense category (Program, Management & General, Fundraising) for Expense accounts. Fund Type marks each Revenue account Unrestricted or Temporarily Restricted.
- Actuals Input — your closed-period actual amounts, one row per account, one column per month.
- Budget Input — your board-approved budgeted amounts, laid out the same way as Actuals Input.
- Variance Analysis — a fully calculated sheet that pulls actual vs. budget for every account, including its category and fund type, for whichever month is selected on the Dashboard.
- Dashboard — the board-ready summary: a month selector, revenue/expense/change-in-net-assets vs. budget, a functional expense split with a Program Expense Ratio, a fund split between unrestricted and temporarily restricted revenue, a count of accounts flagged for review, and the three largest dollar variances.
The required inputs are just two things per account per month: an actual amount on Actuals Input and a budgeted amount on Budget Input. The main outputs are the Dashboard’s key metrics, the functional expense split, the fund split, the flagged-account count, and the top-3 variance ranking — all of which recalculate the instant you change the month selector or edit an input cell.
How do I set up the nonprofit budget dashboard?
- Open Chart of Accounts and replace the sample account list with your own — keep each Account Code unique, since every lookup in the workbook keys off it. Set Fund Type on every Revenue account and Category on every Expense account; those two fields drive the fund split and functional split on the Dashboard.
- Open Actuals Input and enter your actual amounts for each account, for each closed month. Don’t type into the Account Name column; it’s a formula that looks up the name from Chart of Accounts automatically.
- Open Budget Input and enter your board-approved budgeted amounts in the same account order.
- Go to Dashboard and use the month selector dropdown to choose which month to review.
- Check Variance Analysis for the account-level detail behind the Dashboard’s totals.
Because Account Name on both input sheets is an INDEX/MATCH formula rather than typed text, a typo in an account code shows up immediately as “(unknown account)” instead of silently mismatching later — a real time-saver when you’re re-entering a year’s worth of monthly actuals.

How the variance analysis flags accounts for review
Variance Analysis is where the real work happens, and you never type into it. For every account it pulls the selected month’s actual and budget with a two-way INDEX/MATCH — matching the account code down the rows and the month across the columns — then calculates a dollar variance, a percentage variance, and an absolute-value variance. A Review Flag column marks any account more than 10% off budget in either direction, and a Status column turns that flag into a plain “Review” or “OK.”
Looking at January in the screenshot below, Fundraising Events came in at $3,150 against a $4,000 budget — a 21.3% shortfall — so it’s flagged. Professional Fees, Fundraising Event Costs, and Investment & Interest Income are flagged too, which puts January at four flagged accounts total.

Worked example: reviewing January, February, and March
I built three months of synthetic sample data into the template specifically so you can see the dashboard react to a real close cycle instead of a single static snapshot — including a spring fundraising gala in March, which is exactly the kind of month a static spreadsheet handles badly. Here’s what the Dashboard shows for each month, pulled straight from the workbook after a full recalculation:
| Month | Revenue (Actual / Budget) | Expense (Actual / Budget) | Change in Net Assets Actual | Budget | Variance | Program Expense Ratio | Accounts Flagged |
|---|---|---|---|---|---|---|---|
| Jan | $59,400 / $58,500 | $45,550 / $45,500 | $14,025 | $13,150 | +$875 (+6.7%) | 55.4% | 4 |
| Feb | $56,700 / $58,200 | $44,680 / $44,400 | $12,160 | $13,950 | -$1,790 (-12.8%) | 56.4% | 3 |
| Mar | $70,050 / $66,400 | $52,250 / $50,100 | $17,990 | $16,460 | +$1,530 (+9.3%) | 50.7% | 5 |
January comes in a bit ahead of budget on Change in Net Assets, but the top-3 ranking shows why the finance committee would still want to look closer: Fundraising Events missed budget by $850, and two revenue accounts (Individual Donations at $750, Foundation Grants at $500) round out the top three. February is the soft month — Change in Net Assets misses budget by $1,790, or 12.8%, and while Fundraising Event Costs, Professional Fees, and Fundraising Events are all flagged, none of them are large enough by themselves to explain the shortfall, which is a sign it’s coming from several small misses across the budget rather than one bad line item. March flips the story entirely: the spring gala drove Fundraising Events revenue $2,500 over budget — by far the largest single variance in any of the three months — which is enough to lift Change in Net Assets $1,530 over budget even though Fundraising Event Costs also ran $1,150 hot chasing that same event.
Notice the Program Expense Ratio moves between 50.7% and 56.4% across the three months, dipping lowest in March precisely because gala costs (a Fundraising expense) grew faster than program spending that month. That’s a genuinely useful thing for a board to see: a single big fundraising event can temporarily drag your ratio down even in a month where total revenue looks great, and a board member who only glances at the top-line Change in Net Assets number would miss it entirely.
The fund split tells a related but separate story. In January, Temporarily Restricted revenue ($30,500 actual against a $30,000 budget) slightly outpaced Unrestricted revenue ($28,900 against $28,500) — both funds are tracking close to plan. By March, Unrestricted revenue jumps to $38,750 against a $35,400 budget almost entirely because of that gala, while Temporarily Restricted revenue stays essentially flat at $31,300 against $31,000. That’s exactly the kind of distinction a raw bank balance can’t show you: the gala windfall is unrestricted and available for whatever the board decides, while the grant money sitting in Temporarily Restricted is already earmarked.
Grab the nonprofit budget template if you want to flip the month selector yourself and watch the fund split, functional split, and flagged-account list update live.
How do I use this in Google Sheets?
Google Sheets is a first-class destination for this nonprofit budget template, not an afterthought. Open Google Sheets, choose File > Import > Upload, select the downloaded .xlsx, and pick “Insert new sheet(s).” Every formula in this workbook — SUM, SUMIF, SUMIFS, IF, IFERROR, INDEX, MATCH, ABS, ROUND, and LARGE — is natively supported in Google Sheets, so nothing needs to be rewritten, and the month-selector dropdown’s data validation carries over with it.
If you’d rather skip the download-and-import step entirely, use this one-click copy link: make a copy of the Nonprofit Budget Template in Google Sheets. Google will prompt you to save it to your own Drive, and from there it behaves identically to the Excel version — same sheets, same formulas, same month selector.
If you’re building out a fuller reporting package for your board and want the same monthly-close mechanics on the for-profit side, my finance dashboard template covers a chart-of-accounts-driven variance dashboard without the fund-accounting layer; and if you’re still assembling your first cut of the budget itself before you get to variance reporting, my budget spreadsheet walkthrough covers building that input from scratch.
Limitations to know before you rely on this
A few things are worth knowing before you put real numbers in:
- Every sheet needs the same account order. The workbook assumes each account code is unique and appears exactly once, in the same set of rows, on Chart of Accounts, Actuals Input, and Budget Input. Insert a row in one sheet without inserting it in the others and the lookups will mismatch.
- Fund accounting here is simplified to two fund types. Unrestricted and Temporarily Restricted cover the common case, but this template doesn’t model releases from restriction or permanently restricted endowment funds. If your organization carries an endowment, you’ll need to extend the Fund Type list and the Dashboard’s fund-split formulas.
- The functional expense split is a manual designation, not a time study. The Program / Management & General / Fundraising category you set on each expense account on the Chart of Accounts drives the split directly — it isn’t derived from actual staff time tracking, so it’s only as accurate as the categories you assign.
- Ties in the top-3 ranking aren’t broken. The
LARGE+MATCHpattern that ranks the three biggest variances returns the first matching account if two accounts tie exactly on absolute dollar variance. That’s an inherent limitation of this lookup pattern without an added tie-breaker column. - The 10% review threshold is a fixed sample value. Change the flag formula on Variance Analysis directly if your finance committee uses a tighter or looser threshold.
- No macros, no external connections. Everything here is a native formula. That’s deliberate — it’s what keeps the workbook portable between Excel and Google Sheets with zero substitutions.
I’d rather flag these limitations up front than have you discover them mid-board-meeting. Once you know the account-order rule and the fund-type/category rules, the rest of the workbook takes care of itself.
