US Nonprofit Data — EIN, Revenue & Form 990 Financials
Pricing
$4.00 / 1,000 company records
US Nonprofit Data — EIN, Revenue & Form 990 Financials
Look up US nonprofits and charities by name, EIN or state. Returns EIN, legal name, NTEE classification, 501(c) subsection, address, and the revenue, expenses and total assets filed on their most recent Form 990.
Pricing
$4.00 / 1,000 company records
Rating
0.0
(0)
Developer
Berkan Kaplan
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
2 days ago
Last modified
Categories
Share
US Nonprofit Data — EIN, Revenue & Form 990 Financials 💙
foXLabs nonprofit & funding series: UK charities · Canadian charities · NIH grants · NSF awards · Research organizations (ROR)
🎉 Look up any US nonprofit by name or EIN and get its IRS identity plus the Form 990 financials — revenue, expenses, assets and liabilities — as clean rows. No key, no login. Built for nonprofit-sector sales, grant researchers, and anyone sizing an organization before they approach it.
🔍 What is this Actor — and when should you use it?
Every US tax-exempt organization files a Form 990, and those filings are public. This Actor searches the IRS exempt-organization record (through ProPublica's Nonprofit Explorer) by name or EIN and returns one row per organization: legal identity, 501(c) subsection, full address, ruling year, how many filings exist — and the headline financials from the most recent filing.
Use it when you need: to qualify a nonprofit by budget size before a sales call; a list of organizations in one state; the EIN for a grant application or a CRM record; or the revenue and asset base behind a foundation.
Use something else when: the charity is not American — use UK charities or Canadian charities. For research funding rather than organizational finances, use the NIH and NSF Actors.
🤖 Use with AI agents
Already on the Apify MCP server? Ask for this Actor by name: foxlabs/us-nonprofit-data.
Your agent can pay for its own runs. This Actor is pay-per-event with agentic payments, so an agent can discover it, run it and settle the bill over x402 (USDC on Base) or Skyfire — no Apify account or API token of its own. Billing is the same either way: per delivered organization row.
Otherwise paste this into Claude, ChatGPT, Cursor or any MCP-enabled assistant:
Run the Apify actor foxlabs/us-nonprofit-data with{"queries":["American Red Cross","530196605"],"maxResultsPerQuery":10}and tell me their revenue and total assets.
📋 Overview
| Source | IRS Form 990 via ProPublica Nonprofit Explorer |
| Coverage | US tax-exempt organizations (501(c) filers) |
| Auth needed | None. No API key, no login, no proxy required |
| Row | One nonprofit organization |
| Measured run | 15 rows in 3.3 s for 3 queries (2026-09-20, build 0.1.8) |
| Pricing | $0.004 per delivered row — $4 per 1,000 |
✨ Features
- 🔎 Name or EIN in the same field — mixed lists work
- 💵 Form 990 financials — revenue, expenses, total assets, total liabilities
- 🏷️ 501(c) subsection rendered the way people write it (
501(c)(3)) - 📮 Full address with city, state and ZIP on every row
- 📅 Ruling year and filing count — how long the organization has been exempt and how deep its history goes
- 🗺️ State filter for building regional lists
- ⚡ Key-free and fast — 15 rows in about 3 seconds, no proxy
🎬 Quick Start
curl -X POST "https://api.apify.com/v2/acts/foxlabs~us-nonprofit-data/run-sync-get-dataset-items?token=YOUR_TOKEN" \-H "Content-Type: application/json" \-d '{"queries":["American Red Cross","Khan Academy","530196605"],"maxResultsPerQuery":10}'
🚀 Getting Started (3 steps)
- Put names or EINs into
queries. Both forms work; the default run mixes them. - Add a state if you want a regional list.
statetakes a two-letter code. - Run it. Rows arrive in the dataset; export to CSV/JSON/Excel or read them over the API.
📥 Input
| Field | Type | Default | Description |
|---|---|---|---|
queries | array | ["American Red Cross","Khan Academy","530196605"] | Nonprofit names or 9-digit EINs |
state | string | "" (all) | Two-letter state code to restrict results |
maxResultsPerQuery | integer | 10 | Cap on organizations returned per query |
maxConcurrency | integer | 4 | Parallel requests |
requestDelayMs | integer | 0 | Optional pause between requests |
includeRaw | boolean | false | Attach the untouched source record to each row |
proxyConfiguration | object | proxy off | The source answers direct requests; enable only if you need it |
Example — exact lookup by EIN:
{ "queries": ["530196605", "141683211"], "maxResultsPerQuery": 1 }
Example — regional list:
{ "queries": ["food bank"], "state": "TX", "maxResultsPerQuery": 50 }
📤 Output
One row per organization. Fill rates below are from the measured run (15 rows, 3 queries, 2026-09-20):
| Field | Type | Fill | Description |
|---|---|---|---|
companyName | string | 100% | Organization name as filed |
registrationNumber | string | 100% | EIN, formatted 53-0196605 |
legalForm | string | 100% | 501(c) subsection, e.g. 501(c)(3) |
status | string | 100% | Exempt status |
address | string | 100% | Full address line |
city / state / postalCode | string | 100% | Location |
countryName | string | 100% | Always United States |
rulingYear | number | 100% | Year the IRS granted exemption |
filingCount | number | 100% | Number of Form 990 filings on record |
revenue | number | 80% | Total revenue from the most recent filing |
totalAssets | number | 80% | Total assets from the most recent filing |
industryCode | string | 80% | NTEE classification code |
expenses | number | 53% | Total expenses, where the filing reports them |
totalLiabilities | number | 53% | Total liabilities, where reported |
fiscalYear | number | 53% | Fiscal year of the financials |
formType | string | 53% | Which 990 variant was filed (990, 990-EZ, 990-PF) |
careOfName | string | 53% | "Care of" contact name on the filing, where present |
sourceUrl | string | 100% | Nonprofit Explorer page for the organization |
country / registry / query / scrapedAt | string | 100% | Provenance fields |
industry | string | 0% | The source publishes a numeric NTEE code but no industry label — use industryCode; this column stayed empty on every measured row |
Why the financial fields are not at 100%: small organizations file the short 990-EZ or 990-N, which carry fewer figures, and the newest filings are sometimes indexed before their financial detail lands. filingCount tells you how much history exists for an organization.
Columns the source does not publish at all (tax number, incorporation and dissolution dates, headcount, capital, website, e-mail, phone, officers) were removed rather than shipped permanently empty.
A real row from the default run:
{"companyName": "American National Red Cross","registrationNumber": "53-0196605","legalForm": "501(c)(3)","address": "431 18TH ST NW, Washington, DC, 20006-5310","city": "Washington","state": "DC","postalCode": "20006-5310","industryCode": "P210","revenue": 3217077611,"totalAssets": 4028321133,"sourceUrl": "https://projects.propublica.org/nonprofits/organizations/530196605"}
💼 Use cases
- Qualify before you call — revenue and assets tell you whether an organization can afford your product
- Territory lists — filter by state to build a regional nonprofit prospect list
- Grant research — profile foundations by asset base before applying
- CRM enrichment — attach EIN, subsection and address to existing nonprofit records
- Sector analysis — group organizations by NTEE code and compare revenue bands
🔗 Integration
JavaScript
import { ApifyClient } from 'apify-client';const client = new ApifyClient({ token: 'YOUR_TOKEN' });const run = await client.actor('foxlabs/us-nonprofit-data').call({queries: ['American Red Cross'], maxResultsPerQuery: 10,});const { items } = await client.dataset(run.defaultDatasetId).listItems();
Python
from apify_client import ApifyClientclient = ApifyClient("YOUR_TOKEN")run = client.actor("foxlabs/us-nonprofit-data").call(run_input={"queries": ["American Red Cross"], "maxResultsPerQuery": 10})items = client.dataset(run["defaultDatasetId"]).list_items().items
No-code: Make, n8n and Zapier reach this Actor through the Apify app — schedule it and push nonprofits into a CRM or a sheet.
📊 Pricing
Pay-per-event: company-record — $0.004 per delivered row ($4 per 1,000). Compute and traffic are included; you pay for rows, not run time. Rows without an organization name are not charged.
❓ FAQ
Do I need an API key? No. The IRS exempt-organization record is public and this Actor needs no key, login or proxy.
Can I look up by EIN? Yes — put the 9-digit EIN in queries, with or without the dash.
How current are the financials? They come from the most recent Form 990 on record. Nonprofits file annually and the IRS publishes with a lag, so the newest year is usually one to two years behind.
Why does an organization show no revenue? It most likely filed a 990-EZ or 990-N, which carry less financial detail. filingCount shows how many filings exist.
Does it include officer compensation? No. This Actor returns organization-level identity and headline financials, not the schedules.
Can I get every nonprofit in a state? Search a broad term with state set and raise maxResultsPerQuery; the source paginates search results rather than dumping the full register.
🐛 Troubleshooting
A name returns the wrong organization. Nonprofits often share names across states. Search the EIN for an exact match, or add state.
Fewer rows than expected. maxResultsPerQuery caps per query — raise it, or split queries across runs.
Financial fields are empty for small charities. Expected: the short filing forms do not carry those figures. Use filingCount and rulingYear to judge organization maturity instead.
⚠️ Trademark
The IRS is a US federal agency and ProPublica's Nonprofit Explorer is an independent journalism project. This Actor is not affiliated with or endorsed by either, and reads only publicly published exempt-organization filings.
⚖️ Is it legal to scrape this data?
Form 990 filings are public by law — Congress made them disclosable precisely so donors and the public can see how tax-exempt organizations use their money. The rows this Actor returns are organizational records and financial totals, not personal data. You remain responsible for how you use the output.
🤝 Support & contact
Questions, a field you need, or a bug: info@foxlabs.com.tr — or open an issue on the Actor's Apify page.
Changelog
0.1.8
- Removed permanently-empty columns (tax number, status detail, incorporation and dissolution dates, headcount, capital, website, e-mail, phone, officers) — the source does not publish them. Row went from 35 columns to 25.
0.1
- IRS exempt-organization search by name or EIN, enriched with the most recent Form 990 filing.
- Pay-per-event billing on delivered rows (
company-record).