Every financial transaction your organization records lives in the general ledger. It is the master record that feeds every financial statement, every audit schedule, and every board report you produce. Get the GL structure right and everything downstream works. Get it wrong and you spend the back half of every month reconciling instead of managing.
A nonprofit general ledger operates on the same double-entry bookkeeping principles as any commercial GL, but it has additional structural requirements that commercial systems were not designed to support. Understanding the difference, and setting up your GL accordingly, is the foundation of a clean, audit-ready close.
How a Nonprofit GL Differs From a Commercial GL
In commercial accounting, the general ledger tracks transactions by account: revenue, expenses, assets, liabilities, and equity. The goal is measuring profit and loss.
In nonprofit accounting, those same accounts exist, but every transaction must carry additional dimensions:
- Fund. Which fund did this transaction affect? Unrestricted operating, restricted grant, board-designated reserve, endowment?
- Functional category. Was this expense for a program, for management and general administration, or for fundraising?
- Program. If it was a program expense, which program specifically?
- Grant. If applicable, which grant funded this activity?
These dimensions are not optional. Without fund coding, you cannot produce a Statement of Financial Position that separates restricted from unrestricted net assets. Without functional categories, you cannot produce a Statement of Functional Expenses. Without grant codes, you cannot produce a budget-versus-actual report for a specific funder.
Commercial accounting software handles the account dimension well. It handles the rest poorly or not at all.
The Account Structure
A nonprofit chart of accounts follows the same basic hierarchy as any GL: assets, liabilities, net assets, revenue, and expenses. What differs is the expansion required within each category.
Assets include current assets (cash, accounts receivable, pledges receivable, prepaid expenses) and non-current assets (property and equipment, long-term investments, endowment funds). Each asset class may need to be segmented by fund if specific assets are restricted to specific purposes.
Liabilities include accounts payable, accrued expenses, deferred revenue, and notes payable. Deferred revenue is particularly important for nonprofits receiving multi-year grants or program fees in advance. Revenue cannot be recognized until it is earned, and the deferred amount sits as a liability until the conditions for recognition are met.
Net assets now appear in two categories: with donor restrictions and without donor restrictions. Within each category, you may need further sub-accounts to distinguish board-designated amounts, underwater endowments, and specific restricted fund balances.
Revenue accounts separate contributions from earned revenue, grants from fees, restricted from unrestricted income. A contribution restricted to the capital campaign should credit a different revenue account than an unrestricted annual fund gift, so your trial balance tells you what you actually received and under what terms.
Expenses are where most of the GL complexity lives. Expenses are classified by natural category (salaries, rent, supplies, depreciation) and must be allocable across functional categories. The chart of accounts needs to support this dual classification without becoming unmanageable.
Dimensions vs. Sub-Accounts
One of the most common GL setup mistakes in nonprofits is creating sub-accounts for every combination of fund and expense type. If you have 10 funds and 20 expense natural categories, that approach produces 200 expense accounts, most of which are empty most of the time.
Purpose-built nonprofit accounting systems use dimensions, not sub-accounts. A single "Salaries" account exists in the chart of accounts, and every salary journal entry is tagged with fund, program, functional category, and grant dimensions. Filtering any combination of those dimensions produces the exact report you need, without multiplying your account count by the number of funds.
In commercial systems like QuickBooks, users simulate this with classes, locations, or custom fields. These workarounds approximate dimension-based tracking but do not produce FASB-compliant statements directly. Every report requires manual adjustment.
Journal Entry Best Practices
Every journal entry in your nonprofit GL should carry:
- Date. The date the transaction was incurred, not necessarily the date it is posted.
- Account codes. Both the debit and credit accounts, drawn from the chart of accounts.
- Fund code. Which fund is affected.
- Functional category. Program, management and general, or fundraising.
- Program code. If a program expense, which program.
- Grant code. If grant-funded, which grant.
- Description. A clear, searchable narrative of what the entry represents.
- Supporting document reference. The invoice number, check number, or donation ID that supports the entry.
The description and document reference are the fields most often skipped under time pressure. They are the fields auditors ask about most. When an auditor selects a sample transaction and asks you to explain it, a journal entry that says "AP payment" is much harder to defend than one that says "Inv 2025-0847 — Catering for Annual Gala 10/15/2025."
Build the documentation habit at entry time, not at audit time.
Reconciliation Cadence
A clean GL is a reconciled GL. Reconciliation means confirming that every account balance in the GL is supported by external documentation or sub-ledger detail.
The accounts that require monthly reconciliation in every nonprofit:
- All bank accounts. Bank statement to GL balance, with outstanding checks and deposits in transit identified and aged.
- Accounts receivable and pledges receivable. GL balance to the sub-ledger showing each open pledge, amount due, and expected collection date.
- Deferred revenue. GL balance to the schedule of grants and program fees received but not yet earned.
- Accounts payable. GL balance to the AP aging, with items older than 90 days investigated.
- Net assets with donor restrictions. GL balance to the schedule of restricted fund balances, with restriction conditions and release status documented for each.
Letting any of these reconciliations slide for even one month means the next month's close includes two months of discrepancies. The accumulation effect is real and consistently causes close timelines to blow out.
Common GL Mistakes
Inconsistent fund coding. Transactions coded to the wrong fund are the leading cause of restricted fund misstatement. Build a coding guide and train every person who posts transactions to use it.
Missing functional category assignments. If a journal entry doesn't carry a functional category, it won't appear on the Statement of Functional Expenses. Review your trial balance at close for any expenses without functional assignments.
Suspense account abuse. Suspense or clearing accounts exist for temporary holding during complex entries. They should clear to zero at period end. If your GL has aged balances sitting in suspense accounts, those amounts are not reflected anywhere meaningful in your financial statements.
Not reconciling sub-ledgers to the GL. The donor database and the GL should tell the same story about restricted fund balances. If they don't reconcile, one of them is wrong. Find out which one before your auditor does.
Posting to closed periods. Once a period is closed for audit, entries must not be posted to it without documentation. Prior-period adjustments require disclosure in financial statements. Prevent unauthorized posting by locking closed periods in your accounting system.
From GL to Financial Statements
The path from your general ledger to your financial statements is direct when the GL is structured correctly:
The Statement of Financial Position draws ending balances from your asset, liability, and net asset accounts, filtered by restriction classification.
The Statement of Activities draws opening and closing net asset balances from the GL, with revenue recognized by restriction class and expenses allocated across functional categories. Releases from restriction pull from the restriction tracking sub-ledger.
The Statement of Functional Expenses draws expense amounts from the GL, aggregated by natural category across the columns for program, management and general, and fundraising.
The Statement of Cash Flows starts from the change in net assets from the Statement of Activities and adjusts for non-cash items and changes in working capital, all drawn from GL account movements.
When all four statements tie back to the same trial balance without manual adjustments, your close is clean.
In sherbertOSOS, every transaction is tagged with its full set of dimensions at entry. The GL is purpose-built for fund accounting, so the dimensions flow directly into each financial statement without reconstruction. The trial balance ties to the statements automatically. Auditors get a clean, reconciled package.
→ Start a free trial and see how sherbertOSOS structures the nonprofit general ledger from day one.
Frequently Asked Questions
How is a nonprofit GL different from a commercial GL?
A nonprofit GL adds fund, functional category, program, and grant dimensions to every transaction. It tracks net assets instead of equity, and it must produce three FASB-required financial statements that commercial GL software was not designed to generate directly.
What are the most common GL mistakes in nonprofits?
Inconsistent fund coding, missing functional category assignments, using suspense accounts as permanent holding areas, and not reconciling the GL to sub-ledgers monthly. Each of these causes audit findings or financial statement errors.
Should every transaction have a fund code?
Yes. Every transaction in a nonprofit GL should be coded to at least one fund and one functional category. Missing codes make financial statement preparation impossible and force manual reconstruction at close.
How many accounts should a nonprofit chart of accounts have?
There is no universal answer, but a well-structured nonprofit COA typically ranges from 100 to 300 accounts. If your account count is growing because you are creating sub-accounts for every fund-expense combination, you need a dimension-based system instead.
What is a sub-ledger and how does it relate to the GL?
A sub-ledger is a detailed record that supports a summary balance in the GL. The donor database is a sub-ledger to your contributions revenue and pledges receivable accounts. The AP aging is a sub-ledger to your accounts payable account. These must reconcile to the GL at every period close.
Frequently Asked Questions
How is a nonprofit GL different from a commercial GL?
A nonprofit GL adds fund and functional category dimensions to every transaction, tracks net assets instead of equity, and must support the three required FASB financial statements.
What are the most common GL mistakes in nonprofits?
Inconsistent fund coding, missing functional category assignments, using suspense accounts as permanent holding areas, and not reconciling the GL to sub-ledgers monthly.
Should every transaction have a fund code?
Yes. Every transaction in a nonprofit GL should be coded to at least one fund and one functional category. Missing codes make financial statement preparation impossible.
Related Articles
Try sherbertOS free
See how sherbertOS simplifies your nonprofit operations.