# Charity Navigator Scraper \[$3.50/1K💰] | Nonprofit Ratings (`ahmed_jasarevic/charitynavigator-scraper`) Actor

Scrape Charity Navigator nonprofit profiles: star ratings, 990 financials, expense ratios and CEO pay. Search by keyword or EIN, export to JSON, CSV or Excel.

- **URL**: https://apify.com/ahmed_jasarevic/charitynavigator-scraper.md
- **Developed by:** [Ahmed Jasarevic](https://apify.com/ahmed_jasarevic) (community)
- **Features:** Limited permissions
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $3.40 / 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.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

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

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
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.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

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

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

## Charity Navigator Scraper – Nonprofit Ratings, 990 Financials & CEO Pay

Extract **Charity Navigator profiles** as structured data: star rating, overall score, financial and accountability pillar scores, program/admin/fundraising expense ratios, total revenue, assets and liabilities, CEO and executive compensation, IRS subsection and foundation code, mission, website and contact details. **$3.50 per 1,000 organizations.**

### What Can You Do With Charity Navigator Data?

- **Nonprofit due diligence** – check a charity's star rating and Form 990 financials before donating or partnering
- **Grant screening** – filter by cause, state and financial ratios to build a shortlist
- **Nonprofit market research** – size the sector cause by cause, state by state
- **Watchdog and journalism work** – track CEO pay, program-expense ratios and accountability signals
- **Fundraising benchmarking** – compare expense structure and donor-support ratios against peers
- **Database building** – EIN-keyed profiles for a CRM, a giving platform or an internal dashboard

### How It Works

![How the Charity Navigator Scraper works: from a search or EIN to structured nonprofit financial profiles.](https://api.apify.com/v2/key-value-stores/oeuA0kLOyhbRM4fzt/records/how-it-works-charitynavigator-scraper.webp)

The Actor collects publicly available Charity Navigator profiles and normalizes them into one schema. Provide search terms, EINs or profile URLs; it reads the published search and profile pages, then writes one row per organization.

- Profiles include star ratings, pillar scores and rating history.
- Form 990 fields cover revenue, expenses, assets, liabilities and executive compensation.
- Ratios are calculated from the published 990 amounts when needed.

### Scrape Nonprofit Ratings And 990 Financials

Charity Navigator does not publish a public read API for research. This Actor collects the public search and profile data shown on the site.

It keeps EIN as the join key — `ein` and `einFormatted` — so profiles can be matched to IRS 990 filings, grant databases or your own records. Every financial field is the number the organization filed, not an estimate.

### Star Ratings, Pillar Scores And Rating History

`starRating` is Charity Navigator's 0–4 scale. `overallScore` is the 0–100 score behind it, and the pillar fields — `financialScore`, `accountabilityScore`, `leadershipScore`, `governanceScore`, `impactScore`, `measurementScore`, `programPlanningScore`, `compensationPracticesScore` — are the component scores, scaled to 0–100.

`ratingHistory` returns prior years with stars, score and publication date, which is how you tell a stable four-star organization from one that just recovered from a bad year.

### Form 990 Financials And Executive Compensation

Financial fields come from the latest filed return: `totalRevenue`, `totalContributions`, `totalExpenses`, `programExpenses`, `administrativeExpenses`, `fundraisingExpenses`, `totalAssets`, `totalLiabilities`, `netAssets` and `employeeCount`, plus `fiscalYear`, `fiscalPeriodEnd` and `fiscalYearsCovered`.

`programExpenseRatio`, `administrativeExpenseRatio` and `fundraisingExpenseRatio` are percentages of total expenses, computed by the actor when the source does not supply them. `ceoName`, `ceoTitle` and `ceoCompensation` identify the top executive, and `executives[]` lists every disclosed officer with reportable, other and total compensation — useful for pay-ratio analysis.

### Input – Configure A Nonprofit Lookup

| Field | Type | Required | Default | Notes |
|---|---|---|---|---|
| `searchQueries` | array | No | — | Search terms, e.g. `red cross`, `food bank`; paged until `maxItems` |
| `eins` | array | No | — | 9-digit EINs; read directly without search |
| `startUrls` | array | No | — | Profile URLs, e.g. `https://www.charitynavigator.org/ein/530196605` |
| `maxItems` | integer | No | `50` | Max organizations. Free users are capped at 10 |
| `proxy` | object | No | — | Standard Apify proxy configuration |

### Output – Nonprofit Profile Fields

| Field | Type | Description |
|---|---|---|
| `organizationName`, `ein`, `einFormatted` | string | Identity and join key |
| `city`, `state`, `zip`, `country`, `address`, `allAddresses` | string / array | Physical and mailing addresses |
| `starRating` | number | 0–4 Charity Navigator rating |
| `overallScore`, `scoreDisplay`, `ratingPublishedAt` | number / string | Score and publication date |
| `financialScore`, `accountabilityScore`, `leadershipScore`, `governanceScore`, `impactScore` | number | Pillar scores, 0–100 |
| `ratingHistory` | array | Prior years: stars, score, published date |
| `fiscalYear`, `fiscalPeriodEnd`, `fiscalYearsCovered` | number / string | Latest 990 period |
| `totalRevenue`, `totalContributions`, `totalExpenses`, `totalAssets`, `totalLiabilities`, `netAssets` | number | Form 990 amounts (USD) |
| `programExpenses`, `administrativeExpenses`, `fundraisingExpenses` | number | Expense breakdown |
| `programExpenseRatio`, `administrativeExpenseRatio`, `fundraisingExpenseRatio` | number | Percent of total expenses |
| `donorSupportRatio`, `liabilitiesToAssetsRatio`, `workingCapital`, `fundraisingEfficiency` | number | Charity Navigator metrics |
| `employeeCount` | number | From the 990 |
| `ceoName`, `ceoTitle`, `ceoCompensation` | string / number | Top executive and total pay |
| `executives` | array | Name, title, reportable/other/total compensation |
| `irsSubsection`, `irsSubsectionDescription`, `is501c3`, `foundationCode`, `deductibilityDescription`, `rulingYear` | string / number | IRS tax status |
| `taxFormOnWebsite`, `websiteDisclosures`, `auditOversight`, `privacyPolicy` | string / boolean | Accountability signals |
| `donationEligible`, `donationStatus`, `hasDonationPage` | boolean / string | Giving-basket status |
| `charityNavigatorProfileUrl`, `website`, `phone`, `mission` | string | Contact and profile link |
| `updatedAt`, `scrapedAt` | string | ISO timestamps |

### Example Input – Food Banks In Illinois

```json
{
  "searchQueries": ["food bank"],
  "maxItems": 30,
  "proxy": { "useApifyProxy": true }
}
```

### Example Output – One Nonprofit Profile

```json
{
  "organizationName": "Example Food Bank",
  "ein": "362170810",
  "einFormatted": "36-2170810",
  "city": "Chicago",
  "state": "IL",
  "starRating": 4,
  "overallScore": 96,
  "financialScore": 97,
  "accountabilityScore": 93,
  "programExpenseRatio": 95.4,
  "totalRevenue": 128450000,
  "totalAssets": 96400000,
  "fiscalYear": 2025,
  "ceoCompensation": 412000,
  "irsSubsection": "501(c)(3)",
  "website": "https://www.examplefoodbank.org"
}
```

### Export Charity Navigator Data To JSON, CSV Or Excel And Schedule Runs

Results go to the default dataset and download as JSON, CSV, Excel or XML, or through the Apify API. A search of 50 organizations takes a couple of minutes.

Nonprofit filings change once a year, so a **monthly schedule** on your watchlist EINs is enough; use a weekly run only when you are tracking rating changes across a large portfolio. At $3.50 per 1,000 organizations, a 500-organization screen costs about $1.75.

### Related Actors

- [Website Content Crawler](https://apify.com/apify/website-content-crawler) – pull annual reports, impact pages and program descriptions into clean text
- [Google Search Scraper](https://apify.com/apify/google-search-scraper) – find news coverage, audits and controversies around an organization
- [Google Maps Scraper](https://apify.com/apify/google-maps-scraper) – map service locations and regional offices
- [MedReps Scraper](https://apify.com/ahmed_jasarevic/medreps-scraper) – another US-sector dataset, useful for health nonprofits and hospital foundations

### FAQ

#### Why use this actor instead of the Charity Navigator website?

Because the website shows one profile at a time, and its search cannot be sorted or exported. This actor returns every organization in a query as rows with ratios already computed, so a 200-organization screen becomes a spreadsheet instead of an afternoon of clicking.

#### Does Charity Navigator have an API?

Not a public one for research. Charity Navigator does not document a read API. This Actor collects the public search and profile data shown on the site.

#### How current are the financials?

As current as the organization's latest filed Form 990, which is what Charity Navigator displays. `fiscalYear` and `fiscalPeriodEnd` tell you exactly which period the numbers cover, and `fiscalYearsCovered` lists up to three years. The actor never interpolates a missing year.

#### Why is `ceoCompensation` sometimes null?

Because the organization either filed no reportable compensation for its top executive or the profile does not disclose one. The full `executives[]` array is still returned, so you can inspect every officer. Null means "not disclosed", not zero.

#### Why are some ratios calculated rather than read?

Charity Navigator precomputes some metrics (donor-support ratio, liabilities-to-assets, working capital, fundraising efficiency) and exposes them directly. Program, administrative and fundraising percentages are computed by the actor from the 990 amounts when the source does not provide them — the formula is expenses divided by total expenses.

#### Can I look up organizations by EIN?

Yes. Pass `eins` and the actor reads each profile directly, skipping search entirely. That is the fastest and cheapest mode for a known list.

#### Are free users limited?

Yes, `maxItems` is capped at 10 for free users. Paid plans can raise it.

### For AI Agents & LLM Apps

Returns one row per nonprofit organization with Charity Navigator rating, 990 financials, executive compensation and IRS status.

Minimal working input:

```json
{ "eins": ["362170810"], "maxItems": 1 }
```

Variant — keyword screen with a hard cap:

```json
{ "searchQueries": ["animal rescue"], "maxItems": 25 }
```

Output fields: `organizationName, ein, einFormatted, city, state, zip, address, starRating, overallScore, financialScore, accountabilityScore, leadershipScore, governanceScore, programExpenseRatio, administrativeExpenseRatio, fundraisingExpenseRatio, totalRevenue, totalExpenses, totalAssets, totalLiabilities, netAssets, fiscalYear, fiscalPeriodEnd, ceoName, ceoCompensation, executives, irsSubsection, is501c3, foundationCode, rulingYear, donationEligible, website, phone, mission, charityNavigatorProfileUrl, updatedAt, scrapedAt`.

Behaviors an agent should know:

- All inputs are optional, but at least one of `searchQueries`, `eins` or `startUrls` must be supplied or the run has nothing to read.
- `eins` is the cheapest mode: one profile read per EIN, no search paging.
- `maxItems` defaults to **50**; free users are capped at **10**.
- `starRating` is 0–4; pillar scores (`financialScore`, `accountabilityScore`, …) are 0–100 and are scaled, so do not compare them to `overallScore` without checking units.
- Financial fields are the latest filed Form 990, not the current calendar year; always read `fiscalYear` first.
- `ceoCompensation` and `executives[].totalCompensation` are `null` when undisclosed — never treat null as zero.
- `programExpenseRatio` is a percentage of total expenses; it is computed by the actor when the source omits it.

Billing: **$0.0035 per saved organization** ($3.50 per 1,000), plus a small actor-start event.

### Legal & Compliance Disclaimer

This actor is an independent tool. It is not affiliated with, endorsed by, or sponsored by Charity Navigator or the organizations it rates.

It collects publicly accessible search and profile pages — no login, no private credential, no paywall bypass, no CAPTCHA solving. Financial figures originate from IRS Form 990 filings, which are public records; Charity Navigator's ratings, scores and descriptive text remain its intellectual property.

Profiles include **personal data about named individuals** — executive names, titles and compensation. That information is disclosed in public tax filings, but in the EU/UK the GDPR and in California the CCPA still govern how it may be stored, profiled or republished. Users are responsible for complying with Charity Navigator's Terms of Service, with IRS rules on the use of 990 data, and with applicable data-protection law. Do not use this data to harass individuals or to make automated decisions that affect them. This section is a factual disclosure, not legal advice.

### SEO Keywords

charity navigator scraper, charity navigator api, nonprofit data, nonprofit ratings, charity ratings, form 990 data, nonprofit financials, nonprofit database, charity due diligence, nonprofit ceo compensation, 501c3 data, nonprofit expense ratios, charity watchdog data, grant screening data, ein lookup, nonprofit research, charity navigator alternative, irs nonprofit data

# Actor input Schema

## `searchQueries` (type: `array`):

Search terms used on charitynavigator.org (e.g. "red cross", "food bank", "animal rescue"). Each query is paged automatically until "Max items" is reached.

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

Explicit 9-digit Employer Identification Numbers to look up directly.

## `startUrls` (type: `array`):

Optional Charity Navigator profile URLs, e.g. https://www.charitynavigator.org/ein/530196605

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

Maximum number of organizations to return. Result pages are read automatically until this number is reached. Free users are capped at 10.

## `proxy` (type: `object`):

Select proxies to be used by your crawler.

## Actor input object example

```json
{
  "searchQueries": [
    "food bank"
  ],
  "maxItems": 50,
  "proxy": {
    "useApifyProxy": false
  }
}
```

# Actor output Schema

## `results` (type: `string`):

No description

# 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 = {
    "searchQueries": [
        "food bank"
    ],
    "proxy": {
        "useApifyProxy": false
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("ahmed_jasarevic/charitynavigator-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 = {
    "searchQueries": ["food bank"],
    "proxy": { "useApifyProxy": False },
}

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

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

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

```

## CLI example

```bash
echo '{
  "searchQueries": [
    "food bank"
  ],
  "proxy": {
    "useApifyProxy": false
  }
}' |
apify call ahmed_jasarevic/charitynavigator-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,ahmed_jasarevic/charitynavigator-scraper"
        }
    }
}
```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/yocsHud5moLIwIAKb/builds/mLPSCWPIReAKco5xK/openapi.json
