E-filed 990s are up 1.5x since 2015, and 60k+ new public charities have grown into the full Form 990
The ask
- How many 990s were e-filed in tax year 2015 versus tax year 2023?
- How many new public charities, eligible for filing the full Form 990, were founded between 2015 and 2023?
(Requester identity and the verbatim ask are in the gitignored
_private.md.)
Data & method
Two canonical artifacts, joined on EIN2:
- E-file Form 990 header tables
(
s3://nccs-efile/public/efile_v2_1/,F9-P00-T00-HEADER-{year}.CSV, all 16 published tax years 2009-2024). One row per e-filed 990 or 990-EZ. Two fields matter beyond identity:RETURN_TYPEdistinguishes the full 990 from the 990-EZ, andF9_00_YEAR_FORMATIONis the organization’s founding year as self-reported on the return, a field the BMF does not carry (the BMF has only the IRS ruling date, which lags founding). - Geocoded unified BMF (via
nccsdata::nccs_read), which supplies public-charity status:org_type = "public_charity"is the package’s canonical cut (501(c)(3), foundation code not private-foundation).
Conventions this analysis follows:
- Everything is by tax year. NCCS deliberately re-partitions IRS calendar-year files by tax year during harmonization; all counts below are tax-year counts.
- Form type and tax year are taken from the
RETURN_TYPEandTAX_YEARcolumns on every row, never inferred from a file’s name. The read helper carries afile_yearcolumn so the render itself verifies the partitioning (see the check below). - “Eligible for filing the full 990” is proxied by demonstrated filing: an EIN counts if it filed at least one full Form 990 (not EZ) in tax years 2015-2024. A threshold-based alternative (receipts >= $200k or assets >= $500k in the current BMF) is reported as a sensitivity check.
Partitioning check on this render: 5,675,704 header rows scanned, 0
rows where the in-column TAX_YEAR disagrees with the file-name year;
RETURN_TYPE values present: 990, 990EZ.
Findings
Q1: E-filed 990s by tax year
q1 <- hdr |>
count(TAX_YEAR, RETURN_TYPE) |>
group_by(TAX_YEAR) |>
summarise(
`Full 990` = sum(n[RETURN_TYPE == "990"]),
`990-EZ` = sum(n[RETURN_TYPE == "990EZ"]),
Total = sum(n),
.groups = "drop"
) |>
arrange(TAX_YEAR)
knitr::kable(q1 |> mutate(across(-TAX_YEAR, fmt)), align = "lrrr")
| TAX_YEAR | Full 990 | 990-EZ | Total |
|---|---|---|---|
| 2009 | 33,311 | 15,470 | 48,781 |
| 2010 | 123,025 | 63,326 | 186,351 |
| 2011 | 159,504 | 82,048 | 241,552 |
| 2012 | 179,688 | 93,750 | 273,438 |
| 2013 | 198,855 | 104,375 | 303,230 |
| 2014 | 218,619 | 116,417 | 335,036 |
| 2015 | 233,519 | 124,894 | 358,413 |
| 2016 | 243,903 | 130,484 | 374,387 |
| 2017 | 261,612 | 139,144 | 400,756 |
| 2018 | 271,442 | 149,384 | 420,826 |
| 2019 | 284,515 | 152,688 | 437,203 |
| 2020 | 343,789 | 171,890 | 515,679 |
| 2021 | 336,513 | 202,725 | 539,238 |
| 2022 | 348,027 | 205,527 | 553,554 |
| 2023 | 329,036 | 198,728 | 527,764 |
| 2024 | 78,815 | 80,681 | 159,496 |
Tax year 2015: 358,413 e-filed returns. Tax year 2023: 527,764, about 1.5x. Two structural notes: e-filing was optional before tax year 2021 (the Taxpayer First Act mandate), so early years reflect e-file adoption rather than all filings, while 2023 is near-complete; and tax year 2024 is still accruing. This table covers the 990 and 990-EZ; the 990-PF and 990-N are separate products.
Q2: New public charities that grew into the full 990
founders <- hdr |>
filter(
RETURN_TYPE == "990",
!is.na(F9_00_YEAR_FORMATION),
F9_00_YEAR_FORMATION >= 2015, F9_00_YEAR_FORMATION <= 2023,
F9_00_YEAR_FORMATION <= TAX_YEAR # formation cannot postdate the tax year
) |>
group_by(EIN2) |>
summarise(formation_year = min(F9_00_YEAR_FORMATION), .groups = "drop")
new_pc <- founders |> semi_join(pc, by = "EIN2")
knitr::kable(
new_pc |> count(formation_year, name = "Public charities") |>
mutate(`Public charities` = fmt(`Public charities`)),
align = "lr"
)
| formation_year | Public charities |
|---|---|
| 2015 | 8,208 |
| 2016 | 8,074 |
| 2017 | 7,940 |
| 2018 | 7,720 |
| 2019 | 7,590 |
| 2020 | 7,146 |
| 2021 | 6,638 |
| 2022 | 5,271 |
| 2023 | 3,239 |
61,826 public charities founded 2015-2023 have filed at least one full Form 990 (of 70,668 full-990 filers reporting those formation years across all subsections).
Sensitivity and cross-checks:
- Restricting to explicit 170(b)(1)(A) / 509(a) foundation codes (dropping orgs whose foundation code is missing or in suspense) gives 61,074.
- The BMF-only alternative: 657,426 public charities have IRS ruling years 2015-2023, of which 57,888 currently meet the statutory full-990 thresholds (receipts >= $200k or assets >= $500k). Two independent definitions land in the same range, which is reassuring.
How much of the e-file growth is new organizations?
The anticipated follow-up: did full-990 e-filers grow because new charities formed, or because existing charities were not e-filing in 2015?
new_by_ty <- hdr |>
filter(
RETURN_TYPE == "990",
!is.na(F9_00_YEAR_FORMATION),
F9_00_YEAR_FORMATION >= 2015, F9_00_YEAR_FORMATION <= 2023,
F9_00_YEAR_FORMATION <= TAX_YEAR
) |>
distinct(TAX_YEAR, EIN2)
decomp <- hdr |>
filter(RETURN_TYPE == "990") |>
count(TAX_YEAR, name = "full_990_filers") |>
left_join(
new_by_ty |> count(TAX_YEAR, name = "founded_2015_plus"),
by = "TAX_YEAR"
) |>
left_join(
new_by_ty |> semi_join(pc, by = "EIN2") |>
count(TAX_YEAR, name = "of_which_public_charities"),
by = "TAX_YEAR"
) |>
mutate(founded_pre_2015 = full_990_filers - founded_2015_plus) |>
filter(TAX_YEAR >= 2015, TAX_YEAR <= 2023)
knitr::kable(decomp |> mutate(across(-TAX_YEAR, fmt)), align = "lrrrr")
| TAX_YEAR | full_990_filers | founded_2015_plus | of_which_public_charities | founded_pre_2015 |
|---|---|---|---|---|
| 2015 | 233,519 | 1,627 | 1,392 | 231,892 |
| 2016 | 243,903 | 4,769 | 4,053 | 239,134 |
| 2017 | 261,612 | 8,846 | 7,647 | 252,766 |
| 2018 | 271,442 | 13,902 | 11,951 | 257,540 |
| 2019 | 284,515 | 19,689 | 17,174 | 264,826 |
| 2020 | 343,789 | 28,327 | 24,516 | 315,462 |
| 2021 | 336,513 | 37,231 | 32,747 | 299,282 |
| 2022 | 348,027 | 45,667 | 40,379 | 302,360 |
| 2023 | 329,036 | 50,216 | 44,695 | 278,820 |
Between TY2015 and TY2023 the annual count of full-990 e-filers rose by 95,517. Organizations founded in 2015 or later account for 48,589 of that increase (50,216 of TY2023’s filers, versus 1,627 in TY2015); organizations founded before 2015 account for the remaining 46,928. Roughly half and half.
The coverage context reframes both halves: per the published e-file catalog, only about 68% of 990/990-EZ filings were electronic in tax year 2015, rising to essentially 100% by 2023 (see the paper-vs-electronic table in catalog-efile-v2_1). Adjusting TY2015’s 358,413 e-filed returns for the missing paper share implies a total filing volume close to TY2023’s 527,764. Total 990/990-EZ filing volume was therefore roughly flat: the pre-2015 organizations in the table above are mostly newly visible rather than newly filing, and the new organizations are largely replacing organizations that dissolved.
Takeaways
- E-filed 990/990-EZ volume grew ~1.5x from tax year 2015 to 2023, with the mandate visible as a step in 2020-2021. Coverage-adjusted (68% electronic in 2015 vs ~100% in 2023), total filing volume was roughly flat: the growth in visible filers is predominantly the e-file mandate.
- Roughly 60-62k public charities founded since 2015 have already grown into the full Form 990. The count tapers for recent cohorts (2022-2023) purely from filing lag: young orgs have not yet filed their first 990.
- Of the growth in annual full-990 e-filers, about half is organizations founded 2015+ entering the data and half is pre-2015 organizations becoming newly visible; with flat total volume, new entrants largely replace dissolved organizations rather than expanding the total.
- Formation year is self-reported on the return; rows where it postdates the tax year are dropped as misreports.
- Orgs that only ever paper-filed (possible before tax year 2021) or only filed the EZ/N despite full-990 size are not counted, so the e-file-based number is a floor.
Reproducibility: this story reads the vintages pinned in _pins.csv;
rerun from those pins to reproduce. First render downloads ~3.7 GB of
e-file headers into the gitignored data/ cache; later renders are
fast. See ADR 0024 / 0025 in nccs-contracts.
Nonprofits in the Milwaukee metro, 1989–2026: counts, focus areas, and revenue
How many nonprofits operate in the four-county Milwaukee metro, what they do, and where their revenue comes from — a snapshot and a multi-decade trend from canonical IRS/NCCS data.