# 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/workflows/propublica-nonprofit-explorer
- Handle: `@propublica-nonprofit-explorer`
- Category: [Data](https://fous.com/workflows/category/data)
- Source website: https://projects.propublica.org/nonprofits
- Last verified: Sep 29, 2026
- Fous is not affiliated with ProPublica Nonprofit Explorer.

## Methods

### Get nonprofit financials

Operation `get_nonprofit_financials`, version 1. 1 credit per call.

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 call.

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

Call the API with a Fous API key (`FOUS_API_KEY`). To create one, turn on Developer mode in Fous Studio, then open Keys & connections → API keys (https://app.fous.com/keys).

```bash
# First set your key: export FOUS_API_KEY='YOUR_FOUS_API_KEY'
: "${FOUS_API_KEY:?Set FOUS_API_KEY before running this example}"

curl 'https://api.fous.com/v1/query' \
  --fail-with-body --silent --show-error --max-time 120 \
  -H "Authorization: Bearer $FOUS_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.
# First set your key: export FOUS_API_KEY='YOUR_FOUS_API_KEY'
import json
import os
import urllib.error
import urllib.request

api_key = os.environ.get("FOUS_API_KEY")
if not api_key:
    raise RuntimeError("Set FOUS_API_KEY before running this example")

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=120) 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.
// First set your key: export FOUS_API_KEY='YOUR_FOUS_API_KEY'
const apiKey = process.env.FOUS_API_KEY;
if (!apiKey) throw new Error("Set FOUS_API_KEY before running this example");

const response = await fetch("https://api.fous.com/v1/query", {
  method: "POST",
  headers: {
    "Authorization": `Bearer ${apiKey}`,
    "Content-Type": "application/json",
  },
  signal: AbortSignal.timeout(120_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);
```

Or describe the data in plain language: send `{"api":"@propublica-nonprofit-explorer","prompt":"Describe the data you need, with every detail"}` to the same URL. Fous fills in the input, runs the method that fits and returns only the fields you asked for; `data.route.calls[].request` is the exact call it made. Routing is free; the run costs the same.

## 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

### Is Fous affiliated with ProPublica Nonprofit Explorer?

No. Fous is not affiliated with ProPublica Nonprofit Explorer. This workflow reads the public projects.propublica.org website and returns its data.

### How much does it cost?

Each run costs 1 credit. 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; repeating the same request within a day may return the saved result. Fous checks this workflow automatically; it last passed a check 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/workflows/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/workflows/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/workflows/nih-reporter.md): Public research funding and project records from the National Institutes of Health.
- [NPR API](https://fous.com/workflows/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/workflows/grants-gov.md): U.S. federal grant opportunities and application information.
- [USAspending API](https://fous.com/workflows/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/workflows/north-data.md): Public company register information for European companies.
- [SEC EDGAR API](https://fous.com/workflows/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 workflows](https://fous.com/workflows/category/data)
