ProPublica Nonprofit Explorer Scraper
Pricing
Pay per event
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
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
3 days ago
Last modified
Categories
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 group | Examples |
|---|---|
| Identity | EIN, formatted EIN, name, sub-name, sort name |
| Location | address, city, state, ZIP |
| Classification | NTEE code, subsection code, classification codes, deductibility code |
| Financials | asset amount, income amount, revenue amount |
| Latest filing | tax year, tax period, form type, updated date |
| Filing finances | latest filing revenue, expenses, assets, liabilities, contributions |
| Links | ProPublica profile URL, public API URL, Form 990 PDF URL |
| Metadata | data 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 crosscommunity foundationfood bankanimal 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-0196605530196605
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:NYnteeCode:PnteeCode: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
- Open the actor page.
- Enter one or more search queries or EINs.
- Keep the prefilled small limit for a quick first test.
- Click Start.
- 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
maxResultsafter 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 ApifyClientimport osclient = 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().itemsprint(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.
Related scrapers
Explore other Automation Lab actors:
- https://apify.com/automation-lab/npi-registry-provider-scraper
- https://apify.com/automation-lab/sec-edgar-company-filings-scraper
- https://apify.com/automation-lab/usaspending-federal-spending-search
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.