Nonprofit & 990 Tax Filing Scraper
Pricing
from $2.00 / 1,000 nonprofit scrapers
Nonprofit & 990 Tax Filing Scraper
Search 1.8M+ US nonprofits by name, state, or NTEE category. Extract IRS 990 data: revenue, expenses, assets, officer compensation. ProPublica API — no auth, no proxy. Perfect for grant research, fundraising intelligence, donor prospecting & journalism.
Pricing
from $2.00 / 1,000 nonprofit scrapers
Rating
0.0
(0)
Developer

Mark F
Actor stats
0
Bookmarked
1
Total users
0
Monthly active users
8 days ago
Last modified
Categories
Share
Search and extract data from 1.8 million+ US nonprofit organizations using the ProPublica Nonprofit Explorer API. Get IRS Form 990 filing data including revenue, expenses, assets, liabilities, officer compensation, and mission statements. No authentication required, no rate limit worries, structured JSON output ready for analysis.
What is the Nonprofit & 990 Tax Filing Scraper?
This actor is a wrapper around ProPublica's free Nonprofit Explorer API that makes it easy to search and extract nonprofit organization data at scale. Every US tax-exempt nonprofit must file Form 990 with the IRS annually, disclosing detailed financial and operational information. ProPublica aggregates this public data and provides a free JSON API. This actor handles pagination, error recovery, and data structuring so you can focus on analysis.
Perfect for:
- Grant research — Find foundations with similar missions and funding capacity
- Fundraising intelligence — Research donor prospects and their giving patterns
- Competitive analysis — Benchmark your nonprofit against similar organizations
- Journalism & investigations — Analyze nonprofit spending, compensation, trends
- Due diligence — Verify nonprofit financials before partnerships or donations
- Academic research — Study nonprofit sector trends, compensation, growth patterns
- Lead generation — Identify nonprofits in specific sectors or regions for outreach
Use Cases
1. Grant Research
Find foundations that fund organizations like yours:
{"searchQuery": "foundation","state": "NY","minRevenue": 10000000,"maxResults": 50,"includeFiling": true}
2. Donor Prospecting
Identify high-capacity donors (board members of large nonprofits):
{"searchQuery": "museum","nteeCode": "A","minRevenue": 5000000,"includeOfficers": true,"maxResults": 100}
3. Competitive Intelligence
Benchmark against similar nonprofits in your sector:
{"searchQuery": "environmental conservation","state": "CA","nteeCode": "C","includeFiling": true,"maxResults": 200}
4. Compensation Research
Analyze executive compensation trends in the nonprofit sector:
{"searchQuery": "hospital","nteeCode": "E","minRevenue": 50000000,"includeOfficers": true,"maxResults": 50}
5. Compliance & Due Diligence
Verify a nonprofit's financial health before partnering:
{"searchQuery": "53-0196605","includeFiling": true,"includeOfficers": true,"maxResults": 1}
Input Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
searchQuery | String | Yes | Organization name, keyword, or EIN (e.g., "American Red Cross", "education", "53-0196605") |
state | String | No | Two-letter state code filter (e.g., "CA", "NY", "TX") |
nteeCode | String | No | NTEE classification code (see NTEE Codes section below) |
minRevenue | Integer | No | Minimum total revenue filter in USD (e.g., 1000000 for $1M+) |
maxResults | Integer | No | Maximum number of organizations to return (default: 100, max: 1000) |
includeFiling | Boolean | No | Fetch latest 990 filing details (revenue, expenses, assets). Default: true |
includeOfficers | Boolean | No | Extract officer/director names and compensation. Requires includeFiling=true. Default: false |
Common NTEE Codes
| Code | Category | Examples |
|---|---|---|
| A | Arts, Culture & Humanities | Museums, theaters, historical societies |
| B | Education | Schools, universities, libraries, literacy programs |
| C | Environment | Conservation, wildlife, parks, pollution control |
| D | Animal-Related | Animal welfare, wildlife preservation, zoos |
| E | Health | Hospitals, mental health, disease research |
| F | Mental Health & Crisis | Counseling, hotlines, addiction services |
| P | Human Services | Food banks, homeless services, youth programs |
| T | Philanthropy | Foundations, donor-advised funds, United Ways |
| X | Religion | Churches, synagogues, mosques, religious media |
Output Format
Each organization returns:
{"ein": "53-0196605","name": "American Red Cross","city": "Washington","state": "DC","ntee_code": "P","subsection_code": "03","ruling_date": "1918-01-01","tax_period": "2023-06-30","total_revenue": 3234567890,"total_expenses": 3100234567,"total_assets": 4567890123,"total_liabilities": 1234567890,"net_assets": 3333322233,"officer_count": 15,"top_compensated_officers": [{"name": "Jane Doe","title": "Chief Executive Officer","compensation": 687500},{"name": "John Smith","title": "Chief Financial Officer","compensation": 425000}],"mission_statement": "The American Red Cross prevents and alleviates human suffering in the face of emergencies...","website": "https://www.redcross.org","propublica_url": "https://projects.propublica.org/nonprofits/organizations/530196605","filing_year": 2023,"form_type": "990"}
Field Descriptions
| Field | Type | Description |
|---|---|---|
ein | String | Employer Identification Number (unique nonprofit ID) |
name | String | Official organization name |
city | String | City where organization is located |
state | String | Two-letter state code |
ntee_code | String | NTEE classification code (sector/subsector) |
subsection_code | String | IRS tax-exempt subsection (e.g., "03" = 501(c)(3)) |
ruling_date | String | Date IRS granted tax-exempt status |
tax_period | String | Tax period end date for latest filing |
total_revenue | Integer | Total revenue from latest 990 filing |
total_expenses | Integer | Total functional expenses |
total_assets | Integer | Total assets at end of tax year |
total_liabilities | Integer | Total liabilities at end of tax year |
net_assets | Integer | Net assets (assets minus liabilities) |
officer_count | Integer | Number of officers/directors listed in filing |
top_compensated_officers | Array | Top compensated officers with name, title, compensation |
mission_statement | String | Organization mission statement |
website | String | Organization website URL |
propublica_url | String | Link to full ProPublica page for this org |
filing_year | Integer | Year of the latest 990 filing |
form_type | String | Type of 990 form filed (990, 990-EZ, 990-PF) |
Note: Fields may be null if not reported in the 990 filing. Small nonprofits (revenue < $50K) file Form 990-N which contains no financial data.
Pricing & Cost Calculator
Base price: $2 per 1,000 organizations
| Use Case | Orgs | Filing Data | Officers | Estimated Cost |
|---|---|---|---|---|
| Quick foundation search | 25 | Yes | No | $0.05 (minimum) |
| Grant prospect research | 100 | Yes | No | $0.25 |
| Sector benchmarking | 500 | Yes | Yes | $1.05 |
| Comprehensive database build | 1,000 | Yes | Yes | $2.05 |
| Large-scale analysis | 5,000 | Yes | Yes | $10.05 |
What's included:
- ✅ No authentication or API keys required
- ✅ No proxy costs (public API)
- ✅ Automatic pagination handling
- ✅ Error recovery and retry logic
- ✅ Structured JSON output ready for analysis
Note: The actor is charged per organization returned, not per API request. The ProPublica API is free with no rate limits, so you only pay Apify's platform fee.
FAQ
Is this legal? Can I use this data commercially?
Yes. IRS Form 990 filings are public records by law. ProPublica aggregates and provides this data for free via their API. You can use this data for research, journalism, commercial purposes, or any lawful purpose. Always verify data accuracy for critical decisions.
How current is the data?
ProPublica updates their database regularly as new 990 filings are processed by the IRS. Most nonprofits file annually, so the latest data is typically from the previous tax year. The IRS publishes filings with a ~6-12 month lag. Check the filing_year field to see when the data is from.
What's an NTEE code?
The National Taxonomy of Exempt Entities (NTEE) is a classification system for nonprofits developed by the National Center for Charitable Statistics. It categorizes organizations by mission and activities (e.g., "B" = Education, "E" = Health, "P" = Human Services). Use NTEE codes to filter searches by sector.
What if an organization has no 990 data?
Small nonprofits with annual gross receipts under $50,000 file Form 990-N ("e-Postcard"), which contains no financial information — just basic contact details. If includeFiling=true but no filing data is returned, the organization either:
- Files 990-N (too small to report financials)
- Is newly registered and hasn't filed yet
- Has filing data not yet processed by ProPublica
The actor will still return basic org info (name, EIN, location) even if filing data is unavailable.
Can I search by EIN directly?
Yes! If you know an organization's EIN (Employer Identification Number), just use it as the searchQuery:
{"searchQuery": "53-0196605","includeFiling": true,"maxResults": 1}
This is the fastest way to get data for a specific organization.
What's the difference between 990, 990-EZ, and 990-PF?
- Form 990 — Standard form for larger nonprofits (annual gross receipts > $200K or assets > $500K)
- Form 990-EZ — Shorter form for mid-size nonprofits (gross receipts < $200K and assets < $500K)
- Form 990-PF — Private foundations (regardless of size)
- Form 990-N — E-Postcard for very small nonprofits (receipts < $50K) — no financial data
The form_type field tells you which form was filed.
Why is includeOfficers slower?
When includeOfficers=true, the actor fetches detailed filing data for each organization, which requires an additional API request per org. This doubles the number of HTTP requests and increases runtime. Use this option only when you need officer/compensation data.
Can I filter by revenue range?
Yes, use the minRevenue parameter to set a minimum revenue threshold:
{"searchQuery": "foundation","minRevenue": 10000000,"maxResults": 100}
This returns only organizations with total revenue >= $10 million. Note: Organizations without 990 filing data (small orgs filing 990-N) will be excluded if minRevenue is set.
Integration Examples
Python
from apify_client import ApifyClientclient = ApifyClient("YOUR_API_TOKEN")run_input = {"searchQuery": "cancer research","state": "CA","nteeCode": "E","minRevenue": 1000000,"maxResults": 50,"includeFiling": True,"includeOfficers": False}run = client.actor("YOUR_USERNAME/nonprofit-990-scraper").call(run_input=run_input)for item in client.dataset(run["defaultDatasetId"]).iterate_items():print(f"{item['name']} ({item['ein']})")print(f" Revenue: ${item['total_revenue']:,}")print(f" Net Assets: ${item['net_assets']:,}")print(f" Location: {item['city']}, {item['state']}")print(f" ProPublica: {item['propublica_url']}\n")
JavaScript
import { ApifyClient } from 'apify-client';const client = new ApifyClient({ token: 'YOUR_API_TOKEN' });const input = {searchQuery: "environmental conservation",state: "NY",nteeCode: "C",minRevenue: 500000,maxResults: 100,includeFiling: true};const run = await client.actor("YOUR_USERNAME/nonprofit-990-scraper").call(input);const { items } = await client.dataset(run.defaultDatasetId).listItems();items.forEach((org) => {console.log(`${org.name} (${org.ein})`);console.log(` Revenue: $${org.total_revenue?.toLocaleString() || 'N/A'}`);console.log(` Mission: ${org.mission_statement?.substring(0, 100)}...`);console.log(` Website: ${org.website || 'N/A'}\n`);});
Export to CSV
Use Apify's built-in dataset export to download results as CSV:
curl "https://api.apify.com/v2/datasets/{DATASET_ID}/items?format=csv" \-H "Authorization: Bearer YOUR_API_TOKEN" \-o nonprofits.csv
Excel / Google Sheets Integration
- Run the actor via Apify Console
- Go to the dataset results page
- Click "Export" → Choose CSV, JSON, or Excel format
- Import into Excel or Google Sheets for analysis
Data Sources
This actor retrieves data from:
- ProPublica Nonprofit Explorer API — https://projects.propublica.org/nonprofits/api
- IRS Form 990 Filings — Aggregated by ProPublica from IRS public data
ProPublica is a nonprofit investigative journalism organization. Their Nonprofit Explorer tool is free and publicly available.
Limitations & Notes
What this actor provides:
- ✅ Search and filter 1.8M+ US nonprofits
- ✅ Latest IRS Form 990 filing data (revenue, expenses, assets)
- ✅ Officer names and compensation from 990 filings
- ✅ Organization mission statements and websites
- ✅ Historical filing data (latest filing only)
What this actor does NOT provide:
- ❌ Multi-year historical trend analysis (only latest filing)
- ❌ Detailed program expense breakdowns (beyond total expenses)
- ❌ Grant recipient lists (990 Schedule I data not included)
- ❌ Fundraising event details
- ❌ Non-US nonprofits (US IRS filings only)
Data freshness:
- IRS filings have a 6-12 month publication lag
- ProPublica updates as new filings are published
- Check
filing_yearfield to see when data is from
Accuracy:
- Data is sourced directly from IRS 990 filings
- Organizations self-report financial data
- Always verify critical information before making major decisions
Support & Feedback
- Issues or bugs? Report at GitHub Issues
- Feature requests? Submit via Apify Console
- Questions? Contact via Apify messaging
- ProPublica API docs: https://projects.propublica.org/nonprofits/api
Keywords & SEO
nonprofit scraper, 990 data API, nonprofit revenue lookup, IRS 990 scraper, nonprofit officer compensation, charity data extractor, nonprofit search API, tax-exempt organization data, foundation research tool, nonprofit financials API, charity navigator alternative, guidestar alternative, nonprofit intelligence, grant research tool, donor prospecting, nonprofit benchmarking, charity due diligence, nonprofit salary data, 501c3 lookup, nonprofit database
Built with ❤️ for nonprofit researchers, grant writers, fundraisers, and journalists.
Try it now → Search 1.8 million nonprofits in under 60 seconds!