# Nonprofit Leads Scraper: IRS 990 Revenue, Assets & Contacts (`scrapemint/nonprofit-leads-scraper`) Actor

Find US nonprofits by keyword, state, and category with IRS 990 financials per organization: total revenue, expenses, assets, and multi-year trend. Segment by budget for lead lists and prospecting. Keyless public API, no browser. Pay per organization.

- **URL**: https://apify.com/scrapemint/nonprofit-leads-scraper.md
- **Developed by:** [Ken M](https://apify.com/scrapemint) (community)
- **Categories:** Lead generation, Business
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

Pay per usage

This Actor is paid per platform usage. The Actor is free to use, and you only pay for the Apify platform usage, which gets cheaper the higher subscription plan you have.

Learn more: https://docs.apify.com/platform/actors/running/actors-in-store#pay-per-usage

## What's an Apify Actor?

Actors are a software tools running on the Apify platform, for all kinds of web data extraction and automation use cases.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.
Actors are written with capital "A".

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.
The best way to integrate Actors is as follows.

In JavaScript/TypeScript projects, use official [JavaScript/TypeScript client](https://docs.apify.com/api/client/js.md):

```bash
npm install apify-client
```

In Python projects, use official [Python client library](https://docs.apify.com/api/client/python.md):

```bash
pip install apify-client
```

In shell scripts, use [Apify CLI](https://docs.apify.com/cli/docs.md):

````bash
# MacOS / Linux
curl -fsSL https://apify.com/install-cli.sh | bash
# Windows
irm https://apify.com/install-cli.ps1 | iex
```bash

In AI frameworks, you might use the [Apify MCP server](https://docs.apify.com/platform/integrations/mcp.md).

If your project is in a different language, use the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).


# README

## Nonprofit Leads Scraper: IRS 990 Revenue, Assets & Contacts

Turn the IRS nonprofit universe into a segmented lead list. Search US nonprofits by keyword, state, and NTEE category, and get one JSON row per organization with its 990 financials: latest total revenue, expenses, and assets, a multi-year revenue trend, filing history, address, and a link to the filing PDF and public profile. Filter by revenue band to target organizations that can actually afford you. Keyless public API on IRS data: no login, no browser, no seat license.

Built for vendors and agencies selling to nonprofits, grant consultants prospecting clients, fundraisers researching peers and funders, and analysts sizing the sector.

### What you get

One row per organization, with:

- `ein`, `name`, `city`, `state`, `address`, `zipcode`, `nteeCode`, `subsectionCode`, `rulingDate`
- `totalRevenue`, `totalExpenses`, `totalAssets`, `latestFilingYear`
- `revenueByYear` (up to 5 years — spot growth or decline at a glance)
- `filingsAvailable`, `latestFilingPdf`, `profileUrl`, `matchedTerm`

### Input

- `searchTerms` (matched against organization names)
- `states` (two-letter codes)
- `nteeCategories` (1=Arts, 2=Education, 3=Environment, 4=Health, 5=Human Services, 6=International, 7=Public Benefit, 8=Religion, 9=Mutual Benefit)
- `minRevenue` / `maxRevenue` (segment by budget, e.g. only orgs over $1M)
- `includeFinancials` (default on; one extra request per org)
- `maxOrgs` (default 25, up to 1000)
- `dedupe` (skip previously returned EINs; built for scheduled prospecting)

### Example input

```json
{
  "searchTerms": ["food bank"],
  "states": ["TX", "OK"],
  "minRevenue": 1000000,
  "maxOrgs": 100
}
````

### Example output

```json
{
  "ein": 742181456,
  "name": "Houston Food Bank",
  "city": "Houston",
  "state": "TX",
  "nteeCode": "K31",
  "latestFilingYear": 2023,
  "totalRevenue": 401238747,
  "totalExpenses": 389516210,
  "totalAssets": 273904481,
  "revenueByYear": { "2023": 401238747, "2022": 388112604, "2021": 421077553 },
  "profileUrl": "https://projects.propublica.org/nonprofits/organizations/742181456"
}
```

### Uses

- Lead lists for software, services, and consultancies that sell to nonprofits, segmented by real budget
- Grant consultants: find growing organizations in your niche before pitching
- Fundraising benchmarks: revenue trends for every peer organization in a category and state
- Pair with the Grant Opportunity Finder: who is funding, who needs funding, in one workflow
- Chain the names into a website contact scraper for outreach emails

### Pricing

Pay per organization row. Organizations with no filing data on record are free rows, and searches that match nothing cost nothing. The first 2 rows of every run are free so you can validate output before you scale up.

### Notes

- Data comes from ProPublica's Nonprofit Explorer public API, built on IRS Form 990 filings and the IRS Business Master File. Financials reflect the latest filing on record, which typically lags the current year.
- Revenue filters require financials and skip organizations without filing data.

# Actor input Schema

## `searchTerms` (type: `array`):

Keywords matched against organization names, e.g. food bank, animal rescue, youth education.

## `states` (type: `array`):

Two-letter US state codes to filter by, e.g. TX, CA, NY. Empty = all states.

## `nteeCategories` (type: `array`):

1=Arts, 2=Education, 3=Environment, 4=Health, 5=Human Services, 6=International, 7=Public Benefit, 8=Religion, 9=Mutual Benefit, 10=Unknown.

## `minRevenue` (type: `integer`):

Only return organizations whose latest reported total revenue is at least this (USD). Requires financials.

## `maxRevenue` (type: `integer`):

Only return organizations whose latest reported total revenue is at most this (USD).

## `includeFinancials` (type: `boolean`):

Adds latest revenue, expenses, assets, and a multi-year revenue trend (one extra request per organization). Organizations with no filing data become free rows.

## `maxOrgs` (type: `integer`):

Cap on organization rows returned. Controls total cost.

## `dedupe` (type: `boolean`):

Remember returned EINs across runs and skip them. Turn on for scheduled prospecting.

## Actor input object example

```json
{
  "searchTerms": [
    "food bank"
  ],
  "states": [
    "TX"
  ],
  "nteeCategories": [],
  "includeFinancials": true,
  "maxOrgs": 25,
  "dedupe": false
}
```

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "searchTerms": [
        "food bank"
    ],
    "states": [
        "TX"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("scrapemint/nonprofit-leads-scraper").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = {
    "searchTerms": ["food bank"],
    "states": ["TX"],
}

# Run the Actor and wait for it to finish
run = client.actor("scrapemint/nonprofit-leads-scraper").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print("💾 Check your data here: https://console.apify.com/storage/datasets/" + run["defaultDatasetId"])
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "searchTerms": [
    "food bank"
  ],
  "states": [
    "TX"
  ]
}' |
apify call scrapemint/nonprofit-leads-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=scrapemint/nonprofit-leads-scraper",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Nonprofit Leads Scraper: IRS 990 Revenue, Assets & Contacts",
        "description": "Find US nonprofits by keyword, state, and category with IRS 990 financials per organization: total revenue, expenses, assets, and multi-year trend. Segment by budget for lead lists and prospecting. Keyless public API, no browser. Pay per organization.",
        "version": "0.1",
        "x-build-id": "nxjDdbbsXEsnbL71T"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/scrapemint~nonprofit-leads-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-scrapemint-nonprofit-leads-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        },
        "/acts/scrapemint~nonprofit-leads-scraper/runs": {
            "post": {
                "operationId": "runs-sync-scrapemint-nonprofit-leads-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor and returns information about the initiated run in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/runsResponseSchema"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/acts/scrapemint~nonprofit-leads-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-scrapemint-nonprofit-leads-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        }
    },
    "components": {
        "schemas": {
            "inputSchema": {
                "type": "object",
                "properties": {
                    "searchTerms": {
                        "title": "Search terms",
                        "type": "array",
                        "description": "Keywords matched against organization names, e.g. food bank, animal rescue, youth education.",
                        "default": [
                            "food bank"
                        ],
                        "items": {
                            "type": "string"
                        }
                    },
                    "states": {
                        "title": "States (optional)",
                        "type": "array",
                        "description": "Two-letter US state codes to filter by, e.g. TX, CA, NY. Empty = all states.",
                        "default": [],
                        "items": {
                            "type": "string"
                        }
                    },
                    "nteeCategories": {
                        "title": "NTEE major categories (optional)",
                        "type": "array",
                        "description": "1=Arts, 2=Education, 3=Environment, 4=Health, 5=Human Services, 6=International, 7=Public Benefit, 8=Religion, 9=Mutual Benefit, 10=Unknown.",
                        "default": [],
                        "items": {
                            "type": "string"
                        }
                    },
                    "minRevenue": {
                        "title": "Min annual revenue (optional)",
                        "minimum": 0,
                        "type": "integer",
                        "description": "Only return organizations whose latest reported total revenue is at least this (USD). Requires financials."
                    },
                    "maxRevenue": {
                        "title": "Max annual revenue (optional)",
                        "minimum": 0,
                        "type": "integer",
                        "description": "Only return organizations whose latest reported total revenue is at most this (USD)."
                    },
                    "includeFinancials": {
                        "title": "Fetch IRS 990 financials per organization",
                        "type": "boolean",
                        "description": "Adds latest revenue, expenses, assets, and a multi-year revenue trend (one extra request per organization). Organizations with no filing data become free rows.",
                        "default": true
                    },
                    "maxOrgs": {
                        "title": "Max organizations per run",
                        "minimum": 1,
                        "maximum": 1000,
                        "type": "integer",
                        "description": "Cap on organization rows returned. Controls total cost.",
                        "default": 25
                    },
                    "dedupe": {
                        "title": "Skip organizations seen in previous runs",
                        "type": "boolean",
                        "description": "Remember returned EINs across runs and skip them. Turn on for scheduled prospecting.",
                        "default": false
                    }
                }
            },
            "runsResponseSchema": {
                "type": "object",
                "properties": {
                    "data": {
                        "type": "object",
                        "properties": {
                            "id": {
                                "type": "string"
                            },
                            "actId": {
                                "type": "string"
                            },
                            "userId": {
                                "type": "string"
                            },
                            "startedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "finishedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "status": {
                                "type": "string",
                                "example": "READY"
                            },
                            "meta": {
                                "type": "object",
                                "properties": {
                                    "origin": {
                                        "type": "string",
                                        "example": "API"
                                    },
                                    "userAgent": {
                                        "type": "string"
                                    }
                                }
                            },
                            "stats": {
                                "type": "object",
                                "properties": {
                                    "inputBodyLen": {
                                        "type": "integer",
                                        "example": 2000
                                    },
                                    "rebootCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "restartCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "resurrectCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "computeUnits": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "options": {
                                "type": "object",
                                "properties": {
                                    "build": {
                                        "type": "string",
                                        "example": "latest"
                                    },
                                    "timeoutSecs": {
                                        "type": "integer",
                                        "example": 300
                                    },
                                    "memoryMbytes": {
                                        "type": "integer",
                                        "example": 1024
                                    },
                                    "diskMbytes": {
                                        "type": "integer",
                                        "example": 2048
                                    }
                                }
                            },
                            "buildId": {
                                "type": "string"
                            },
                            "defaultKeyValueStoreId": {
                                "type": "string"
                            },
                            "defaultDatasetId": {
                                "type": "string"
                            },
                            "defaultRequestQueueId": {
                                "type": "string"
                            },
                            "buildNumber": {
                                "type": "string",
                                "example": "1.0.0"
                            },
                            "containerUrl": {
                                "type": "string"
                            },
                            "usage": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "integer",
                                        "example": 1
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "usageTotalUsd": {
                                "type": "number",
                                "example": 0.00005
                            },
                            "usageUsd": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "number",
                                        "example": 0.00005
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
