# ProPublica Nonprofit Explorer API

> ProPublica Nonprofit Explorer returns nonprofit organization and financial data as a workflow and API.

ProPublica Nonprofit Explorer, also called ProPublica, finds U.S. nonprofits by name, with optional city and state filters. Get nonprofit financials returns filing-year figures and available filing links; provide an organization name, EIN, or Nonprofit Explorer link.

- Page: https://fous.com/tools/propublica-nonprofit-explorer
- Handle: `@propublica-nonprofit-explorer`
- Category: [Data](https://fous.com/tools/category/data)
- Source website: https://projects.propublica.org/nonprofits
- Last verified: Sep 29, 2026

## Methods

### Get nonprofit financials

Operation `get_nonprofit_financials`, version 1. 1 credit per completed call. Failed calls without a completed billing receipt are free; completed work can remain charged if delivery is interrupted.

Get a US nonprofit’s filing-year revenue, expenses, assets, liabilities, highest reported officer or key employee pay, and available Form 990 PDF links. Some years have no extracted figures or PDF.

**Input**

| Field | Type | Required | Example | Description |
|---|---|---|---|---|
| `state` | string | no | `"NY"` | Optional two-letter state to distinguish similar names, for example CA. |
| `max_years` | integer | no | `3` | Maximum number of filing years, newest first, for example 5. |
| `organization` | string | yes | `"20-0049703"` | The nonprofit name, EIN, or its Nonprofit Explorer link, for example Wikimedia Foundation or 20-0049703. |

**Input schema**

```json
{
  "type": "object",
  "required": [
    "organization"
  ],
  "properties": {
    "state": {
      "type": "string",
      "description": "Optional two-letter state to distinguish similar names, for example CA.",
      "examples": [
        "NY"
      ]
    },
    "max_years": {
      "type": "integer",
      "default": 5,
      "maximum": 20,
      "minimum": 1,
      "description": "Maximum number of filing years, newest first, for example 5.",
      "x-fous-developer": true,
      "examples": [
        3,
        2
      ]
    },
    "organization": {
      "type": "string",
      "description": "The nonprofit name, EIN, or its Nonprofit Explorer link, for example Wikimedia Foundation or 20-0049703.",
      "examples": [
        "20-0049703",
        "Wikimedia Foundation",
        "ProPublica"
      ]
    }
  },
  "additionalProperties": false,
  "examples": [
    {
      "max_years": 3,
      "organization": "20-0049703"
    },
    {
      "organization": "Wikimedia Foundation"
    },
    {
      "state": "NY",
      "max_years": 2,
      "organization": "ProPublica"
    }
  ]
}
```

**Output**

| Field | Type | Example | Description |
|---|---|---|---|
| `ein` | string | `"20-0049703"` |  |
| `city` | string or null | `"San Francisco"` |  |
| `name` | string | `"Wikimedia Foundation Org"` |  |
| `state` | string or null | `"CA"` |  |
| `filings` | array |  |  |
| `filings[].tax_year` | integer | `2025` | Filing tax year. |
| `filings[].filing_pdf_link` | string or null | `"https://projects.propublica.org/nonprofits/download-filing?path=IRS%2F200049703_202406_990_2025051223428459.pdf"` | Direct filing PDF link, if available. |
| `filings[].filing_page_link` | string | `"https://projects.propublica.org/nonprofits/organizations/200049703#filing2025"` | Nonprofit Explorer page for this filing year. |
| `filings[].total_assets_usd` | integer or null | `310794417` | Year-end total assets in USD, if extracted. |
| `filings[].total_revenue_usd` | integer or null | `205389744` | Total revenue in USD, if extracted. |
| `filings[].total_expenses_usd` | integer or null | `189748442` | Total expenses in USD, if extracted. |
| `filings[].total_liabilities_usd` | integer or null | `14244387` | Year-end total liabilities in USD, if extracted. |
| `filings[].highest_paid_executive_name` | string or null | `"Maryana Iskander"` | Highest compensated listed officer or key employee, if reported. |
| `filings[].highest_paid_executive_pay_usd` | integer or null | `553360` | Reported compensation, including related and other compensation, in USD. |
| `nonprofit_explorer_link` | string | `"https://projects.propublica.org/nonprofits/organizations/200049703"` |  |

**Example input**

```json
{
  "max_years": 3,
  "organization": "20-0049703"
}
```

**Example output**

```json
{
  "ein": "20-0049703",
  "city": "San Francisco",
  "name": "Wikimedia Foundation Org",
  "state": "CA",
  "filings": [
    {
      "tax_year": 2025,
      "filing_pdf_link": null,
      "filing_page_link": "https://projects.propublica.org/nonprofits/organizations/200049703#filing2025",
      "total_assets_usd": 310794417,
      "total_revenue_usd": 205389744,
      "total_expenses_usd": 189748442,
      "total_liabilities_usd": 14244387,
      "highest_paid_executive_name": "Maryana Iskander",
      "highest_paid_executive_pay_usd": 553360
    },
    {
      "tax_year": 2024,
      "filing_pdf_link": "https://projects.propublica.org/nonprofits/download-filing?path=IRS%2F200049703_202406_990_2025051223428459.pdf",
      "filing_page_link": "https://projects.propublica.org/nonprofits/organizations/200049703#filing2024",
      "total_assets_usd": 286759938,
      "total_revenue_usd": 185418243,
      "total_expenses_usd": 178588294,
      "total_liabilities_usd": 15204548,
      "highest_paid_executive_name": "Maryana Iskander",
      "highest_paid_executive_pay_usd": 494079
    },
    {
      "tax_year": 2023,
      "filing_pdf_link": null,
      "filing_page_link": "https://projects.propublica.org/nonprofits/organizations/200049703#filing2023",
      "total_assets_usd": 274123369,
      "total_revenue_usd": 180199672,
      "total_expenses_usd": 168305333,
      "total_liabilities_usd": 19152033,
      "highest_paid_executive_name": "Maryana Iskander",
      "highest_paid_executive_pay_usd": 534468
    }
  ],
  "nonprofit_explorer_link": "https://projects.propublica.org/nonprofits/organizations/200049703"
}
```

### Search nonprofits

Operation `search_nonprofits`, version 1. 1 credit per completed call. Failed calls without a completed billing receipt are free; completed work can remain charged if delivery is interrupted.

Find U.S. nonprofits by organization name, optionally filtering by state and city. Includes the latest reported revenue and assets when available; reporting years may differ between organizations.

**Input**

| Field | Type | Required | Example | Description |
|---|---|---|---|---|
| `city` | string | no | `"Washington"` | City to match, for example Washington. Leave blank for any city. |
| `name` | string | yes | `"Red Cross"` | Organization name to search for, for example Red Cross. |
| `state` | string | no | `"DC"` | U.S. state or territory name or two-letter postal code, for example New York or NY. Leave blank to search all states. |
| `max_results` | integer | no | `5` | Maximum organizations to return, for example 25. |

**Input schema**

```json
{
  "type": "object",
  "required": [
    "name"
  ],
  "properties": {
    "city": {
      "type": "string",
      "default": "",
      "description": "City to match, for example Washington. Leave blank for any city.",
      "examples": [
        "Washington",
        "Buffalo"
      ]
    },
    "name": {
      "type": "string",
      "minLength": 1,
      "description": "Organization name to search for, for example Red Cross.",
      "examples": [
        "Red Cross",
        "zyzzxyzaasstt",
        "Community Foundation"
      ]
    },
    "state": {
      "type": "string",
      "default": "",
      "description": "U.S. state or territory name or two-letter postal code, for example New York or NY. Leave blank to search all states.",
      "examples": [
        "DC",
        "New York"
      ]
    },
    "max_results": {
      "type": "integer",
      "default": 25,
      "maximum": 100,
      "minimum": 1,
      "description": "Maximum organizations to return, for example 25.",
      "x-fous-developer": true,
      "examples": [
        5,
        3,
        2
      ]
    }
  },
  "additionalProperties": false,
  "examples": [
    {
      "city": "Washington",
      "name": "Red Cross",
      "state": "DC",
      "max_results": 5
    },
    {
      "name": "Red Cross",
      "state": "New York",
      "max_results": 3
    },
    {
      "name": "zyzzxyzaasstt",
      "max_results": 5
    }
  ]
}
```

**Output**

| Field | Type | Example | Description |
|---|---|---|---|
| `organizations` | array |  |  |
| `organizations[].ein` | string | `"530196605"` | Nine-digit IRS tax ID number, retaining leading zeroes. |
| `organizations[].city` | string or null | `"Washington"` |  |
| `organizations[].name` | string | `"American National Red Cross"` |  |
| `organizations[].state` | string or null | `"DC"` |  |
| `organizations[].category` | string or null | `"Human services"` |  |
| `organizations[].assets_tax_year` | integer or null | `2025` |  |
| `organizations[].tax_exempt_type` | string or null | `"501(c)(3) charity"` |  |
| `organizations[].revenue_tax_year` | integer or null | `2025` |  |
| `organizations[].latest_total_assets_usd` | number or null | `5052941623` |  |
| `organizations[].nonprofit_explorer_link` | string | `"https://projects.propublica.org/nonprofits/organizations/530196605"` |  |
| `organizations[].latest_total_revenue_usd` | number or null | `3916983933` |  |

**Example input**

```json
{
  "city": "Washington",
  "name": "Red Cross",
  "state": "DC",
  "max_results": 5
}
```

**Example output**

```json
{
  "organizations": [
    {
      "ein": "530196605",
      "city": "Washington",
      "name": "American National Red Cross",
      "state": "DC",
      "category": "Human services",
      "assets_tax_year": 2025,
      "tax_exempt_type": "501(c)(3) charity",
      "revenue_tax_year": 2025,
      "latest_total_assets_usd": 5052941623,
      "nonprofit_explorer_link": "https://projects.propublica.org/nonprofits/organizations/530196605",
      "latest_total_revenue_usd": 3916983933
    },
    {
      "ein": "591748379",
      "city": "Washington",
      "name": "Association Of American Red Cross Retirees",
      "state": "DC",
      "category": null,
      "assets_tax_year": 2025,
      "tax_exempt_type": "501(c)(4) social welfare organization",
      "revenue_tax_year": 2025,
      "latest_total_assets_usd": 0,
      "nonprofit_explorer_link": "https://projects.propublica.org/nonprofits/organizations/591748379",
      "latest_total_revenue_usd": 0
    }
  ]
}
```

## Quick start

Replace `YOUR_API_KEY` with a Fous API key. To create one, open Developers at the bottom of Fous Studio, turn on Developer mode, then go to API keys (https://app.fous.com/keys). Change the values in `input` to run the same tool on new data.

```bash
curl 'https://api.fous.com/v1/query' \
  --fail-with-body --silent --show-error --max-time 180 \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H 'Content-Type: application/json' \
  --data-raw '{
  "api": "@propublica-nonprofit-explorer",
  "visibility": "public",
  "operation": "get_nonprofit_financials",
  "version": 1,
  "input": {
    "max_years": 3,
    "organization": "20-0049703"
  },
  "response": {
    "format": "json"
  }
}'
```

```python
# Save as fous.py and run with python3 fous.py. No packages needed.
import json
import urllib.error
import urllib.request

api_key = "YOUR_API_KEY"

body = json.loads("{\n  \"api\": \"@propublica-nonprofit-explorer\",\n  \"visibility\": \"public\",\n  \"operation\": \"get_nonprofit_financials\",\n  \"version\": 1,\n  \"input\": {\n    \"max_years\": 3,\n    \"organization\": \"20-0049703\"\n  },\n  \"response\": {\n    \"format\": \"json\"\n  }\n}")
request = urllib.request.Request(
    "https://api.fous.com/v1/query",
    data=json.dumps(body).encode("utf-8"),
    headers={
        "Authorization": f"Bearer {api_key}",
        "Content-Type": "application/json",
    },
    method="POST",
)
try:
    with urllib.request.urlopen(request, timeout=180) as response:
        result = json.load(response)
except urllib.error.HTTPError as error:
    raise RuntimeError(f"HTTP {error.code}: {error.read().decode('utf-8', errors='replace')}") from error
if result.get("success") is False:
    raise RuntimeError(result.get("error", {}).get("message", "Request failed"))
print(json.dumps(result["data"]["output"], indent=2))
```

```typescript
// Save as fous.mts and run with npx tsx fous.mts.
const apiKey = "YOUR_API_KEY";

const response = await fetch("https://api.fous.com/v1/query", {
  method: "POST",
  headers: {
    "Authorization": `Bearer ${apiKey}`,
    "Content-Type": "application/json",
  },
  signal: AbortSignal.timeout(180_000),
  body: JSON.stringify({
  "api": "@propublica-nonprofit-explorer",
  "visibility": "public",
  "operation": "get_nonprofit_financials",
  "version": 1,
  "input": {
    "max_years": 3,
    "organization": "20-0049703"
  },
  "response": {
    "format": "json"
  }
}),
});
type ApiResult = { success: boolean; data?: { output: unknown }; error?: { message: string } };
const result: ApiResult = await response.json();
if (!response.ok || result.success === false) {
  throw new Error(result.error?.message ?? `HTTP ${response.status}`);
}
if (!result.data) throw new Error("Missing API response data");
console.log(result.data.output);
```

## Use from an AI assistant

Connect this tool to Claude Code, Claude Desktop, Cursor, VS Code, Codex and any MCP client as its own MCP server. Each method is a typed tool whose arguments are the method’s input.

- Server URL: `https://api.fous.com/mcp/tools/propublica-nonprofit-explorer`
- Authorization: `Authorization: Bearer <Fous API key>`

**Tools**

- `get_nonprofit_financials`: Get nonprofit financials. 1 credit per completed call. Failed calls without a completed billing receipt are free; completed work can remain charged if delivery is interrupted.
- `search_nonprofits`: Search nonprofits. 1 credit per completed call. Failed calls without a completed billing receipt are free; completed work can remain charged if delivery is interrupted.
- `fous_get_run`: the result of a run that was still going, by its `request_id`. Free.

Claude Code:

```bash
claude mcp add --scope user --transport http fous-propublica-nonprofit-explorer https://api.fous.com/mcp/tools/propublica-nonprofit-explorer --header "Authorization: Bearer ${FOUS_API_KEY:?Set FOUS_API_KEY to your Fous API key}"
```

To give the assistant every tool, connect `https://api.fous.com/mcp`: it finds one with `fous_search_tools` and runs it with `fous_run_tool`. Setup for other clients: https://fous.com/llms-full.txt.

## Use cases

- Find nonprofits by name, city, and state.
- Compare nonprofits’ reported revenue and assets.
- Review a nonprofit’s revenue, expenses, assets, and liabilities by filing year.
- Identify a nonprofit’s highest-paid reported officer or key employee.

## FAQ

### Can I run it with my own inputs?

Yes. Change the inputs in Studio and press Run, or send new inputs from your code, or ask a connected AI assistant.

### Can I call this ProPublica Nonprofit Explorer tool as an API?

Yes. Send a POST request to /v1/query with your Fous API key and the inputs, and get JSON back.

### How much does it cost?

Each completed run costs 1 credit. Failed runs without a completed receipt are free; completed work can remain charged if delivery is interrupted. With pay as you go, a credit costs 1¢. Monthly plans cost less per credit.

### Do I need a ProPublica Nonprofit Explorer account?

No. You only need a Fous account.

### How current is the data?

Fous gets the data from projects.propublica.org when you run it. Some results are reused for up to 24 hours, and results that use your account or key are never reused. It was last verified on Sep 29, 2026.

### What nonprofits match an organization name?

Search nonprofits finds organizations by name, with optional city and state filters.

### What are a nonprofit’s reported revenue and assets?

Search nonprofits returns the latest reported revenue and assets when available. Get nonprofit financials returns figures by filing year when extracted.

### Who is a nonprofit’s highest-paid listed executive?

Get nonprofit financials returns the highest compensated listed officer or key employee when reported.

## Related

- [IRS API](https://fous.com/tools/irs.md): IRS provides tax information and public organization records, including charity status and current-directory forms, instructions, and publications with revision and posting dates.
- [NPI Registry API](https://fous.com/tools/npi-registry.md): NPI Registry returns public US provider search results with contact and taxonomy details, plus individual 10-digit NPI records with registry dates; fields may be missing.
- [NIH RePORTER API](https://fous.com/tools/nih-reporter.md): Public research funding and project records from the National Institutes of Health.
- [NPR API](https://fous.com/tools/npr.md): NPR returns displayed section headlines, searchable articles with summaries and publication details, and available article text; date-filtered searches may miss older stories edited much later.
- [Grants.gov API](https://fous.com/tools/grants-gov.md): U.S. federal grant opportunities and application information.
- [USAspending API](https://fous.com/tools/usaspending.md): USAspending provides official federal spending data and searchable awards from October 1, 2007 onward; figures and agency account reports may be revised or lag published award updates.
- [North Data API](https://fous.com/tools/north-data.md): Public company register information for European companies.
- [SEC EDGAR API](https://fous.com/tools/sec-edgar.md): SEC EDGAR provides filings, annual and quarterly financials, exact-phrase matches, up to 200 insider trades, and quarterly 13F manager holdings; older filings appear when available.
- [All Data tools](https://fous.com/tools/category/data)
