Deep expertise on IRS Form 990 structure, fields, and nonprofit financial analysis. Activates when working on Form 990 parsing, ProPublica API integration, or charity financial evaluation code.
You have deep expertise in IRS Form 990 - the annual tax return filed by tax-exempt organizations.
form_990_parser.py or PDF extraction| Part | Name | Key Data |
|---|---|---|
| I | Summary | Revenue, expenses, net assets, mission (30-word) |
| II | Signature Block | Filing date, preparer info |
| III | Program Service Accomplishments | Mission statement, top 3 programs with expenses |
| IV | Checklist of Required Schedules | Which schedules are attached |
| V | Tax Compliance Statements | Other IRS filings |
| VI | Governance & Management | Board size, independence, policies |
| VII | Compensation | Officers, directors, key employees, highest paid |
| VIII | Statement of Revenue | 12 revenue categories |
| IX | Statement of Functional Expenses | Program/Admin/Fundraising breakdown (26 expense lines) |
| X | Balance Sheet | Assets, liabilities, net assets |
| XI | Reconciliation of Net Assets | Changes in fund balance |
| XII | Financial Statements | Audit status, accounting method |
| Schedule | Required When | Contains |
|---|---|---|
| A | Always (501c3) | Public charity status test, public support calculation |
| B | Contributors >$5k | Donor names (confidential) |
| C | Political activity | Lobbying expenses, political campaign involvement |
| D | Certain assets | Endowment details, art collections, escrow accounts |
| F | Foreign activities | Countries served, foreign grants, offices abroad |
| G | Fundraising events | Gaming, special events details |
| I | Grants to orgs | Grantee list with amounts |
| J | Compensation >$150k | Detailed executive pay breakdown |
| L | Interested persons | Related party transactions |
| M | Non-cash contributions | In-kind donation details |
| O | Always | Narrative explanations, additional info |
| Form | Who Files | Gross Receipts | Assets |
|---|---|---|---|
| 990 | Large nonprofits | >$200k | >$500k |
| 990-EZ | Medium nonprofits | $50k-$200k | <$500k |
| 990-PF | Private foundations | Any | Any |
| 990-N | Small nonprofits | <$50k | N/A |
totrevenue -> Part I, Line 12 (Total Revenue)
totfuncexpns -> Part I, Line 18 (Total Expenses)
totcntrbgfts -> Part VIII, Line 1h (Contributions & Grants)
totprgmrevnue -> Part VIII, Line 2g (Program Service Revenue)
invstmntinc -> Part VIII, Line 3 (Investment Income)
othrevnue -> Part VIII, Line 11e (Other Revenue)
compnsatncurrofcr -> Part VII, Column D total (Officer Compensation)
totassetsend -> Part X, Line 16 (Total Assets EOY)
totliabend -> Part X, Line 26 (Total Liabilities EOY)
totnetassetend -> Part X, Line 33 (Net Assets EOY)
form_990_parser.py:
_extract_header_info() -> Part I header
_extract_financial_data() -> Parts VIII, IX, X
_extract_officers() -> Part VII
_extract_programs() -> Part III
_extract_schedule_o() -> Schedule O (partial)
propublica.py:
fetch_organization() -> Part I summary + Part VII + Part X
_get_filing_history() -> 3 years of returns
The existing parser extracts ~60% of useful 990 data. Missing:
For detailed information, see:
resources/form990-structure.md - All 12 parts with line-by-line detailsresources/schedules-reference.md - Complete schedule guideresources/field-mappings.md - Full ProPublica API to codebase mapping