ProPublica Nonprofit Explorer avatar

ProPublica Nonprofit Explorer

Pricing

from $2.00 / 1,000 nonprofit fetcheds

Go to Apify Store
ProPublica Nonprofit Explorer

ProPublica Nonprofit Explorer

Search 1.8M+ US nonprofits via ProPublica IRS 990 API. Filter by name, state, NTEE code. Extract financials: revenue, expenses, assets, liabilities, filing PDFs. Free, no API key. Ideal for grant research and donor due diligence.

Pricing

from $2.00 / 1,000 nonprofit fetcheds

Rating

0.0

(0)

Developer

ryan clinton

ryan clinton

Maintained by Community

Actor stats

0

Bookmarked

4

Total users

0

Monthly active users

2 days ago

Last modified

Share

Search and extract IRS 990 nonprofit organization data from over 1.8 million US tax-exempt entities using the ProPublica Nonprofit Explorer API. Find organizations by name, filter by state and NTEE classification, and optionally pull detailed financial data from the latest 990 filings -- including total revenue, expenses, assets, liabilities, and direct PDF links -- all without needing an API key.

This actor is ideal for researchers, journalists, grant writers, nonprofit consultants, and fundraising professionals who need structured, machine-readable access to IRS nonprofit data at scale.


Why use ProPublica Nonprofit Explorer?

  • Access the largest open nonprofit database -- ProPublica indexes every IRS 990, 990-EZ, and 990-PF filing. This actor gives you structured, machine-readable access to that data without scraping HTML pages.
  • Get financial data automatically -- Enable the filing enrichment option and the actor fetches each organization's latest revenue, expenses, assets, and liabilities directly from IRS filings.
  • No API key or account required -- The ProPublica API is completely free and open. There is nothing to sign up for and no rate-limit key to manage.
  • Filter precisely -- Narrow results by US state and NTEE category so you only get the nonprofits relevant to your research, grant analysis, or lead generation workflow.
  • Production-ready output -- Every record includes the EIN, ProPublica explorer link, and an ISO 8601 extraction timestamp, making downstream integration straightforward.

Key features

  • Full-text search across 1.8+ million IRS-indexed nonprofit organizations by name or keyword.
  • State filtering with standard two-letter codes (NY, CA, TX, etc.) to narrow results to a specific jurisdiction.
  • NTEE classification filtering by ten major group categories: Arts, Education, Environment, Health, Human Services, International, Public Benefit, Religion, Mutual Benefit, or Unknown.
  • Optional financial enrichment from the most recent IRS 990 filing for each organization, including revenue, expenses, assets, and liabilities.
  • Filing PDF links -- direct download URLs for the original 990 PDF hosted on ProPublica.
  • Automatic pagination -- pages through the ProPublica API up to your specified maximum so you can extract large result sets in a single run without manual intervention.
  • EIN cross-referencing -- every result includes the Employer Identification Number for lookups on IRS.gov, GuideStar/Candid, Charity Navigator, or state attorney general databases.
  • ProPublica explorer links -- each record includes a direct URL to the organization's full profile page on ProPublica's website for deeper manual research.
  • Lightweight execution -- runs on 256 MB of memory with no browser or proxy overhead, keeping costs extremely low.

How to use ProPublica Nonprofit Explorer

  1. Go to the ProPublica Nonprofit Explorer actor page on Apify and click Try for free.
  2. Enter a Search Query such as "hospital", "education foundation", or "Red Cross".
  3. Optionally set a State filter using a two-letter code like "CA" or "NY" to restrict results geographically.
  4. Optionally select an NTEE Major Group number to restrict results to a sector (for example, 4 for Health or 2 for Education).
  5. Toggle Include Filing Details to true if you need financial data from each organization's latest 990 filing. Note that this makes one additional API call per organization and increases run time.
  6. Set Max Results to control how many organizations to return (1 to 500, default 50).
  7. Click Start and wait for the run to finish.
  8. Open the Dataset tab to browse, download, or export results in JSON, CSV, Excel, or other formats.
  9. Optionally call the actor via the Apify API or schedule it for periodic runs to monitor new filings over time.

Input parameters

ParameterTypeRequiredDefaultDescription
queryStringYes--Search term for nonprofit name or keyword (e.g., "hospital", "food bank")
stateStringNo--Two-letter US state code to filter results (e.g., "NY", "CA", "TX")
nteeCodeIntegerNo--NTEE major group number (1=Arts, 2=Education, 3=Environment, 4=Health, 5=Human Services, 6=International, 7=Public Benefit, 8=Religion, 9=Mutual Benefit, 10=Unknown)
includeFilingsBooleanNofalseFetch detailed financial filing data for each organization (slower but more data)
maxResultsIntegerNo50Maximum number of organizations to return (1-500)

Input example

{
"query": "food bank",
"state": "TX",
"nteeCode": 5,
"includeFilings": true,
"maxResults": 25
}

NTEE major group reference

CodeCategoryExamples
1Arts, Culture, and HumanitiesMuseums, theaters, orchestras, libraries
2EducationSchools, universities, scholarships, tutoring
3Environment and AnimalsConservation, wildlife, animal shelters, parks
4HealthHospitals, clinics, mental health, disease research
5Human ServicesFood banks, shelters, youth services, disaster relief
6InternationalForeign affairs, relief, development, peace
7Public, Societal BenefitCivil rights, voter education, community improvement
8ReligionChurches, temples, mosques, religious media
9Mutual/Membership BenefitFraternal societies, pension funds, cemeteries
10Unknown/UnclassifiedOrganizations not yet categorized

Tips for best results

  • Start without filings -- Run your first search with includeFilings set to false to quickly scan which organizations match. Then narrow your query and enable filings for a focused second run.
  • Combine state and keyword -- Searching for "food bank" with state "TX" gives you a targeted list of Texas food banks instead of thousands of national results.
  • Use NTEE codes strategically -- Major group 4 (Health) finds hospitals and clinics; group 2 (Education) finds schools and universities; group 5 (Human Services) covers shelters, food banks, and social services.
  • Search by EIN -- You can enter an EIN (with or without the dash) in the query field to look up a specific organization.
  • Scale incrementally -- Start with maxResults at 25-50 to validate your filters before scaling to 500.

Output

Output example

Each record in the dataset follows this structure. When includeFilings is false, all financial fields will be null.

{
"ein": "131624100",
"name": "NEW YORK-PRESBYTERIAN HOSPITAL",
"city": "NEW YORK",
"state": "NY",
"nteeCode": "E22",
"subsectionCode": 3,
"totalRevenue": 9832451672,
"totalExpenses": 9415208936,
"totalAssets": 12807419253,
"totalLiabilities": 7234561890,
"rulingDate": "1946-05-01",
"taxPeriod": "202212",
"formType": "990",
"filingCount": 15,
"latestFilingYear": 2022,
"pdfUrl": "https://projects.propublica.org/nonprofits/download-filing?path=...",
"explorerUrl": "https://projects.propublica.org/nonprofits/organizations/131624100",
"extractedAt": "2025-01-15T12:30:00.000Z"
}

Output fields

FieldTypeDescription
einStringEmployer Identification Number
nameStringOfficial organization name from IRS records
cityStringCity where the organization is registered
stateStringTwo-letter US state code
nteeCodeStringFull NTEE classification code (e.g., "E22" for hospitals)
subsectionCodeNumberIRS subsection code (e.g., 3 for 501(c)(3))
totalRevenueNumber / nullTotal revenue from latest 990 filing
totalExpensesNumber / nullTotal functional expenses from latest 990 filing
totalAssetsNumber / nullTotal assets at end of filing period
totalLiabilitiesNumber / nullTotal liabilities at end of filing period
rulingDateString / nullDate the IRS granted tax-exempt status
taxPeriodString / nullTax period of the latest filing (YYYYMM format)
formTypeString / nullIRS form type filed (990, 990-EZ, or 990-PF)
filingCountNumberTotal number of filings with data available
latestFilingYearNumber / nullYear of the most recent filing
pdfUrlString / nullDirect link to download the 990 filing PDF
explorerUrlStringLink to the organization's ProPublica Nonprofit Explorer page
extractedAtStringISO 8601 timestamp of when the data was extracted

Use cases

  • Grant research -- Identify grant-making foundations by searching for "foundation" or "fund" filtered by state, then review their financial capacity from filing data to prioritize outreach targets.
  • Donor due diligence -- Verify a nonprofit's IRS registration, EIN, financial health, and filing history before making a significant donation or entering a partnership.
  • Competitive nonprofit analysis -- Compare revenue, expenses, and asset levels across organizations in the same NTEE category and geographic region to benchmark performance and identify growth leaders.
  • Journalism and investigations -- Research nonprofit finances for news stories by examining revenue trends, organizational growth, executive compensation patterns, or sector-wide anomalies.
  • Academic research -- Build structured datasets of nonprofit organizations for studies on philanthropy, social services, public health, or the nonprofit sector at large.
  • Compliance monitoring -- Track whether organizations in your portfolio are filing their 990s on schedule and review their most recent financial data for red flags.
  • Lead generation for nonprofit service providers -- Find nonprofits in a target state or category that match your ideal customer profile based on size, sector, and financial characteristics.

API and integration

You can call this actor programmatically using the Apify API or integrate it into automated workflows. Below are examples for the most common languages and integration patterns.

Python

from apify_client import ApifyClient
client = ApifyClient("YOUR_API_TOKEN")
run = client.actor("ryanclinton/nonprofit-explorer").call(run_input={
"query": "hospital",
"state": "NY",
"includeFilings": True,
"maxResults": 50,
})
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
print(f"{item['name']} | EIN: {item['ein']} | Revenue: {item['totalRevenue']}")

JavaScript

import { ApifyClient } from "apify-client";
const client = new ApifyClient({ token: "YOUR_API_TOKEN" });
const run = await client.actor("ryanclinton/nonprofit-explorer").call({
query: "hospital",
state: "NY",
includeFilings: true,
maxResults: 50,
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
console.log(`${item.name} | EIN: ${item.ein} | Revenue: ${item.totalRevenue}`);
});

cURL

curl "https://api.apify.com/v2/acts/ryanclinton~nonprofit-explorer/runs" \
-X POST \
-H "Content-Type: application/json" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-d '{
"query": "hospital",
"state": "NY",
"includeFilings": true,
"maxResults": 50
}'

Integrations

  • Google Sheets -- Export nonprofit data directly to a spreadsheet using the Apify Google Sheets integration for collaborative analysis.
  • Webhooks -- Configure a webhook to trigger when the run finishes, sending results to your backend, Slack, or any HTTP endpoint.
  • Zapier / Make -- Connect output to thousands of apps through Zapier or Make (formerly Integromat) for automated workflows.
  • Python and Node.js clients -- Use the official Apify client libraries to trigger runs, retrieve datasets, and build custom pipelines.
  • Data warehouses -- Push results to BigQuery, Snowflake, PostgreSQL, or other warehouses using built-in Apify integrations.
  • CSV / Excel -- Download the dataset in CSV or Excel format directly from the Apify Console for offline analysis or import into BI tools.
  • Scheduled runs -- Set up the actor on a recurring schedule (daily, weekly, monthly) to track newly available filings over time.

How it works

The actor uses a two-step architecture powered by the ProPublica Nonprofit Explorer API v2. It first searches for organizations matching your query and filters, automatically paging through results. When filing enrichment is enabled, it makes a second API call for each organization to pull detailed financial data from the latest IRS 990 filing. Results are normalized into a consistent 18-field schema and pushed to the Apify dataset.

ProPublica Nonprofit Explorer API v2
===================================
[Input: query, state, nteeCode]
|
v
+---------------------------+
| Step 1: Search | GET /search.json?q=...&state[id]=...&ntee[id]=...
| Page through results |---> Returns: name, EIN, city, state, NTEE code
| (auto-pagination) | Checks num_pages for total available pages
+---------------------------+
|
v
+---------------------------+
| Step 2: Enrich (optional) | GET /organizations/{ein}.json
| If includeFilings = true |---> Returns: revenue, expenses, assets, liabilities,
| Fetch per-org details | rulingDate, taxPeriod, formType, pdfUrl
+---------------------------+
|
v
+---------------------------+
| Normalize & Deduplicate | Maps API fields to consistent output schema
| Build output records | Adds explorerUrl and extractedAt timestamp
+---------------------------+
|
v
+---------------------------+
| Output: Apify Dataset | 18 structured fields per organization
| JSON / CSV / Excel | Ready for API, Sheets, webhook, or download
+---------------------------+

Step 1 uses the /search.json endpoint with query parameters for text search, state filtering via state[id], and NTEE filtering via ntee[id]. The actor reads the num_pages field from the response to determine how many pages to fetch, stopping when it reaches maxResults or exhausts all pages.

Step 2 is only executed when includeFilings is true. For each organization with available filings (have_filings: true), the actor calls /organizations/{ein}.json and extracts the most recent entry from the filings_with_data array. Organizations without electronic filings are still included in the output but with financial fields set to null.


Performance and cost

The actor calls an external API rather than crawling web pages, so it runs on minimal resources (256 MB memory, no browser or proxy required). The ProPublica API itself is completely free with no usage limits published, so the only cost is standard Apify platform compute time.

ScenarioResultsFilingsTypical DurationEstimated Cost
Quick search50OffUnder 10 seconds~$0.001
Search with filings50On30-60 seconds~$0.005
Medium batch200Off15-30 seconds~$0.003
Medium batch with filings200On2-3 minutes~$0.01
Large batch500Off30-60 seconds~$0.005
Large batch with filings500On3-5 minutes~$0.02-0.05

All costs above are approximate Apify platform usage fees. Actual costs depend on your Apify subscription plan. The ProPublica API has no external charges.


Limitations

  • Data freshness -- ProPublica updates its database as the IRS releases new e-filed 990 data. There is typically a lag of several months between when an organization files and when the data appears in the API.
  • E-filed returns only -- Organizations that file paper returns (rather than electronically) may not have financial data available in the ProPublica database.
  • Financial data requires opt-in -- Revenue, expenses, assets, and liabilities are only returned when includeFilings is set to true. Without it, all financial fields are null.
  • Maximum 500 results per run -- The maxResults parameter caps at 500. For larger datasets, run multiple queries with different state or NTEE filters to cover the full population.
  • Search relevance -- The ProPublica search engine uses its own ranking algorithm. Very common terms like "church" or "foundation" may return results in an order you do not expect. Combine keyword, state, and NTEE filters for more precise targeting.
  • No historical filing series -- The actor returns data from the most recent filing only. To view all historical filings for an organization, visit the explorerUrl link on the ProPublica website.
  • US organizations only -- The ProPublica Nonprofit Explorer covers IRS-registered US tax-exempt organizations. International nonprofits are not included unless they have US filing obligations.
  • Latest filing only -- When enrichment is enabled, financial data comes from the single most recent 990 filing. Year-over-year trend analysis requires manual lookups on ProPublica or the IRS.

Responsible use

  • This actor retrieves publicly available data from the ProPublica Nonprofit Explorer API, which itself sources information from IRS public filings. All data accessed is already in the public domain.
  • Respect the ProPublica API by keeping request volumes reasonable. Avoid scheduling very large runs at high frequency.
  • Do not use extracted data to harass, spam, or mislead nonprofit organizations or their staff.
  • When publishing analysis or reports based on this data, attribute the data source to ProPublica and the IRS.
  • Be aware that financial data reflects what was reported on IRS filings and may contain errors or omissions from the filing organizations themselves.
  • Comply with all applicable laws and regulations regarding the use of nonprofit financial data in your jurisdiction.

FAQ

Q: Do I need an API key to use this actor? A: No. The ProPublica Nonprofit Explorer API is free and open to the public. No authentication or API key is needed. The only cost is standard Apify platform usage.

Q: What types of organizations are included? A: The database covers all US tax-exempt organizations that file IRS Form 990, 990-EZ, or 990-PF. This includes 501(c)(3) charities, 501(c)(4) social welfare organizations, private foundations, and other exempt entities.

Q: Why are the financial fields null in my results? A: Financial data is only populated when you set includeFilings to true. Even with filings enabled, some organizations may not have electronic filing data available in the ProPublica database -- particularly smaller organizations that file paper returns.

Q: How current is the data? A: ProPublica updates its index as the IRS releases new e-filed 990 data. There is typically a lag of several months to over a year between the filing date and when the data becomes available through the API.

Q: Can I search by EIN instead of organization name? A: Yes. Enter the EIN (with or without the dash) in the query field. The ProPublica search endpoint accepts EINs as search terms.

Q: What does the subsectionCode field mean? A: The subsection code corresponds to the IRS Code subsection under which the organization is exempt. The most common value is 3, which represents 501(c)(3) charitable organizations. A value of 4 means 501(c)(4) social welfare, and so on.

Q: What is the difference between NTEE code in the input and the output? A: The input nteeCode is a major group number (1-10) used for broad filtering. The output nteeCode is the full NTEE classification string (e.g., "E22" for hospitals) that provides more specific categorization.


ActorDescription
SEC EDGAR Filing AnalyzerAnalyze SEC EDGAR corporate filings including 10-K, 10-Q, and annual reports
EDGAR Filing SearchSearch the full EDGAR filing index for any SEC filing type by company or keyword
OpenCorporates SearchSearch the world's largest open database of company registrations
Congress Bill SearchSearch US Congressional bills and legislation by keyword or sponsor
FEC Campaign Finance SearchSearch Federal Election Commission data for campaign contributions and committees
SAM.gov Contract MonitorSearch federal government contracts and procurement opportunities
CFPB Consumer ComplaintsSearch the Consumer Financial Protection Bureau complaint database
USAspending Federal SpendingSearch federal spending data including grants, contracts, and financial assistance
Grants.gov Federal Grant SearchSearch federal grant opportunities on Grants.gov by keyword, agency, or category