Expense Tracking App Starter · Industry version
Every dollar coded to its fund, grant, and function at the moment it's spent — expense tracking your nonprofit owns.
Nonprofit spending answers to funders, not just budgets: was it the restricted grant or unrestricted funds, program work or overhead, allowable under the award or not? This starter captures those answers when the expense is entered — because reconstructing them at report time is where nonprofit finance goes to suffer.
01 · The problem
A business expense tool tracks who spent and what for. A nonprofit also has to track whose money it was — an expense paid from a restricted grant is a different accounting event than the same expense from unrestricted funds, and mixing them up isn't a bookkeeping slip, it's a compliance problem with the funder. Generic tools have no concept of funds, so restriction tracking retreats to a parallel spreadsheet that drifts from reality.
Functional classification — program, administration, fundraising — determines the ratios on your Form 990 and inside every charity-rating profile donors check. When function is assigned months later by an overloaded bookkeeper reading line descriptions, the split is an estimate. Estimated splits are how organizations end up explaining an overhead ratio they can't actually defend.
Grant reporting deadlines make it all urgent. A funder asks for actual spend against their award, by budget line, with receipts — and if expenses weren't coded to the grant when they happened, someone rebuilds the answer by hand, every reporting period, under deadline. That rebuild is the single most common expense-related time sink in small nonprofit finance.
02 · Data model
Everything in the base Expense Tracking starter —
employeesreportsexpensesreceiptscategoriesapprovals— plus the entities this industry actually runs on:
| table | what it holds |
|---|---|
funds | Pools of money with restriction status — unrestricted, temporarily restricted, permanently restricted — that every expense draws against. |
grant_awards | Funder awards with budget lines, allowability rules, spend-by dates, and reporting deadlines, linked to expenses charged against them. |
functional_allocations | Program, administration, and fundraising splits per expense — including percentage allocations for shared costs like rent. |
03 · Screens
Every expense selects its fund, and grant-charged items pick the award and budget line — with allowability warnings if the category conflicts with the award's rules. Coding happens while the context is fresh, not at quarter-close.
Beyond amount thresholds, approvals verify the charge fits the fund: remaining grant budget on that line, spend window still open, cost allowable. An executive-director step catches anything that would surprise a funder later.
The program/admin/fundraising split rolls up continuously from per-expense allocations, so the 990's functional statement and a board-ready overhead ratio are standing reports — not an annual archaeology project.
04 · In practice
A program manager buys supplies and codes them to the grant's supplies budget line at entry. The award's remaining balance on that line updates immediately — so the team sees budget depletion in real time, not at the funder report.
Monthly rent enters once with a percentage split across programs and admin per your allocation plan. The percentages are recorded on the expense, giving auditors the consistent, documented methodology they ask about first.
When the quarterly report comes due, spend against the award is already organized by budget line with receipts attached. Export it, reconcile the edge cases, and the report that used to take a week takes a morning.
Funds with restriction status are the core addition: every expense draws from a fund, restricted charges validate against grant rules, and spend by restriction class is always reportable. The parallel restriction spreadsheet retires.
Yes — expenses carry program/admin/fundraising allocations, including percentage splits for shared costs, and the functional rollup is a standing report. Your 990 preparer gets numbers with a documented method behind them.
Grant awards hold budget lines and deadlines, expenses code against them at entry, and remaining balances update live. Reporting becomes an export of data that already exists rather than a reconstruction under deadline.
The generated app runs on modest infrastructure at commodity cost, with no per-user fees — often below what nonprofit-discounted SaaS totals. And funders generally read a one-time build as a capacity investment, which subscriptions never are.
Dual7 App Starters
Every dollar coded to its fund, grant, and function at the moment it's spent — expense tracking your nonprofit owns. Describe your version to start — the output is a project you own.