ProPublica Nonprofit Explorer Scraper avatar

ProPublica Nonprofit Explorer Scraper

Pricing

Pay per event

Go to Apify Store
ProPublica Nonprofit Explorer Scraper

ProPublica Nonprofit Explorer Scraper

Extract nonprofit profiles, IRS Form 990 filing metadata, financial summaries, and source links from ProPublica Nonprofit Explorer.

Pricing

Pay per event

Rating

0.0

(0)

Developer

Stas Persiianenko

Stas Persiianenko

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

3 days ago

Last modified

Share

Extract public nonprofit profiles, IRS Form 990 filing metadata, financial summaries, and ProPublica source links from the ProPublica Nonprofit Explorer API.

What does ProPublica Nonprofit Explorer Scraper do?

ProPublica Nonprofit Explorer Scraper turns public IRS nonprofit records into clean Apify datasets.

It can search by nonprofit name, keyword, or EIN.

It returns organization identity, location, tax classification, revenue, assets, latest Form 990 metadata, PDF links, and source URLs.

The actor uses ProPublica's public JSON endpoints and does not require a login, browser, or proxy.

Who is it for?

This nonprofit 990 scraper is useful for teams that need public tax-exempt organization records in a repeatable dataset.

Who is this nonprofit 990 scraper for?

  • ๐ŸŽฏ Grant writers building prospect lists.
  • ๐ŸŽฏ Fundraising teams researching donor-advised funds, charities, and foundations.
  • ๐ŸŽฏ Journalists reviewing nonprofit finances and public accountability records.
  • ๐ŸŽฏ Compliance teams checking tax-exempt organizations.
  • ๐ŸŽฏ Data vendors enriching CRM records with EIN and Form 990 metadata.
  • ๐ŸŽฏ Researchers building public-interest nonprofit datasets.

Why use it?

Manual nonprofit research is repetitive.

You often need the same facts for many organizations: EIN, address, NTEE code, tax period, assets, revenue, filing year, and PDF URL.

This actor automates that collection and exports the results as JSON, CSV, Excel, XML, or through the Apify API.

What public data can it extract?

Field groupExamples
IdentityEIN, formatted EIN, name, sub-name, sort name
Locationaddress, city, state, ZIP
ClassificationNTEE code, subsection code, classification codes, deductibility code
Financialsasset amount, income amount, revenue amount
Latest filingtax year, tax period, form type, updated date
Filing financeslatest filing revenue, expenses, assets, liabilities, contributions
LinksProPublica profile URL, public API URL, Form 990 PDF URL
Metadatadata source, API version, search score

How much does it cost to scrape ProPublica nonprofit 990 records?

The actor uses pay-per-event pricing.

You pay a small start fee plus a per-record charge for each nonprofit record saved.

Launch pricing is about $0.05 per 1,000 nonprofit records at the BRONZE tier, with platform-floor per-record prices on higher tiers.

Apify shows the exact price before you start a run.

Input overview

You can provide search queries, EINs, or both.

A typical input looks like this:

{
"searchQueries": ["red cross"],
"eins": ["53-0196605"],
"state": "",
"nteeCode": "",
"maxResults": 25,
"includeFilings": true,
"includeRawApiData": false
}

Search queries

Use searchQueries for nonprofit names or keywords.

Examples:

  • red cross
  • community foundation
  • food bank
  • animal rescue

Each query is paginated until the actor reaches maxResults or ProPublica has no more results.

EIN lookup

Use eins when you already know exact organizations.

The actor accepts either hyphenated or plain EINs.

Examples:

  • 53-0196605
  • 530196605

Direct EIN lookup is useful for CRM enrichment and verification workflows.

State and NTEE filters

The state input applies a two-letter state filter to search queries.

The nteeCode input filters returned organizations by NTEE code prefix.

Examples:

  • state: NY
  • nteeCode: P
  • nteeCode: T30

Filing details

Set includeFilings to true to fetch each organization's detail endpoint.

This adds the latest filing year, PDF link, revenue, expenses, assets, liabilities, contributions, and program revenue fields when available.

Set it to false for faster lightweight search-only runs.

Raw API data

Set includeRawApiData to true if you want the raw public ProPublica organization object and latest filing object included in each output row.

Most users should keep this disabled because the normalized fields are easier to work with.

Output example

{
"ein": "530196605",
"formattedEin": "53-0196605",
"name": "American National Red Cross",
"city": "Washington",
"state": "DC",
"nteeCode": "P210",
"subsectionCode": 3,
"assetAmount": 5052941623,
"incomeAmount": 4608946426,
"revenueAmount": 3916983933,
"latestFilingTaxYear": 2023,
"latestFilingPdfUrl": "https://projects.propublica.org/nonprofits/download-filing?...",
"sourceUrl": "https://projects.propublica.org/nonprofits/organizations/530196605"
}

How to run it on Apify

  1. Open the actor page.
  2. Enter one or more search queries or EINs.
  3. Keep the prefilled small limit for a quick first test.
  4. Click Start.
  5. Download the dataset when the run finishes.

Tips for better nonprofit searches

  • Use official names when you have them.
  • Use EIN lookup for exact matching.
  • Add a state filter for local nonprofit research.
  • Increase maxResults after a small test run succeeds.
  • Enable raw API data only when you need advanced IRS extract fields.

Integrations

You can integrate this actor into:

  • CRM enrichment pipelines.
  • Grant prospecting spreadsheets.
  • Due-diligence dashboards.
  • Data warehouse jobs.
  • Journalist research notebooks.
  • Automated nonprofit verification workflows.

API usage with Node.js

import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: process.env.APIFY_TOKEN });
const run = await client.actor('automation-lab/propublica-nonprofit-explorer-scraper').call({
searchQueries: ['red cross'],
maxResults: 25,
includeFilings: true
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items);

API usage with Python

from apify_client import ApifyClient
import os
client = ApifyClient(os.environ['APIFY_TOKEN'])
run = client.actor('automation-lab/propublica-nonprofit-explorer-scraper').call(run_input={
'searchQueries': ['red cross'],
'maxResults': 25,
'includeFilings': True,
})
items = client.dataset(run['defaultDatasetId']).list_items().items
print(items)

API usage with cURL

curl -X POST 'https://api.apify.com/v2/acts/automation-lab~propublica-nonprofit-explorer-scraper/runs?token=YOUR_APIFY_TOKEN' \
-H 'Content-Type: application/json' \
-d '{"searchQueries":["red cross"],"maxResults":25,"includeFilings":true}'

MCP: use from Claude Code or Claude Desktop

You can expose this actor through the Apify MCP server.

Use this MCP URL:

https://mcp.apify.com/?tools=automation-lab/propublica-nonprofit-explorer-scraper

Claude Code setup command:

$claude mcp add apify-propublica-nonprofits --transport http https://mcp.apify.com/?tools=automation-lab/propublica-nonprofit-explorer-scraper

Claude Desktop JSON configuration:

{
"mcpServers": {
"apify-propublica-nonprofits": {
"url": "https://mcp.apify.com/?tools=automation-lab/propublica-nonprofit-explorer-scraper"
}
}
}

Example prompts:

  • "Search ProPublica nonprofit records for community foundations in California."
  • "Look up EIN 53-0196605 and summarize the latest filing metadata."
  • "Create a CSV of 50 food bank nonprofits with revenue and Form 990 PDF links."

Data freshness

The actor reads the current public ProPublica Nonprofit Explorer API response.

Returned fields depend on what ProPublica and IRS filing extracts expose for each organization.

Some small organizations may have profile data but no detailed filing extract.

Legality and responsible use

This actor extracts public nonprofit and IRS Form 990 metadata from public endpoints.

You are responsible for using the data lawfully and respecting Apify, ProPublica, and applicable data protection rules.

Do not use the output for unlawful discrimination, harassment, or misleading fundraising claims.

FAQ

Does this actor require a ProPublica account?

No. It uses public ProPublica Nonprofit Explorer endpoints.

Can I search by exact EIN?

Yes. Add one or more EINs with or without hyphens in the eins input.

Troubleshooting: no results

Try a broader query, remove state/NTEE filters, or use an exact EIN.

Some organizations are listed under legal names rather than common brand names.

Troubleshooting: missing filing fields

Not every organization has extract data for every filing.

If a filing PDF exists but normalized fields are missing, enable includeRawApiData or inspect the PDF URL.

Explore other Automation Lab actors:

Changelog

Initial version extracts nonprofit identity, search results, financial summaries, latest filing metadata, and source URLs from ProPublica Nonprofit Explorer.

Support

If you need a field that exists in the raw public API but is not normalized yet, open an Apify issue with a sample EIN and the desired field name.