IRS Tax Exempt Organization Search Scraper
Pricing
Pay per event
IRS Tax Exempt Organization Search Scraper
Search and export official IRS EO BMF records by EIN, name, state, subsection, NTEE, status, and tax period for nonprofit screening and research.
Pricing
Pay per event
Rating
0.0
(0)
Developer
Stas Persiianenko
Maintained by CommunityActor stats
0
Bookmarked
3
Total users
2
Monthly active users
6 days ago
Last modified
Categories
Share
Search and export official IRS Exempt Organizations Business Master File (EO BMF) records without an IRS login or API key.
This Actor turns the IRS tax exempt organization search bulk files into filtered, typed dataset rows. Look up a nonprofit by EIN, search organization names, select states, or combine subsection, NTEE, status, and tax-period filters for recurring screening.
The result is an integration-ready dataset with organization identity, filing address, classification codes, filing requirements, and the financial amounts available in the EO BMF.
What can the IRS tax exempt organization search scraper do?
- Look up one organization by its nine-digit EIN.
- Search official organization names with case-insensitive text matching.
- Search one or several US states, the District of Columbia, Puerto Rico, or international records.
- Filter 501(c)(3) organizations with subsection code
03. - Select nonprofit sectors with NTEE codes or prefixes.
- Filter the current IRS master-file status code.
- Restrict records to a tax-period range.
- Export up to 10,000 matching organizations per run.
- Feed typed results into spreadsheets, databases, CRM enrichment, and screening workflows.
- Schedule the same query and compare datasets between IRS updates.
The Actor streams the official CSV files instead of loading the roughly two-million-record master file into memory. When states are selected, it requests the smaller official state files for faster and cheaper runs.
Who is it for?
Nonprofit compliance teams can screen EINs and classification fields on a schedule.
Grantmakers and foundations can assemble official organization lists before deeper due diligence.
Fundraising and prospecting teams can discover organizations by geography and nonprofit sector.
Researchers and journalists can export reproducible snapshots from an official US government source.
Data engineers can replace manual IRS CSV downloads with an Apify Task, API call, webhook, or schedule.
Developers can retrieve normalized JSON without implementing large-file streaming and IRS code filtering.
Use a Form 990-focused source when you need filing documents, officers, grants, or filing-level details. This Actor returns the EO BMF organization record, not complete Form 990 submissions.
Why use this instead of downloading IRS CSV files manually?
The IRS publishes high-quality public bulk data, but direct use requires selecting files, downloading large CSVs, preserving leading zeros, interpreting codes, and filtering millions of rows.
This Actor provides:
- validated search inputs;
- state-file routing for focused searches;
- streaming CSV parsing with bounded memory;
- exact preservation of EINs and classification codes;
- numeric asset, income, and revenue fields;
- per-result charging rather than a fixed data subscription;
- standard Apify datasets, schedules, webhooks, API clients, and integrations;
- explicit source URLs on every row.
No proxy, browser, CAPTCHA solver, private IRS account, or third-party nonprofit API is required.
Input parameters
| Field | Type | Description |
|---|---|---|
ein | string | Exact nine-digit EIN. Hyphens and spaces are accepted. |
name | string | Case-insensitive substring of the official IRS organization name. Minimum two characters. |
states | string[] | Two-letter filing-address codes. Use DC, PR, or XX where applicable. |
subsections | string[] | Two-digit IRC subsection codes, such as 03 for 501(c)(3). |
nteeCodes | string[] | NTEE codes or prefixes, such as B, B20, or E21. |
statusCodes | string[] | Two-digit status values from the IRS EO BMF information sheet. |
taxPeriodFrom | string | Earliest accepted tax period in YYYYMM format. |
taxPeriodTo | string | Latest accepted tax period in YYYYMM format. |
maxItems | integer | Maximum results, from 1 to 10,000. Default: 100. |
All supplied filters are combined with AND logic.
Values within one list use OR logic.
For example, states: ["NY", "NJ"] and subsections: ["03"] returns 501(c)(3) records in either New York or New Jersey.
NTEE filtering uses prefixes.
A value of B includes all education categories whose NTEE code starts with B.
Records without a tax period do not match taxPeriodFrom or taxPeriodTo.
Getting started
- Open the Actor input page.
- Enter an EIN or choose one or more filters.
- Keep
maxItemssmall for the first run. - Click Start.
- Open the Dataset tab when the run succeeds.
- Export results as JSON, CSV, Excel, XML, or another Apify-supported format.
- Save the input as a Task if you want schedules, webhooks, or repeat runs.
A focused 501(c)(3) search can use:
{"states": ["NY"],"subsections": ["03"],"maxItems": 25}
An exact EIN lookup can use:
{"ein": "53-0196605","states": ["DC"],"maxItems": 1}
Supplying the state with an EIN is optional, but it avoids scanning unrelated regional files and usually finishes faster.
Output fields
Every matching organization is stored in the default dataset.
| Field | Meaning |
|---|---|
ein | Nine-digit Employer Identification Number. |
name | Official IRS organization name. |
careOfName | In-care-of name when provided. |
street, city, state, zip | Filing-address fields. |
groupExemptionNumber | Group exemption number. |
subsectionCode | IRC subsection code. |
affiliationCode | IRS affiliation code. |
classificationCode | Organization classification code or codes. |
rulingDate | Ruling date in YYYYMM format. |
deductibilityCode | Deductibility limitation code. |
foundationCode | Foundation classification code. |
activityCodes | Combined IRS activity codes. |
organizationCode | Organization type code. |
statusCode | Current EO BMF status code. |
taxPeriod | Latest available tax period in YYYYMM. |
assetCode, incomeCode | IRS amount-range codes. |
filingRequirementCode | Form 990-series filing requirement code. |
privateFoundationFilingRequirementCode | Private-foundation filing requirement code. |
accountingPeriod | Accounting period ending month. |
assetAmount | Latest asset amount supplied in the master file. |
incomeAmount | Latest income amount supplied in the master file. |
revenueAmount | Latest revenue amount supplied in the master file. |
nteeCode | National Taxonomy of Exempt Entities code. |
sortName | Alternate IRS sort name when available. |
sourceUrl | Exact official IRS CSV file used. |
scrapedAt | ISO timestamp for extraction. |
Blank IRS values are returned as null.
Financial amounts are numbers when present, but they are not guaranteed for every organization.
Code fields remain strings so leading zeros are preserved.
Example result
This abbreviated example reflects the Actor's current output shape:
{"ein": "530196605","name": "AMERICAN NATIONAL RED CROSS","city": "WASHINGTON","state": "DC","subsectionCode": "03","statusCode": "01","taxPeriod": "202506","filingRequirementCode": "01","nteeCode": "P210","sourceUrl": "https://www.irs.gov/pub/irs-soi/eo_dc.csv","scrapedAt": "2026-08-07T06:09:06.755Z"}
The source may change tax periods or other fields when the IRS refreshes its files. Treat the live dataset row as authoritative for that run.
How much does it cost to search IRS tax-exempt organizations?
Pricing uses one small Actor start charge plus one Organization record event for every result saved.
The per-record price decreases across Apify subscription tiers.
No proxy event or separate charge is added for the included classification and financial fields.
At the BRONZE rate of $0.002732 per record plus a $0.005 start fee:
| Saved organizations | Example total |
|---|---|
| 1 | $0.0077 |
| 25 | $0.0733 |
| 100 | $0.2782 |
| 1,000 | $2.7370 |
These examples use BRONZE pricing. Your Console shows the active rate for your Apify plan before each run. A no-result run incurs only the start charge. Compute usage is included in pay-per-event pricing rather than billed as another Actor event.
Search and screening workflows
Verify a known nonprofit
Use an EIN plus a state when known. Store the returned status, subsection, filing requirement, and source URL with the screening record.
Build a state nonprofit list
Select one state, subsection 03, and a useful maxItems.
Export the resulting dataset to CSV or Excel.
Use narrower NTEE filters if the state contains more matches than one run returns.
Create education or health prospect lists
Use NTEE prefix B for education or E for health-related records.
Combine the prefix with state and subsection filters.
Review IRS code definitions before using a list for eligibility decisions.
Monitor master-file changes
Save the input as an Apify Task and schedule it after expected IRS updates.
Send completed datasets to your data warehouse.
Compare rows by ein rather than by organization name.
The Actor does not calculate changes itself; use dataset comparison or your own pipeline.
Scheduling and integrations
Apify Tasks preserve a validated input for repeat runs. Schedules can execute a Task daily, weekly, monthly, or with a custom cron expression.
Useful integrations include:
- Google Sheets for analyst review;
- Airtable for research queues;
- Make or Zapier for workflow routing;
- webhooks for run completion;
- Amazon S3, Google Cloud Storage, or a data warehouse for snapshots;
- a CRM enrichment job keyed by EIN;
- Apify dataset APIs for downstream applications.
For recurring screening, retain the extraction timestamp and source URL. That creates a clearer audit trail than copying values without provenance.
Use the Actor through the API
Replace APIFY_TOKEN with your token.
cURL
curl -X POST \"https://api.apify.com/v2/acts/automation-lab~tax-exempt-organization-search/run-sync-get-dataset-items?token=APIFY_TOKEN" \-H "Content-Type: application/json" \-d '{"states":["CA"],"subsections":["03"],"nteeCodes":["B"],"maxItems":50}'
JavaScript
import { ApifyClient } from 'apify-client';const client = new ApifyClient({ token: process.env.APIFY_TOKEN });const run = await client.actor('automation-lab/tax-exempt-organization-search').call({states: ['CA'],subsections: ['03'],nteeCodes: ['B'],maxItems: 50,});const { items } = await client.dataset(run.defaultDatasetId).listItems();console.log(items);
Python
import osfrom apify_client import ApifyClientclient = ApifyClient(os.environ['APIFY_TOKEN'])run = client.actor('automation-lab/tax-exempt-organization-search').call(run_input={'states': ['CA'],'subsections': ['03'],'nteeCodes': ['B'],'maxItems': 50,})items = client.dataset(run['defaultDatasetId']).list_items().itemsprint(items)
For searches that may run several minutes, prefer the asynchronous run endpoint or an SDK call() over a short HTTP client timeout.
Use with Model Context Protocol (MCP)
Claude Code setup
Add this Actor to Claude Code:
claude mcp add --transport http apify \"https://mcp.apify.com?tools=automation-lab/tax-exempt-organization-search"
Claude Desktop setup
Add the following server to the Claude Desktop MCP configuration:
{"mcpServers": {"apify": {"url": "https://mcp.apify.com?tools=automation-lab/tax-exempt-organization-search"}}}
Cursor setup
Add the same apify server URL in Cursor Settings → MCP.
VS Code setup
Add the same apify server URL to your VS Code MCP server configuration.
Example prompts:
- “Look up EIN 53-0196605 in the IRS tax-exempt master file.”
- “Export 25 New York 501(c)(3) organizations.”
- “Find California education nonprofits with status code 01 and tax periods from 202301.”
MCP clients still use your Apify account and the Actor's active pricing.
Performance tips
- Supply
stateswhenever geography is known. - Supply the state with an EIN when possible.
- Start with a low
maxItemswhile refining filters. - Use an NTEE prefix to split large state searches into meaningful segments.
- Increase Task timeout if you intentionally run a nationwide name search.
- Schedule repeat queries rather than manually rebuilding inputs.
The official state files are usually much smaller than the four regional files. A nationwide query must stream regional data until enough matches are found or all files are exhausted. Run duration therefore depends on filter selectivity, file size, IRS transfer speed, and where matching EINs occur in the sorted files.
Data freshness and limitations
- Data comes from the cumulative IRS EO BMF extract.
- Freshness follows the IRS publication schedule; this is not a real-time IRS status API.
- Filing addresses represent headquarters and may not represent every operating location.
- The EO BMF is not the same as the full Tax Exempt Organization Search product.
- The Actor does not download determination letters, Form 990 PDFs, revocation files, or organization officers.
assetAmount,incomeAmount,revenueAmount, andtaxPeriodcan be null.- NTEE and IRS classification codes require domain interpretation.
- A result indicates what the source file reported, not a legal opinion or endorsement.
maxItemsstops the run after the requested number of matches; it is not a claim that no additional matches exist.- If an IRS file repeatedly fails, the run fails instead of silently returning an incomplete nationwide dataset.
For code meanings, consult the IRS EO BMF information sheet linked from the IRS download page.
Legality and responsible use
IRS EO BMF data is public US government organization data. You remain responsible for how you combine, store, and use it.
Do not treat one code as a complete eligibility, fraud, sanctions, or charitable-status decision. Confirm high-impact decisions with current IRS guidance and other appropriate primary records. Respect applicable privacy, anti-discrimination, marketing, and data-retention rules.
This Actor is independently operated and is not endorsed by the Internal Revenue Service.
Troubleshooting
The run returned no records
Check that EINs contain nine digits after punctuation is removed. Confirm state, subsection, NTEE, status, and tax-period filters are not mutually exclusive. Remember that records with blank tax periods do not match a tax-period range. Try one filter at a time before combining them.
The run is slower than expected
Add a state filter so the Actor can use an official state file.
Reduce maxItems while testing.
Nationwide name and classification searches can scan large regional files.
The run failed with an IRS HTTP error
The Actor retries initial transient download failures. If all retries fail, wait for the public file to become available and rerun the same Task. No proxy configuration is required or accepted.
Why is a financial amount null?
The IRS master file does not supply every amount for every organization. Null means the field was blank or unavailable in that source row; it does not mean zero.
Why are codes strings instead of numbers?
EINs, subsections, status values, filing requirement codes, and other identifiers can contain leading zeros. Strings preserve the official representation.
FAQ
Does this Actor require an IRS account or IRS login?
No. It reads public official bulk CSV files and requires no IRS credentials.
Can I search 501(c)(3) organizations?
Yes.
Set subsections to ["03"] and add state or NTEE filters as needed.
Can I search by EIN?
Yes.
Use ein for an exact lookup.
Hyphenated and unhyphenated EINs are accepted.
Does it return Form 990 filings?
No. It returns organization-level EO BMF fields, including the latest available tax period and summary amounts. Use a filing-focused Actor for filing documents and filing-level details.
Does status code 01 prove tax deductibility?
No. Status, deductibility, subsection, filing requirements, and source freshness must be interpreted together under current IRS guidance.
Can I export all matching organizations?
One run can save up to 10,000 matches. Split larger exports by state, NTEE prefix, subsection, or another supported filter.
Can I monitor changes automatically?
You can schedule repeat Tasks and compare datasets by EIN. The Actor supplies snapshots; it does not emit a separate change-event record.
Related Automation Lab Actors
- ProPublica Nonprofit Explorer Scraper — use when you need nonprofit profiles and Form 990-derived financial information beyond the EO BMF record.
- US Denied Party Screening API — add a separate US restricted-party screening step to compliance workflows.
These Actors serve adjacent workflows and use separate sources, inputs, outputs, and pricing.