# Charity & Nonprofit Rating Scraper (`lulzasaur/charity-navigator-scraper`) Actor

Scrape Charity Navigator for nonprofit ratings, financial scores, and accountability metrics. Search by keyword, browse by category, or look up charities by EIN. Returns star ratings, revenue, mission, and more.

- **URL**: https://apify.com/lulzasaur/charity-navigator-scraper.md
- **Developed by:** [lulz bot](https://apify.com/lulzasaur) (community)
- **Categories:** Other
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, NaN bookmarks
- **User rating**: No ratings yet

## Pricing

from $5.00 / 1,000 results

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

## Charity Navigator Scraper

Scrape nonprofit ratings, financial scores, and accountability data from [Charity Navigator](https://www.charitynavigator.org) — the largest nonprofit evaluator in the United States.

### What You Get

- Star ratings (0-4) and numeric score (0-100%)
- Financial metrics: total revenue, expenses, program/admin/fundraising ratios
- Accountability and transparency scores
- Mission statement and website
- Location, cause categories, staff/leadership info
- Organization size and IRS NTEE classification

### Scrape Modes

#### 1. Search (default)
Find charities by keyword across all 1.8 million nonprofits in Charity Navigator's database.

**Input:**
```json
{
  "mode": "search",
  "searchQuery": "animal rescue",
  "limit": 20
}
````

#### 2. Details

Get the complete profile for a specific charity by EIN (Employer Identification Number).

**Input:**

```json
{
  "mode": "details",
  "ein": "131624100"
}
```

#### 3. Category Browse

Browse charities by cause area. Common categories include: `Animals`, `Education`, `Health`, `Human Services`, `Arts`, `Environment`, `Religion`, `International`.

**Input:**

```json
{
  "mode": "category",
  "category": "Animals",
  "limit": 50
}
```

### Output Fields

| Field | Description |
|-------|-------------|
| `name` | Charity name |
| `ein` | Employer Identification Number |
| `url` | Charity Navigator profile URL |
| `city`, `state` | Location |
| `location` | "City, State" combined |
| `starRating` | Star rating (0-4) |
| `rating` | Numeric score (0-100) |
| `ratingScore` | Formatted score ("91%") |
| `category` | NTEE category (e.g., "Arts, Culture and Humanities") |
| `causeArea` | Primary cause (e.g., "Art museums") |
| `causes` | All cause tags |
| `mission` | Organization mission statement (details mode) |
| `website` | Charity's website (details mode) |
| `totalRevenue` | Most recent total revenue in USD (details mode) |
| `totalExpenses` | Total functional expenses in USD (details mode) |
| `programExpenses` | Program service expenses in USD (details mode) |
| `programExpenseRatio` | % of expenses on programs (details mode) |
| `adminExpenseRatio` | % of expenses on management (details mode) |
| `fundraisingExpenseRatio` | % of expenses on fundraising (details mode) |
| `totalAssets` | Total assets in USD (details mode) |
| `netAssets` | Net assets/fund balance (details mode) |
| `employeeCount` | Number of employees (details mode) |
| `size` | Revenue size tier (SMALL/MEDIUM/LARGE/SUPER) |
| `isProfileComplete` | Whether the charity has a complete Beacon profile |
| `beaconsCompleted` | Number of Beacon sections completed (0-4) |
| `leadershipStaff` | Top staff names, titles, and compensation (details mode) |
| `scrapedAt` | ISO timestamp of scrape |

### Technical Notes

- **Data source**: Charity Navigator embeds all search and profile data as JSON in the page's Next.js RSC (React Server Component) payload — no JavaScript execution required
- **Rate limiting**: 1.5s delay between requests, no aggressive bot protection on the site
- **Pagination**: Search and category modes paginate automatically (10 results per page)
- **Proxies**: Optional — the site has light protection (analytics only), but proxies help for large runs

### Example Output (Search Mode)

```json
{
  "name": "National Center for Construction Education Research",
  "ein": "541779583",
  "url": "https://www.charitynavigator.org/ein/541779583",
  "city": "ALACHUA",
  "state": "FL",
  "location": "ALACHUA, FL",
  "rating": 91,
  "ratingScore": "91%",
  "starRating": 4,
  "causeArea": "Education",
  "causes": ["Education", "Job training", "Job creation and workforce development"],
  "size": "LARGE",
  "subsection": "501(c)(03)",
  "isProfileComplete": true,
  "scrapedAt": "2026-04-22T00:00:00.000Z"
}
```

### Example Output (Details Mode)

```json
{
  "name": "The Museum of Modern Art",
  "ein": "131624100",
  "url": "https://www.charitynavigator.org/ein/131624100",
  "category": "Arts, Culture and Humanities",
  "causeArea": "Art Museums",
  "city": "New York",
  "state": "NY",
  "location": "New York, NY",
  "address": "11 West 53rd Street",
  "starRating": 4,
  "ratingScore": "97%",
  "mission": "Founded in 1929 as an educational institution...",
  "website": "https://www.moma.org",
  "totalRevenue": 236680721,
  "totalExpenses": 280669509,
  "programExpenses": 207327987,
  "programExpenseRatio": "73.87%",
  "adminExpenseRatio": "21.61%",
  "fundraisingExpenseRatio": "4.52%",
  "totalAssets": 2490307043,
  "employeeCount": 1045,
  "scrapedAt": "2026-04-22T00:00:00.000Z"
}
```

# Actor input Schema

## `mode` (type: `string`):

Choose what to scrape: 'search' finds charities by keyword, 'details' fetches full profile for a specific EIN, 'category' browses charities by cause category.

## `searchQuery` (type: `string`):

Keyword to search for charities. Used in 'search' mode. Examples: 'education', 'animal rescue', 'cancer research', 'veterans'.

## `ein` (type: `string`):

The EIN of a specific charity to fetch. Used in 'details' mode. Format: digits only or with dash (e.g., '131624100' or '13-1624100'). Find EINs from search results.

## `category` (type: `string`):

Browse charities by cause area. Used in 'category' mode. Examples: 'Animals', 'Education', 'Health', 'Human Services', 'Arts', 'Environment', 'Religion'.

## `limit` (type: `integer`):

Maximum number of results to return. Each page returns 10 charities. The scraper will paginate to collect up to this many results.

## `proxyConfiguration` (type: `object`):

Proxy settings for avoiding rate limits. Charity Navigator has light bot protection so proxies are optional.

## Actor input object example

```json
{
  "mode": "search",
  "searchQuery": "education",
  "ein": "131624100",
  "category": "Animals",
  "limit": 20,
  "proxyConfiguration": {
    "useApifyProxy": 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 = {};

// Run the Actor and wait for it to finish
const run = await client.actor("lulzasaur/charity-navigator-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 = {}

# Run the Actor and wait for it to finish
run = client.actor("lulzasaur/charity-navigator-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 '{}' |
apify call lulzasaur/charity-navigator-scraper --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Charity & Nonprofit Rating Scraper",
        "description": "Scrape Charity Navigator for nonprofit ratings, financial scores, and accountability metrics. Search by keyword, browse by category, or look up charities by EIN. Returns star ratings, revenue, mission, and more.",
        "version": "1.0",
        "x-build-id": "3zgOfkUMhMLDdeNcf"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/lulzasaur~charity-navigator-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-lulzasaur-charity-navigator-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/lulzasaur~charity-navigator-scraper/runs": {
            "post": {
                "operationId": "runs-sync-lulzasaur-charity-navigator-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/lulzasaur~charity-navigator-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-lulzasaur-charity-navigator-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",
                "required": [
                    "mode"
                ],
                "properties": {
                    "mode": {
                        "title": "Scrape Mode",
                        "enum": [
                            "search",
                            "details",
                            "category"
                        ],
                        "type": "string",
                        "description": "Choose what to scrape: 'search' finds charities by keyword, 'details' fetches full profile for a specific EIN, 'category' browses charities by cause category.",
                        "default": "search"
                    },
                    "searchQuery": {
                        "title": "Search Query",
                        "type": "string",
                        "description": "Keyword to search for charities. Used in 'search' mode. Examples: 'education', 'animal rescue', 'cancer research', 'veterans'.",
                        "default": "education"
                    },
                    "ein": {
                        "title": "EIN (Employer Identification Number)",
                        "type": "string",
                        "description": "The EIN of a specific charity to fetch. Used in 'details' mode. Format: digits only or with dash (e.g., '131624100' or '13-1624100'). Find EINs from search results."
                    },
                    "category": {
                        "title": "Cause Category",
                        "type": "string",
                        "description": "Browse charities by cause area. Used in 'category' mode. Examples: 'Animals', 'Education', 'Health', 'Human Services', 'Arts', 'Environment', 'Religion'.",
                        "default": "Animals"
                    },
                    "limit": {
                        "title": "Max Results",
                        "minimum": 1,
                        "maximum": 1000,
                        "type": "integer",
                        "description": "Maximum number of results to return. Each page returns 10 charities. The scraper will paginate to collect up to this many results.",
                        "default": 20
                    },
                    "proxyConfiguration": {
                        "title": "Proxy Configuration",
                        "type": "object",
                        "description": "Proxy settings for avoiding rate limits. Charity Navigator has light bot protection so proxies are optional.",
                        "default": {
                            "useApifyProxy": 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
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
