# Charity Navigator Scraper (`automation-lab/charity-navigator-profiles-ratings-scraper`) Actor

Search Charity Navigator and export public charity profiles with EINs, missions, ratings, score components, locations, causes, and financial metrics.

- **URL**: https://apify.com/automation-lab/charity-navigator-profiles-ratings-scraper.md
- **Developed by:** [Stas Persiianenko](https://apify.com/automation-lab) (community)
- **Categories:** Business
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $4.32 / 1,000 item processeds

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?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
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.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — 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

Search **Charity Navigator** and export public charity profiles for nonprofit research, donor due diligence, grant review, and repeatable ratings analysis.

The Actor accepts charity names, causes, locations, and direct Charity Navigator profile URLs. It returns identity, EIN, mission, location, cause categories, star rating, overall score, score components, and latest available financial metrics in a structured dataset.

### What does Charity Navigator Scraper do?

Charity Navigator Scraper automates public research on `charitynavigator.org`.

It can:

- search charities by name, cause, or location phrase;
- extract a known charity from its `/ein/` profile URL;
- export the public organization name and EIN;
- collect mission, website, phone, and physical location;
- collect cause and NTEE classifications;
- collect star ratings and normalized 0–100 overall scores;
- collect available evaluation-area score components;
- collect the latest public tax-period financial metrics;
- deduplicate charities discovered by several inputs;
- stop at a user-defined record limit;
- export results as JSON, CSV, Excel, XML, RSS, or another Apify dataset format.

No Charity Navigator account, API key, browser, or user-supplied proxy is required.

### Why use this Actor?

A Charity Navigator profile combines signals that are otherwise time-consuming to copy into a spreadsheet: identity, mission, classifications, location, rating, score components, and tax-return figures.

This Actor turns those public profiles into consistent records while keeping each source URL for verification. The same input can support a one-time shortlist, a scheduled snapshot, or a downstream nonprofit-data pipeline.

The direct HTTP implementation reads server-rendered source data. It avoids browser overhead and does not depend on a private Charity Navigator API credential.

### Who is it for?

#### Donors and donor-advised funds

Compare charity missions, ratings, scores, and financial scale before deciding which organizations need deeper review.

#### Foundations and grant makers

Create a structured first-pass diligence dataset for prospective grantees. Preserve EINs and source URLs for entity matching and manual verification.

#### Nonprofit researchers

Search a cause or location, then analyze rating availability, classification, organization size, and financial metrics across profiles.

#### Journalists and analysts

Build reproducible source lists and retain collection timestamps for public-interest research.

#### CRM and data teams

Enrich known charity records from direct profile URLs or search terms and send the dataset to a spreadsheet, warehouse, or automation platform.

#### Developers

Call one Actor API instead of maintaining search-page discovery, React payload decoding, profile parsing, retries, deduplication, and schema normalization.

### What data can I extract?

| Field | Meaning |
| --- | --- |
| `name` | Public charity name |
| `ein` | Nine-digit Employer Identification Number |
| `profileUrl` | Direct Charity Navigator source profile |
| `mission` | Published mission statement |
| `website` | Public charity website when available |
| `phone` | Public phone number when available |
| `city`, `state`, `postalCode`, `country` | Physical location fields |
| `address` | Normalized full physical address |
| `categories` | Charity Navigator cause categories |
| `nteeCode`, `nteeType` | Published NTEE classification |
| `organizationType` | IRS subsection description |
| `organizationSize` | Charity Navigator size band |
| `ratingStars` | Current star rating when eligible |
| `ratingScore` | Current overall score normalized to 0–100 |
| `ratingEligible` | Whether the profile is rating-eligible |
| `profileComplete` | Whether the source marks the profile complete |
| `scoreComponents` | Available evaluation-area scores and reference weights |
| `financialMetrics` | Latest revenue, expenses, assets, liabilities, net assets, and expense components |
| `sourceUpdatedAt` | Source update timestamp when published |
| `scrapedAt` | Actor collection timestamp |

Missing source values are returned as `null` or an empty array. The Actor does not invent ratings or fill gaps from another provider.

### How to search Charity Navigator

1. Open the Actor input page.
2. Add one or more terms under **Search queries**.
3. Use a charity name, cause, city, state, or a combination such as `food bank Texas`.
4. Set **Maximum charities** to the dataset size you need.
5. Click **Start**.
6. Open the default dataset.
7. Export or integrate the rows in your preferred format.

Start with a small limit to inspect how broad a query is before scheduling a larger run.

### Input parameters

#### `queries`

An array of up to 20 search terms.

```json
{
  "queries": ["food bank Texas"],
  "maxItems": 5
}
```

Queries use Charity Navigator's public search behavior. The number of matching public profiles depends on the source.

#### `startUrls`

An array of direct Charity Navigator profile URLs.

```json
{
  "startUrls": [
    { "url": "https://www.charitynavigator.org/ein/530196605" }
  ],
  "maxItems": 1
}
```

Accepted URLs must use `charitynavigator.org/ein/` followed by a nine-digit EIN. Unrelated domains and non-profile paths fail validation.

#### `maxItems`

The maximum number of unique profiles saved across all queries and URLs.

- minimum: `1`
- default: `25`
- maximum: `1000`

The Actor deduplicates profiles by their canonical EIN URL.

### Output example

A current profile record has this shape:

```json
{
  "name": "American Red Cross",
  "ein": "530196605",
  "profileUrl": "https://www.charitynavigator.org/ein/530196605",
  "mission": "Since its founding in 1881 ...",
  "website": "https://www.redcross.org/",
  "phone": "202-303-4498",
  "city": "Washington",
  "state": "DC",
  "postalCode": "20006",
  "country": "USA",
  "address": "431 Eighteenth Street, NW, Washington DC 20006, USA",
  "categories": [
    "Safety education",
    "Disasters and emergency management",
    "Blood banks",
    "International development"
  ],
  "nteeCode": "P21",
  "nteeType": "Human Services - Multipurpose and Other",
  "organizationType": "Charitable Organization",
  "organizationSize": "SUPER",
  "ratingStars": 4,
  "ratingScore": 91,
  "ratingEligible": true,
  "profileComplete": true,
  "scoreComponents": [
    {
      "name": "financialHealth",
      "score": 100,
      "referenceWeight": 7.36
    }
  ],
  "financialMetrics": {
    "taxPeriodEnd": "2025-06-30T04:00:00.000Z",
    "revenue": 3916983933,
    "expenses": 3285857544,
    "assets": 5052941623,
    "liabilities": 936710734,
    "netAssets": 4116230889,
    "programExpenses": 2985109298,
    "fundraisingExpenses": 195050607,
    "administrativeExpenses": 105697639,
    "contributions": 1312795481
  },
  "sourceUpdatedAt": "2026-08-25T03:41:35.953Z",
  "scrapedAt": "2026-08-28T14:30:00.000Z"
}
```

Values change when Charity Navigator updates a profile. Always use `profileUrl` to verify a finding that affects a donation, grant, or compliance decision.

### Charity ratings due diligence workflow

Use direct URLs when you already have an EIN shortlist.

1. Convert each known EIN into `https://www.charitynavigator.org/ein/{EIN}`.
2. Save the URLs in an Apify Task.
3. Run the Task before a review cycle or on a schedule.
4. Export `ratingScore`, `scoreComponents`, and `financialMetrics` to your analysis tool.
5. Compare the new snapshot with your previous stored dataset.
6. Send material differences to a human reviewer.

The Actor exports current snapshots. It does not itself calculate changes, make recommendations, or send alerts.

### CharityNavigator.org alphabetical listing research

A broad alphabetical or cause-based research job can be split into bounded queries. Use distinct names, causes, or location phrases and set an overall `maxItems` limit.

Search results are deduplicated before profiles are fetched. A profile found through more than one query is charged and saved only once.

This Actor is designed for useful bounded research, not an undocumented promise to reproduce every charity in the entire source database in one run.

### How much does it cost to extract Charity Navigator profiles?

The Actor uses pay-per-event pricing:

- one `start` event per run at **$0.005**;
- one `item` event for each saved charity profile;
- mission, score components, and financial metrics inside a profile have no separate charge.

At the BRONZE tier, each saved profile is **$0.0072**.

Example event counts:

| Saved profiles | Charged events |
| ---: | --- |
| 1 | 1 start + 1 item |
| 5 | 1 start + 5 items |
| 25 | 1 start + 25 items |
| 100 | 1 start + 100 items |

Multiply the active per-item tier price by the saved profile count and add the one-time start event. Higher-volume subscription tiers receive lower per-item prices. Charges apply only to successfully normalized profiles saved to the default dataset.

### API usage with cURL

Start a synchronous run and return dataset items:

```bash
curl -X POST \
  "https://api.apify.com/v2/acts/automation-lab~charity-navigator-profiles-ratings-scraper/run-sync-get-dataset-items?token=$APIFY_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "queries": ["food bank Texas"],
    "maxItems": 5
  }'
```

Keep the token in an environment variable or secret manager.

### API usage with JavaScript

```javascript
import { ApifyClient } from 'apify-client';

const client = new ApifyClient({ token: process.env.APIFY_TOKEN });
const run = await client.actor('automation-lab/charity-navigator-profiles-ratings-scraper').call({
  startUrls: [
    { url: 'https://www.charitynavigator.org/ein/530196605' },
  ],
  maxItems: 1,
});

const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items);
```

### API usage with Python

```python
import os
from apify_client import ApifyClient

client = ApifyClient(os.environ['APIFY_TOKEN'])
run = client.actor('automation-lab/charity-navigator-profiles-ratings-scraper').call(run_input={
    'queries': ['veterans services'],
    'maxItems': 10,
})

items = client.dataset(run['defaultDatasetId']).list_items().items
print(items)
```

### Use with Apify MCP

Add the Actor to Claude Code:

```bash
claude mcp add --transport http apify \
  "https://mcp.apify.com?tools=automation-lab/charity-navigator-profiles-ratings-scraper"
```

Then ask:

> Search Charity Navigator for food banks in Texas and summarize each charity's rating, mission, and latest revenue.

Or use direct profiles:

> Extract these Charity Navigator EIN profile URLs and create a table of star rating, overall score, financial health score, revenue, expenses, and assets.

#### Claude Desktop setup

Use the following MCP server configuration in Claude Desktop.

#### Cursor setup

Add the same MCP server URL in Cursor's MCP settings.

#### VS Code setup

Add the same MCP server URL through your VS Code MCP extension or workspace MCP settings.

```json
{
  "mcpServers": {
    "apify": {
      "url": "https://mcp.apify.com?tools=automation-lab/charity-navigator-profiles-ratings-scraper"
    }
  }
}
```

Store your Apify authentication using your MCP client's secure environment or secret mechanism.

Example prompts for MCP:

- `Use the Charity Navigator Scraper MCP tool to search for food banks in Texas and return five rated profiles.`
- `Use MCP to extract the Charity Navigator profile for EIN 530196605 and summarize rating score components and financial metrics.`

### Integrations

#### Google Sheets

Schedule a Task, then use Make, Zapier, or an Apify integration to append the current charity snapshot to a sheet.

#### Data warehouses

Fetch default dataset items after each run and upsert records by `ein`. Keep `scrapedAt` to distinguish snapshots.

#### CRM enrichment

Match organizations by EIN. Use names only as supporting context because names can change or collide.

#### Webhooks

Attach a webhook to successful Actor runs, then send the dataset ID to your processing service.

#### Scheduled research

Save stable direct profile URLs as a Task and schedule it. Compare datasets downstream; the Actor does not retain or diff prior snapshots.

### Tips for reliable results

- Prefer direct profile URLs for a known EIN shortlist.
- Use specific search phrases instead of very broad single words.
- Start with a low `maxItems` value to inspect query relevance.
- Keep the source URL in any downstream report.
- Treat `null` as unavailable upstream data, not a zero.
- Compare financial values only when the tax periods are compatible.
- Do not treat a star rating as a substitute for independent diligence.

### Limits and failure behavior

- Only public Charity Navigator `/ein/` profiles are supported.
- Search breadth and ranking are controlled by Charity Navigator.
- Some organizations are not eligible for a rating.
- Some profiles have no mission, component scores, or recent tax-return metrics.
- A source page can change after extraction.
- The Actor retries temporary network failures and HTTP 429 or 5xx responses up to a bounded limit.
- Unsupported URLs and malformed input fail the run rather than being silently ignored.
- If a search naturally has no results, the run succeeds with an empty dataset.
- If discovered profiles all fail extraction, the run fails instead of returning a misleading empty success.

### Responsible use and legality

This Actor extracts publicly displayed charity information. It is not affiliated with, endorsed by, or operated by Charity Navigator.

Use the data in accordance with applicable laws, Charity Navigator's terms, and your organization's policies. Avoid excessive collection, do not use the output for harassment or automated high-impact decisions, and independently verify consequential findings.

Charity ratings and financial figures are research inputs, not legal, tax, investment, or donation advice.

### Troubleshooting

#### Why did my search return fewer profiles than `maxItems`?

`maxItems` is a ceiling, not a guarantee. Charity Navigator may expose fewer matching public profiles for a specific query.

#### Why is `ratingScore` null?

The organization may be unrated or ineligible. Check `ratingEligible` and the source profile.

#### Why is `financialMetrics` null?

The profile may not expose a usable latest tax return. The Actor does not substitute figures from another provider.

#### Why was my URL rejected?

Use a direct URL in the form `https://www.charitynavigator.org/ein/530196605`. Search pages, unrelated domains, and malformed EIN paths are not accepted in `startUrls`.

#### Can I monitor changes?

Yes, by scheduling a Task and comparing saved datasets in your own workflow. The Actor produces snapshots; it does not send alerts or calculate a change history.

### FAQ

#### Does it require a Charity Navigator login?

No. It reads public server-rendered search and profile data.

#### Can I search by EIN?

Use the direct `/ein/{EIN}` profile URL for deterministic EIN lookup.

#### Are all charities rated?

No. Unrated and ineligible profiles can still contain identity, mission, category, location, or financial data.

#### Does it download IRS PDFs?

No. It exports the latest financial metrics exposed in the public Charity Navigator profile and does not download filing documents.

#### Can I export to Excel or CSV?

Yes. Open the default dataset and choose an available Apify export format.

#### Does it scrape private donor information?

No. The output is limited to public charity profile data.

### Related automation-lab Actors

- [ProPublica Nonprofit Explorer Scraper](https://apify.com/automation-lab/propublica-nonprofit-explorer-scraper) — use for IRS filing history and ProPublica nonprofit records.
- [UK Charity Commission Register Scraper](https://apify.com/automation-lab/uk-charity-commission-register-scraper) — use for registered charities in England and Wales.

Use the source-specific Actor that matches the jurisdiction and evidence needed for your workflow.

### Support

For reproducible help, include:

- the Actor run URL;
- a redacted input example;
- the expected charity or EIN;
- the observed dataset behavior.

Do not post API tokens, cookies, or private credentials.

# Actor input Schema

## `queries` (type: `array`):

Charity names, causes, locations, or other terms to search on Charity Navigator. Up to 20 queries.

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

Optional direct Charity Navigator URLs in the form https://www.charitynavigator.org/ein/123456789.

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

Maximum number of unique charity profiles to export across all queries and URLs.

## Actor input object example

```json
{
  "queries": [
    "American Red Cross"
  ],
  "startUrls": [
    {
      "url": "https://www.charitynavigator.org/ein/530196605"
    }
  ],
  "maxItems": 10
}
```

# Actor output Schema

## `overview` (type: `string`):

Open the default dataset view containing the extracted Charity Navigator profiles.

# 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 = {
    "queries": [
        "American Red Cross"
    ],
    "startUrls": [
        {
            "url": "https://www.charitynavigator.org/ein/530196605"
        }
    ],
    "maxItems": 10
};

// Run the Actor and wait for it to finish
const run = await client.actor("automation-lab/charity-navigator-profiles-ratings-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 = {
    "queries": ["American Red Cross"],
    "startUrls": [{ "url": "https://www.charitynavigator.org/ein/530196605" }],
    "maxItems": 10,
}

# Run the Actor and wait for it to finish
run = client.actor("automation-lab/charity-navigator-profiles-ratings-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 '{
  "queries": [
    "American Red Cross"
  ],
  "startUrls": [
    {
      "url": "https://www.charitynavigator.org/ein/530196605"
    }
  ],
  "maxItems": 10
}' |
apify call automation-lab/charity-navigator-profiles-ratings-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,automation-lab/charity-navigator-profiles-ratings-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/G25aeC9P6ytabc74f/builds/Oidn4Pf4TOmbI6hpy/openapi.json
