---
name: nonprofit_cost_allocation
description: "Allocate shared nonprofit costs across programs, grants, and supporting functions without double counting: choose a defensible base for each pool, document the method in a written plan, apply it the same way every period, compute MTDC and indirect charges correctly, and show funders the math. Ships a tested allocation worksheet and MTDC calculator plus worked examples for rent, staff time, and overhead. Triggers on 'cost allocation', 'allocate rent across programs', 'functional expenses', 'indirect cost rate', 'de minimis rate', 'MTDC', 'shared costs across grants', or 'Form 990 Part IX allocation'."
---

# Nonprofit Cost Allocation

## Purpose

Shared costs are where nonprofit accounting gets questioned. Rent, a director who splits her week across three programs, shared IT, and general overhead all benefit more than one program or grant, so someone has to decide how much each objective bears. Done on a written method, applied the same way every period, the answer survives an audit and a funder review. Done by feel, or by which grant still has money left, it does not.

This skill builds that method: inventory the shared pools, pick a base that tracks real benefit for each one, write the plan down before the period starts, run the math with a worksheet that reconciles to the cent, handle indirect costs and MTDC correctly for federal awards, and produce one set of numbers that agrees across grant reports, the statement of functional expenses, and Form 990 Part IX. It ships two tested calculators, a plan template, and worked examples for rent, staff time, and overhead.

This is accounting practice guidance, not legal or tax advice. Award terms control for that award, and a CPA who knows the organization should review a new plan before its first audit or single audit.

## Workflow

1. **List the cost objectives first.** Name every program, grant, and supporting function (management and general, fundraising) exactly as the accounting system, grant reports, and Form 990 will name them. An allocation to an objective that does not exist anywhere else in the books cannot be traced later.

2. **Sort every cost into direct, shared, or indirect.** Direct costs are identified with one objective, or assigned to it with a high degree of accuracy. Shared costs benefit a small set of objectives in measurable proportions, such as rent for the programs in one building. Indirect costs benefit the whole organization and are not readily assignable to one objective without effort out of proportion to the result. Write the sorting down. The same cost type gets the same treatment for the same purpose in like circumstances, every period, per 2 CFR 200.403(d). A cost treated as indirect may not also be charged direct.

3. **Pick one base per shared pool, using the benefit test.** The base must track benefit, be measurable from a record, and be set before the period. Square footage for occupancy, actual time for split salaries, active users or headcount for IT and phones, usage or mileage logs where they exist. Full reasoning, a pool by pool base table, and the failure cases are in `references/method-notes.md`. Never allocate by budget share because it is handy, and never allocate by remaining grant balance. 2 CFR 200.405 bars shifting a cost to a federal award to overcome a fund deficiency or avoid a restriction, and it sets the standard: allocate in proportion to relative benefits received, on proportional benefit where it can be determined without undue effort, and on any reasonable documented basis where it cannot.

4. **Write the plan before you run the numbers.** Fill in `assets/allocation-plan-template.md`: objectives, pools, the base for each pool, the record each base comes from, the review cadence, the indirect pool contents, the rate source per award, and the disclosure sentence for the financial statements. FASB ASU 2016-14 requires nonprofits to present expenses by nature and by function in one place and to disclose the methods used to allocate costs among program and supporting functions. A plan written after the numbers are known does not meet that test in substance, whatever the footnote says.

5. **Run the allocation with the worksheet.** Put pools in a CSV like `references/sample-pools.csv` (pool, total, base) and basis values in a CSV like `references/sample-basis.csv` (pool, objective, basis_value), then run:

   `python3 bin/allocate.py pools.csv basis.csv`

   Add `--format csv` for a file a funder or auditor can open, or `--format json` for another tool. The script allocates in proportion to the basis, rounds by largest remainder so each pool sums exactly to its total, rejects duplicate or missing basis rows, and prints a reconciliation line per pool. A pool that does not reconcile does not get posted.

6. **Handle staff time from actual records.** For people who split their time, the basis is actual work, not the proposal budget. Under 2 CFR 200.430, salary charges to a federal award must rest on records that accurately reflect work performed, cover all compensated activity up to 100 percent, sit in the official records, and support the split among cost objectives. Budget estimates may be used for interim posting only when the system produces reasonable approximations, flags significant changes promptly, and reviews charges after the fact with adjustments so the final amount is accurate. Fringe follows the same split as the salary it belongs to. Work that directly conducts or supervises a program is allocated to that program. General oversight, budgeting, audit, and board support stay in management and general.

7. **Compute indirect charges on the right base.** Decide first which costs sit in the indirect pool, and confirm none of them is also direct allocated in step 5. That list is the double counting guard. For a federal award, apply the rate to modified total direct costs, not to total direct costs. Run:

   `python3 bin/mtdc.py costs.csv --rate 0.15`

   The script counts salaries, fringe, materials, supplies, services, travel, and other direct costs in full, counts only the first 50000 dollars of each subaward, and excludes equipment, capital expenditures, patient care, rental costs, tuition remission, scholarships and fellowships, and participant support costs, following the MTDC definition in 2 CFR 200.1. The rate source, in order, is a current negotiated indirect cost rate agreement, the de minimis election in 2 CFR 200.414(f) (up to 15 percent of MTDC for organizations without a negotiated rate, for awards issued on or after October 1, 2024, no justification documentation required, and once elected it must be used for all federal awards until a negotiated rate is chosen), or a rate set in the award terms. Private funders set their own indirect policy, which may use a different rate or base. Record the source per award in the plan. The worked overhead example in `references/method-notes.md` shows total direct costs of 253000 dollars becoming MTDC of 188000 dollars and a 28200 dollar charge at 15 percent, and shows the 9750 dollar overcharge that comes from applying the rate to the wrong base.

8. **Treat joint activities as a separate decision.** A mailing or event that combines program education with a fundraising ask may be split between program and fundraising only if it meets the purpose, audience, and content tests in FASB ASC 958-720, including a real call to action beyond the donation request. If the tests fail, the whole cost is fundraising. Document the test and the result in the plan, and report joint costs on Form 990 Part IX line 26.

9. **Apply the method the same way every period, and reconcile the three outputs.** Post the allocation as one journal entry per period from the worksheet, keep the worksheet and its source records with the period close file, and check that grant reports, the statement of functional expenses, and Form 990 Part IX all read from the same worksheet and the same bases. When the facts change, a program moves or a role is restructured, change the plan with a dated, approved entry in its change log and apply the new method from that date forward for every objective and every funder.

10. **Show a funder the math on one page.** For any funder who asks, hand over: the pool total and its source bill or payroll register, the base and the record it came from, each objective share and amount from the worksheet, the reconciliation line, and the plan section that set the method before the period. That page answers the usual review questions without a meeting.

## Output Contract

- A written cost allocation plan from `assets/allocation-plan-template.md`, with every shared pool, its base, its source record, and its review cadence filled in, plus the indirect pool contents and the rate source per award.
- An allocation worksheet per period (text, CSV, or JSON from `bin/allocate.py`) in which every pool reconciles exactly to its total, with basis values and shares shown, not just final amounts.
- An MTDC worksheet from `bin/mtdc.py` for any period where an indirect rate is charged, showing total direct costs, the amount excluded and why, MTDC, the rate and its source, and the indirect charge.
- A disclosure sentence for the financial statements and Form 990 naming the base used for each material allocated cost.
- A short list of anything that could not be verified: a base with no underlying record, an award whose indirect policy was not read, or a pool sorted by judgment. Each item is named as open, not smoothed over.

## Operating Rules

- Benefit decides the split, never funding availability. If a program used 30 percent of the space, it bears 30 percent of the rent in a good month and in the month its grant runs low.
- One treatment per cost type. A cost is direct or indirect for the same purpose in like circumstances, consistently, across all awards. Charging rent direct to one grant while it also sits in the indirect pool charged to another is double counting, and it is the first thing a reviewer looks for.
- The plan is written before the period, and changes are dated, reasoned, and approved. A method chosen after seeing the results is a result in search of a method.
- Personnel allocations rest on records of actual work. A budget percentage is an interim posting tool with an after the fact review and adjustment, never the final support for a charge.
- Apply an indirect rate only to its defined base. For federal awards that base is MTDC, with the exclusions and the per subaward cap in 2 CFR 200.1. Applying a rate to total direct costs overstates the charge.
- Keep one method across grant reports, audited statements, and Form 990 Part IX. Three outputs that disagree will be read as at least two of them being wrong.
- Do not invent a funder policy, a rate, or a base value. If an award document was not read, say so and leave the rate as unverified in the plan. Private funder indirect rules vary and are not set by the federal de minimis provision.
- This skill does not replace a CPA or a negotiated rate proposal. Nonprofit indirect rate proposals follow Appendix IV to 2 CFR 200, and an organization heading into a single audit or a first negotiated rate should have its plan reviewed by a professional who can sign off on it.
