A dataset of 10,000 nonprofit organizations drawn from the 2021 IRS 990 efile database, combining financial data from Form 990 Parts I, VIII, IX, and X with organizational metadata from the IRS Business Master File (BMF).
Format
A data frame with 10,000 rows and 98 variables. The dataset includes
both full 990 filers and 990-EZ filers; the RETURN_TYPE column
identifies which form each organization filed. Variables are organized into
the following groups:
BMF and organizational identifiers:
- `EIN2`: Employer Identification Number (9-digit character)
- `NTEE_NCCS`: NTEE activity code assigned by NCCS
- `NTEEV2`: NTEE Version 2 code
- `NTMAJ12`: NTEE major group (12-category classification)
- `NTEE_ORG_TYPE`: Broad organization type from NTEE
- `CENSUS_CBSA_FIPS`: Core-Based Statistical Area FIPS code
- `CENSUS_CBSA_NAME`: CBSA name (metro/micro area)
- `CENSUS_BLOCK_FIPS`: Census block FIPS code
- `CENSUS_URBAN_AREA`: Urban area classification
- `CENSUS_STATE_ABBR`: Two-letter state abbreviation
- `CENSUS_COUNTY_NAME`: County name
- `BMF_SUBSECTION_CODE`: IRS 501(c) subsection code
- `BMF_FOUNDATION_CODE`: IRS foundation type code
- `ORG_RULING_YEAR`: Year the organization received tax-exempt status
- `F990_TOTAL_REVENUE_RECENT`:
Most recent total revenue from BMF
- `F990_TOTAL_INCOME_RECENT`: Most recent total income from BMF
- `F990_TOTAL_ASSETS_RECENT`: Most recent total assets from BMF
- `F990_TOTAL_EXPENSES_RECENT`:
Most recent total expenses from BMF
- `OBJECTID`: Internal record identifier
- `ORG_EIN`: Organization EIN
- `ORG_NAME_L1`: Organization name (line 1)
- `ORG_NAME_L2`: Organization name (line 2, if present)Return header fields (Part 00):
- `RETURN_AMENDED_X`: Amended return indicator
- `RETURN_GROUP_X`: Group return indicator
- `RETURN_PARTIAL_X`: Partial return indicator
- `RETURN_TAXPER_DAYS`: Length of tax period in days
- `RETURN_TIME_STAMP`: Return timestamp
- `RETURN_TYPE`: Form type filed: `"990"` or `"990EZ"`
- `TAX_PERIOD_BEGIN_DATE`: Start of tax period
- `TAX_PERIOD_END_DATE`: End of tax period
- `TAX_YEAR`: Tax year (fiscal year start)
- `URL`: URL of the source XML filing on AWS
- `VERSION`: 990 form schema version
- `F9_00_BUILD_TIME_STAMP`: IRS build timestamp
- `F9_00_NAME_ORG_CTRL`: Organization name control text
- `F9_00_RETURN_TIME_STAMP`: Return creation timestamp
- `F9_00_RETURN_TYPE`: Return type from XML header
- `F9_00_TAX_PERIOD_BEGIN_DATE`: Tax period start date
- `F9_00_TAX_PERIOD_END_DATE`: Tax period end date
- `F9_00_TAX_YEAR`: Tax year
- `F9_00_RETURN_GROUP_X`: Group return flag
- `F9_00_EXEMPT_STAT_4947A1_X`: 4947(a)(1) trust indicator
- `F9_00_EXEMPT_STAT_501C_X`: 501(c) exempt status indicator
- `F9_00_EXEMPT_STAT_501C3_X`: 501(c)(3) indicator
- `F9_00_TYPE_ORG_OTH_DESC`: Other organization type description
- `F9_00_TYPE_ORG_ASSOC_X`: Association type indicator
- `F9_00_TYPE_ORG_CORP_X`: Corporation type indicator
- `F9_00_TYPE_ORG_OTH_X`: Other type indicator
- `F9_00_TYPE_ORG_TRUST_X`: Trust type indicator
- `F9_00_YEAR_FORMATION`: Year of formationPart I - Summary:
- `F9_01_EXP_REV_LESS_EXP_CY`:
Revenues less expenses, current year (Part I, line 19)
- `F9_01_EXP_TOT_CY`: Total expenses, current year (Part I, line 17)
- `F9_01_NAFB_ASSET_TOT_EOY`: Total assets, EOY (Part I)
- `F9_01_NAFB_LIAB_TOT_EOY`: Total liabilities, EOY (Part I)
- `F9_01_NAFB_TOT_BOY`: Net assets or fund balances, BOY (Part I, line 22)
- `F9_01_NAFB_TOT_EOY`: Net assets or fund balances, EOY (Part I, line 22)
- `F9_01_REV_PROG_TOT_CY`: Program service revenue, current year (Part I)
- `F9_01_REV_TOT_CY`: Total revenue, current year (Part I, line 12)Part VIII - Revenue:
- `F9_08_REV_CONTR_GOVT_GRANT`:
Government grants (Part VIII, line 1e)
- `F9_08_REV_CONTR_MEMBSHIP_DUE`:
Membership dues (Part VIII, line 1b)
- `F9_08_REV_CONTR_TOT`: Total contributions (Part VIII, line 1h)
- `F9_08_REV_MISC_OTH_TOT`: Other miscellaneous revenue (Part VIII, line 11e)
- `F9_08_REV_OTH_FUNDR_NET_TOT`:
Net fundraising income (Part VIII, line 8c)
- `F9_08_REV_OTH_INVEST_BOND_TOT`:
Bond investment income (Part VIII, line 4)
- `F9_08_REV_OTH_INVEST_INCOME_TOT`:
Investment income (Part VIII, line 3)
- `F9_08_REV_OTH_RENT_GRO_PERS`:
Gross rents - personal property (Part VIII, line 6a)
- `F9_08_REV_OTH_ROY_TOT`: Royalties (Part VIII, line 5)
- `F9_08_REV_OTH_SALE_ASSET_OTH`:
Net gain from asset sales (Part VIII, line 7d)
- `F9_08_REV_PROG_TOT_TOT`: Program service revenue total (Part VIII, line 2g)
- `F9_08_REV_TOT_TOT`: Total revenue (Part VIII, line 12A)Part IX - Expenses:
- `F9_09_EXP_DEPREC_TOT`: Depreciation, depletion, and amortization (Part IX, line 22A)
- `F9_09_EXP_TOT_FUNDR`: Fundraising expenses (Part IX, line 25D)
- `F9_09_EXP_TOT_MGMT`: Management and general expenses (Part IX, line 25C)
- `F9_09_EXP_TOT_PROG`: Program service expenses (Part IX, line 25B)
- `F9_09_EXP_TOT_TOT`: Total functional expenses (Part IX, line 25A)Part X - Balance Sheet:
- `F9_10_ASSET_ACC_NET_EOY`: Accounts receivable, net, EOY (Part X, line 4B)
- `F9_10_ASSET_CASH_BOY`: Cash, beginning of year (Part X, line 1A)
- `F9_10_ASSET_CASH_EOY`: Cash, end of year (Part X, line 1B)
- `F9_10_ASSET_EXP_PREPAID_EOY`:
Prepaid expenses and deferred charges, EOY (Part X, line 9B)
- `F9_10_ASSET_INV_SALE_EOY`: Investments held for sale, EOY (Part X, line 8B)
- `F9_10_ASSET_LAND_BLDG_DEPREC`:
Net land, buildings, and equipment - depreciated (Part X, line 10C)
- `F9_10_ASSET_LAND_BLDG_NET_EOY`:
Net land, buildings, and equipment, EOY (Part X, line 10C)
- `F9_10_ASSET_PLEDGE_NET_EOY`:
Net pledges and grants receivable, EOY (Part X, line 3B)
- `F9_10_ASSET_SAVING_EOY`: Savings and temporary cash investments, EOY (Part X, line 2B)
- `F9_10_ASSET_TOT_EOY`: Total assets, EOY (Part X, line 16B)
- `F9_10_LIAB_ACC_PAYABLE_EOY`:
Accounts payable and accrued expenses, EOY (Part X, line 17B)
- `F9_10_LIAB_GRANT_PAYABLE_EOY`:
Grants and similar amounts payable, EOY (Part X, line 18B)
- `F9_10_LIAB_MTG_NOTE_EOY`: Mortgages and notes payable, EOY (Part X, line 23B)
- `F9_10_LIAB_TOT_EOY`: Total liabilities, EOY (Part X, line 26B)
- `F9_10_NAFB_TOT_BOY`: Total net assets, beginning of year (Part X, line 33A)
- `F9_10_NAFB_TOT_EOY`: Total net assets, end of year (Part X, line 33B)
- `F9_10_NAFB_UNRESTRICT_BOY`:
Unrestricted net assets, beginning of year (Part X, line 27A)
- `F9_10_NAFB_UNRESTRICT_EOY`:
Unrestricted net assets, end of year (Part X, line 27B)Source
IRS 990 efile data (2021 tax year) via the Nonprofit Open Data Collective. https://nonprofit-open-data-collective.github.io/irs990efile/
Details
The dataset was assembled by merging five efile tables from the 2021 tax year:
F9-P00-T00-HEADER, F9-P01-T00-SUMMARY, F9-P08-T00-REVENUE,
F9-P09-T00-EXPENSES, and F9-P10-T00-BALANCE-SHEET. BMF fields
(NTEE codes, geographic identifiers, and organizational metadata) were merged on
EIN. The sample includes a mix of full 990 and 990EZ filers; see RETURN_TYPE
to distinguish them.
Financial fields from Part VIII, IX, and X are only populated for full 990 filers.
990EZ filers will have NA in those columns but will have values in the
Part I summary fields (F9_01_*). Use sanitize_financials() to
impute zero for genuine zero-value fields before computing ratios.
The dataset is built using the irs990efile R package. See
https://github.com/Nonprofit-Open-Data-Collective/irs990efile for details.
Examples
data( dat10k )
dim( dat10k )
#> [1] 10000 93
table( dat10k$RETURN_TYPE )
#>
#> 990 990EZ
#> 6284 3716
# Compute the government grant ratio for all organizations
d <- get_grants_govt_ratio( df = dat10k )
#> :: Total revenue equal to zero :: 74 case(s) replaced with NaN
summary( d$grants_govt )
#> Min. 1st Qu. Median Mean 3rd Qu. Max. NA's
#> -0.2019 0.0000 0.0000 0.1274 0.0963 16.3108 3790
# Sanitize first, then compute a batch of ratios
dat_clean <- sanitize_financials( dat10k )
dat_clean <- get_grants_govt_ratio( dat_clean )
#> :: Total revenue equal to zero :: 74 case(s) replaced with NaN
dat_clean <- get_program_expenses_ratio( dat_clean )
#> :: Total expenses equal to zero :: 207 case(s) replaced with NaN
dat_clean <- get_debt_assets_ratio( dat_clean )
#> :: Assets equal to zero :: 268 case(s) replaced with NaN