# Nonprofit 990 Financials Finder (`agentictools/nonprofit-990-finder`) Actor

Find US nonprofit financials from IRS 990 filings via ProPublica: revenue, expenses, assets, and totals by organization name, EIN, or state.

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

## Pricing

$2.00 / 1,000 organization returneds

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

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

## 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 990 Financials Finder

Find US nonprofit financials from IRS Form 990 filings via ProPublica: revenue, expenses, assets, and totals by organization name, EIN, or state.

### What it does

The Actor searches ProPublica's Nonprofit Explorer for US tax-exempt organizations and returns each one's latest 990 filing totals. Search by organization name (optionally narrowed to one state) or look up a specific list of EINs directly.

### Example input

Search by name, narrowed to one state:

```json
{ "query": "food bank", "state": "CA", "maxItems": 15 }
````

Look up specific organizations by EIN:

```json
{ "eins": ["23-7111782", "13-1624202"], "includeFinancials": true }
```

### Input

| Field | Type | Description |
|---|---|---|
| `query` | string | Organization name search term. Leave empty if you provide `eins` instead. |
| `eins` | array | Specific EINs to look up (9 digit federal tax ID, dash optional). Used instead of the name search when provided. |
| `state` | string | Two-letter state code to narrow the name search. Ignored for EIN lookups. |
| `includeFinancials` | boolean | Fetch each organization's latest 990 totals. Default true. Adds one request per organization. |
| `maxItems` | integer | Maximum organizations to return from a name search (max 200). Ignored for EIN lookups, which always return all of them. |

### Output

Each dataset item is one organization:

```json
{
  "ein": 237111782,
  "name": "Yolo Food Bank",
  "city": "Woodland",
  "state": "CA",
  "nteeCode": "K31Z",
  "subsection": 3,
  "url": "https://projects.propublica.org/nonprofits/organizations/237111782",
  "latestFinancials": {
    "fiscalYear": 2023,
    "totalRevenue": 23338085,
    "totalExpenses": 23350748,
    "totalAssets": 19376488,
    "totalLiabilities": 8588506,
    "netAssets": 10787982
  }
}
```

`latestFinancials` is omitted when `includeFinancials` is false, or set to null when no 990 data is available for that organization.

#### Run summary (OUTPUT)

The run's default key-value store record `OUTPUT` holds an aggregate for the whole result set:

```json
{
  "query": { "query": "food bank", "eins": null, "state": "CA", "includeFinancials": true },
  "organizationsReturned": 15,
  "requestedMaxItems": 15,
  "organizationsWithFinancials": 10,
  "totalRevenueAcrossResults": 358841805,
  "generatedFrom": "https://projects.propublica.org/nonprofits/api/v2/search.json"
}
```

### How it works

The Actor calls ProPublica's public Nonprofit Explorer API with a descriptive User-Agent, paginates through name search results, and (when requested) fetches each organization's detail page to pull the most recent 990 filing's totals. Requests are spaced out to stay gentle on the API. EINs that ProPublica has no record of are skipped rather than returned as empty rows.

### Use cases

- Due diligence on a nonprofit before donating, partnering, or granting funds.
- Lead generation: build a list of nonprofits in a state or sector with their size and financial health.
- Compare an organization's revenue and expenses year over year using its EIN.
- Feed nonprofit financial data into research, journalism, or compliance workflows.

MIT licensed.

# Actor input Schema

## `query` (type: `string`):

Search term matched against nonprofit names (for example "food bank", "Red Cross"). Leave empty if you provide EINs instead.

## `eins` (type: `array`):

Look up specific organizations by EIN (9 digit federal tax ID, with or without the dash). Used instead of the name search when provided.

## `state` (type: `string`):

Restrict the name search to nonprofits headquartered in this state. Ignored when looking up EINs directly.

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

Fetch each organization's detail page and add the most recent 990 filing totals (revenue, expenses, assets, liabilities). Adds one extra request per organization.

## `maxItems` (type: `integer`):

Maximum number of organizations to return from a name search. Ignored when looking up specific EINs (all of them are returned).

## Actor input object example

```json
{
  "query": "food bank",
  "eins": [
    "23-7111782",
    "131624202"
  ],
  "state": "",
  "includeFinancials": true,
  "maxItems": 25
}
```

# 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 = {
    "query": "food bank"
};

// Run the Actor and wait for it to finish
const run = await client.actor("agentictools/nonprofit-990-finder").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 = { "query": "food bank" }

# Run the Actor and wait for it to finish
run = client.actor("agentictools/nonprofit-990-finder").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 '{
  "query": "food bank"
}' |
apify call agentictools/nonprofit-990-finder --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Nonprofit 990 Financials Finder",
        "description": "Find US nonprofit financials from IRS 990 filings via ProPublica: revenue, expenses, assets, and totals by organization name, EIN, or state.",
        "version": "0.1",
        "x-build-id": "Lxa2tTabYMDM2a8fE"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/agentictools~nonprofit-990-finder/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-agentictools-nonprofit-990-finder",
                "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/agentictools~nonprofit-990-finder/runs": {
            "post": {
                "operationId": "runs-sync-agentictools-nonprofit-990-finder",
                "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/agentictools~nonprofit-990-finder/run-sync": {
            "post": {
                "operationId": "run-sync-agentictools-nonprofit-990-finder",
                "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": {
                    "query": {
                        "title": "Organization name",
                        "type": "string",
                        "description": "Search term matched against nonprofit names (for example \"food bank\", \"Red Cross\"). Leave empty if you provide EINs instead."
                    },
                    "eins": {
                        "title": "EINs",
                        "type": "array",
                        "description": "Look up specific organizations by EIN (9 digit federal tax ID, with or without the dash). Used instead of the name search when provided.",
                        "items": {
                            "type": "string"
                        }
                    },
                    "state": {
                        "title": "State",
                        "enum": [
                            "",
                            "AL",
                            "AK",
                            "AZ",
                            "AR",
                            "CA",
                            "CO",
                            "CT",
                            "DE",
                            "DC",
                            "FL",
                            "GA",
                            "HI",
                            "ID",
                            "IL",
                            "IN",
                            "IA",
                            "KS",
                            "KY",
                            "LA",
                            "ME",
                            "MD",
                            "MA",
                            "MI",
                            "MN",
                            "MS",
                            "MO",
                            "MT",
                            "NE",
                            "NV",
                            "NH",
                            "NJ",
                            "NM",
                            "NY",
                            "NC",
                            "ND",
                            "OH",
                            "OK",
                            "OR",
                            "PA",
                            "RI",
                            "SC",
                            "SD",
                            "TN",
                            "TX",
                            "UT",
                            "VT",
                            "VA",
                            "WA",
                            "WV",
                            "WI",
                            "WY"
                        ],
                        "type": "string",
                        "description": "Restrict the name search to nonprofits headquartered in this state. Ignored when looking up EINs directly.",
                        "default": ""
                    },
                    "includeFinancials": {
                        "title": "Include latest financials",
                        "type": "boolean",
                        "description": "Fetch each organization's detail page and add the most recent 990 filing totals (revenue, expenses, assets, liabilities). Adds one extra request per organization.",
                        "default": true
                    },
                    "maxItems": {
                        "title": "Max organizations",
                        "minimum": 1,
                        "maximum": 200,
                        "type": "integer",
                        "description": "Maximum number of organizations to return from a name search. Ignored when looking up specific EINs (all of them are returned).",
                        "default": 25
                    }
                }
            },
            "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
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
