Hey everyone! I serve as treasurer for a small nonprofit (community education program), and I just learned about ASC 958-720 functional expense reporting the hard way. Thought I’d share what I learned, because this is critical for anyone tracking nonprofit finances in Beancount.
The Wake-Up Call
Our ED asked me last month: “Mike, can we show a lower overhead ratio on our Form 990? Donors really care about that number.”
I started digging into the rules, and wow—this is both stricter and more important than I realized.
What ASC 958-720 Actually Requires
FASB requires every nonprofit to categorize expenses two different ways:
- Natural classification: What you bought (salaries, rent, supplies, etc.)
- Functional classification: Why you bought it (program work, administration, or fundraising)
This shows up on IRS Form 990 Part IX—and that’s public. Anyone can look you up on GuideStar and see your overhead ratio.
The Donor Perception Problem
Here’s what surprised me: research shows donors think 19% overhead is reasonable, but they believe most charities spend 28%. There’s already skepticism baked in.
And a 2025 study found that donations drop significantly when overhead hits 35% for human services nonprofits (50% for healthcare).
But the paradox: healthy nonprofits actually need 15-25% overhead to operate sustainably. You need qualified staff, good systems, legal compliance, audits, technology—all of that is “overhead,” but it’s necessary.
My Beancount Mistake (Don’t Do This!)
When I first started tracking our nonprofit finances, I set up simple accounts:
Expenses:Salaries
Expenses:Rent
Expenses:Programs
Come tax season? Our CPA asked me to allocate everything by function (program vs admin vs fundraising). I had to go back through hundreds of transactions and manually figure out which bucket each belonged to.
Never again.
The Better Way: Functional Categories from Day One
Now my account structure looks like this:
Expenses:Program:EducationClasses:Instructor
Expenses:Program:EducationClasses:Materials
Expenses:Program:CommunityOutreach:Events
Expenses:Admin:Accounting
Expenses:Admin:Insurance
Expenses:Admin:Legal
Expenses:Fundraising:EventCosts
Expenses:Fundraising:MarketingMaterials
When I record transactions, the functional categorization happens immediately—not at year-end.
Handling Shared Expenses
The tricky part: some expenses serve multiple functions. Our Executive Director does program work, admin work, AND fundraising. How do I allocate her salary?
Here’s what I do:
2026-03-15 * "Payroll" "Executive Director - March 2026"
Expenses:Program:Management 3000.00 USD ; program-pct: 0.60
Expenses:Admin:Management 1500.00 USD ; admin-pct: 0.30
Expenses:Fundraising:Management 500.00 USD ; fundraising-pct: 0.10
Assets:Checking
I use metadata tags (program-pct) to document the allocation methodology. Our ED tracks her time monthly, and we use those percentages. This creates an audit trail that satisfies both our CPA and IRS requirements.
For rent, we use square footage: 70% of our space is classroom/program area, 30% is office/admin. Same split every month, documented in the transaction notes.
Why This Matters
Transparency doesn’t have to be scary. In fact, I’d argue that nonprofits with 20% overhead ratios are often healthier than those claiming 8%.
An 8% ratio usually means:
- They have restricted grants covering admin (not reflected in the ratio)
- They’re underspending on critical infrastructure
- They’re misallocating costs (risky for audits)
A 20% overhead nonprofit is investing in sustainability: qualified staff, proper accounting, legal compliance, good technology. That’s not waste—that’s responsible management.
Questions for the Community
I’m still learning, so I’d love to hear from folks with more experience:
-
How granular should program categories be for Form 990? We have 3 different education programs—do I need separate expense accounts for each, or can I group them?
-
What allocation methods do you use for shared costs? Time tracking? Square footage? Something else?
-
Anyone built Beancount queries to generate Form 990 Part IX reports automatically?
-
How do you educate your board/donors that 20% overhead is healthy, not wasteful?
I’ve found that Beancount’s plain text approach makes this so much easier than traditional accounting software—I can see exactly how things are categorized, audit my own work, and generate reports with simple queries.
But I know I’m just scratching the surface. What am I missing?
For anyone new to nonprofit accounting, start here: IRS Form 990 Instructions and Understanding Nonprofit Overhead Costs. The rules are complex, but the transparency is worth it.