IRS Nonprofit 990 Scraper - Charities, Revenue & Officer Pay avatar

IRS Nonprofit 990 Scraper - Charities, Revenue & Officer Pay

Pricing

from $3.50 / 1,000 results

Go to Apify Store
IRS Nonprofit 990 Scraper - Charities, Revenue & Officer Pay

IRS Nonprofit 990 Scraper - Charities, Revenue & Officer Pay

Scrape US nonprofits and charities from official IRS Form 990 data: name, EIN, address, NTEE cause area, 501(c) type, revenue, expenses, assets, surplus/deficit, officer pay and year-over-year growth. Filter by state, cause, 501(c) type and minimum revenue. Export CSV/JSON/Excel. No API key.

Pricing

from $3.50 / 1,000 results

Rating

0.0

(0)

Developer

Flash Scrape

Flash Scrape

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

a day ago

Last modified

Share

IRS Nonprofit 990 Scraper — Charities, Revenue & Officer Pay

Turn the US nonprofit sector into a spreadsheet. Search official IRS Form 990 data by keyword, state, cause area and 501(c) type, and get one clean row per organization: name, EIN, address, cause area, 501(c) type, and — straight from the organization's own filings — total revenue, expenses, end-of-year assets, surplus/deficit, operating margin, officer compensation and year-over-year revenue growth, plus a link to the source 990 PDF.

No API key, no login, no proxy. Public IRS data via ProPublica's free Nonprofit Explorer API.

What you can do with it

  • 💰 Qualify prospects by sizeminRevenue + the size_tier column ("mid ($1M-10M)") give you only the nonprofits big enough to be worth a pitch.
  • 🎯 Build a targeted list — every food bank in Texas, every health charity in Wyoming, every 501(c)(6) chamber of commerce in your state.
  • 📈 Spot who is growingrevenue_growth_pct compares the latest filing to the prior year, so you can find organizations whose budgets are expanding.
  • 🔎 Check financial healthsurplus and operating_margin_pct show at a glance who runs a deficit and who does not.
  • 🧾 Research officer payofficer_compensation comes from the filing itself.
  • 🗂️ Export to CSV, JSON or Excel.

Built for fundraising consultants, grant writers, nonprofit-sector vendors, researchers and journalists who need the whole segment rather than one EIN lookup at a time.

Input

FieldTypeDescription
searchTermsarrayKeywords matched against organization names, e.g. food bank, animal rescue. Leave empty to browse a whole state or cause area.
statesarrayTwo-letter US state codes, e.g. ["TX","CA"]. Empty = all states.
causeAreaselectOne NTEE major group — Arts, Education, Environment & Animals, Health, Human Services, International, Public Benefit, Religion, Mutual Benefit, Unclassified.
subsectionCodeselectOne 501(c) type. 3 is the classic tax-deductible public charity.
includeFinancialsbooleanFetch each organization's filing history for revenue/assets/officer pay. Default true. Turn off for a fast name-and-address list.
minRevenueintegerDrop organizations below this latest reported revenue. 0 = no filter.
minAssetsintegerDrop organizations below this latest reported end-of-year assets. 0 = no filter.
onlyWithFilingsbooleanSkip organizations with no 990 data on record.
maxItemsintegerMax organizations per run (1–1000).

Every search term is combined with every state, so ["food bank"] × ["TX","CA"] runs two queries and merges the results, deduplicated by EIN.

Examples

Qualified prospects — Texas food banks over $1M revenue:

{ "searchTerms": ["food bank"], "states": ["TX"], "minRevenue": 1000000, "maxItems": 100 }

Browse a whole segment — every 501(c)(3) health nonprofit in Wyoming, no keyword needed:

{ "searchTerms": [], "states": ["WY"], "causeArea": "4", "subsectionCode": "3", "maxItems": 200 }

Output (one row per organization)

ein, ein_formatted, name, also_known_as, city, state, address, zipcode, care_of_name, ntee_code, cause_area, subsection_code, organization_type, is_501c3, ruling_date, tax_period, has_filings, filing_count, filing_years, latest_fiscal_year, total_revenue, total_expenses, total_assets, surplus, operating_margin_pct, officer_compensation, revenue_growth_pct, size_tier, irs_revenue_amount, irs_income_amount, irs_asset_amount, latest_filing_pdf, propublica_url, matched_search_term.

Sample row

{
"ein": "742181456",
"name": "Houston Food Bank",
"city": "Houston",
"state": "TX",
"ntee_code": null,
"cause_area": null,
"organization_type": "501(c)(3) charitable / educational",
"latest_fiscal_year": 2023,
"total_revenue": 298504285,
"total_expenses": 314899919,
"total_assets": 154916055,
"surplus": -16395634,
"operating_margin_pct": -5.49,
"officer_compensation": 1538220,
"revenue_growth_pct": -20.69,
"size_tier": "very large ($50M+)",
"filing_count": 13
}

Note the null cause_area above: the IRS search index carries no NTEE code for this organization, so the actor reports null rather than guessing a category. Most rows do have one.

Results are sorted largest revenue first when financials are on, so the best-qualified prospects are at the top.

Honest notes

  • Financial fields can legitimately be null. An organization can sit in the IRS master file with no Form 990 data at all — usually very small or newly registered ones. Use onlyWithFilings: true to exclude them. Nothing is guessed or filled in.
  • latest_fiscal_year is the filing's tax year, not today. IRS 990 data runs a year or two behind by nature; the actor reports the most recent filing that exists.
  • Two sets of money fields, on purpose. total_revenue / total_expenses / total_assets come from the organization's own filings. The irs_*_amount fields come from the IRS master file and can differ or lag — both are exposed rather than silently picked.
  • minRevenue / minAssets need financials, so setting either switches includeFinancials on automatically and says so in the log.
  • Cause area is labelled per row from its own NTEE letter, which is more precise than the numeric group you searched under (group 3 covers both Environment and Animal-Related, for instance).
  • Broad queries top out around 1,000 organizations per query — that is the API's practical paging limit, not a cap this actor adds. Narrow by state or cause area to go deeper.
  • Requests are paced and retried automatically. An unknown state code is reported as a fixable input problem, never as an outage, and nothing is charged for it.