Charity Navigator API
Powered by Charity Navigator
Enrich nonprofit profiles with independent ratings, mission statements, and organizational metrics from Charity Navigator's comprehensive database.
Overview
Charity Navigator is America's largest and most-utilized independent nonprofit evaluator. Their API provides access to:
- Star Ratings: Independent 0-4 star ratings (Encompass Rating System)
- Mission Statements: Organization purpose and activities
- Website URLs: Official organization websites
- Organizational Metrics: Financial health, accountability, transparency
- Active Advisories: Important alerts about organization status
Data Available
Data Fields
The Charity Navigator GraphQL API provides the following fields for all registered nonprofits:
| Field | Description | Coverage |
|---|---|---|
| EIN | Employer Identification Number | 100% |
| Charity Name | Official organization name | 100% |
| Mission | Organization mission statement | Rated orgs only* |
| Website URL | Official website address | ~80% |
| Charity Navigator URL | Link to CN profile page | Rated orgs only* |
| Category | Nonprofit category | Rated orgs only* |
| Cause | Primary cause area | Rated orgs only* |
| Address | Street, City, State, Zip, Country | 100% |
| Active Advisories | Status alerts | All orgs |
| Encompass Star Rating | 0-4 star rating | Rated orgs only* |
| Encompass Score | Numerical rating score | Rated orgs only* |
| Rating Publication Date | When rating was published | Rated orgs only* |
*Fields marked with asterisk are only available for organizations that have been rated by Charity Navigator.
Usage Limits & Compliance
Rate Limits
- Maximum: 1,000 API calls per day
- No bulk downloads: Use incremental enrichment
- Caching allowed: For performance only (not redistribution)
Attribution Requirements
MANDATORY on all pages displaying Charity Navigator data:
-
Text Credit: "Powered by Charity Navigator"
-
Source Citation: "Data provided by Charity Navigator"
-
Linkback: All charity names link to their Charity Navigator profile:
<a href="https://www.charitynavigator.org/ein/[EIN]">[Organization Name]</a> -
Trademark Notice (once per page or in credits):
CHARITY NAVIGATOR and the CHARITY NAVIGATOR logo are registered trademarksof Charity Navigator. All rights reserved. Used with permission.
Link Requirements
- Use descriptive anchor text (not "click here")
- Do NOT use
rel="nofollow"on Charity Navigator links - Allow search engines to crawl all links to charitynavigator.org
✅ Correct:
<a href="https://www.charitynavigator.org/ein/134141945">
Michael J. Fox Foundation for Parkinson's Research
</a>
❌ Incorrect:
<a href="https://www.CharityNavigator.org/ein/134141945" rel="nofollow">
Click here
</a>
Star Rating Display
When displaying Charity Navigator star ratings, use official images:
Star Images (PNG format, 239×54px)
| Rating | Image URL |
|---|---|
| 4-Star | https://www.charitynavigator.org/content/dam/cn/cn/icons/four_star.png |
| 3-Star | https://www.charitynavigator.org/content/dam/cn/cn/icons/three_star.png |
| 2-Star | https://www.charitynavigator.org/content/dam/cn/cn/icons/two_star.png |
| 1-Star | https://www.charitynavigator.org/content/dam/cn/cn/icons/one_star.png |
| 0-Star | https://www.charitynavigator.org/content/dam/cn/cn/icons/zero_star.png |
SVG Format (Vectors)
Replace .png with .svg in the URLs above for scalable vector graphics.
Display Guidelines
- Star images MUST link to the charity's Charity Navigator profile page
- Do NOT stretch or skew images (maintain aspect ratio)
- Prefer full-color versions; ensure knockout (white) versions pass accessibility tests
Example HTML:
<a href="https://www.charitynavigator.org/ein/134141945">
<img src="https://www.charitynavigator.org/content/dam/cn/cn/icons/four_star.png"
alt="Four-star rating by Charity Navigator" />
</a>
Integration Example
Python with Requests
import requests
# GraphQL API endpoint
url = "https://api.charitynavigator.org/graphql"
# Example query
query = """
query {
charity(ein: "134141945") {
ein
charityName
mission
websiteUrl
charityNavigatorUrl
category
cause
mailingAddress {
streetAddress1
city
state
postalCode
}
currentRating {
rating
ratingDate
}
}
}
"""
headers = {
"Authorization": "Bearer YOUR_API_KEY",
"Content-Type": "application/json"
}
response = requests.post(url, json={"query": query}, headers=headers)
data = response.json()
print(f"Charity: {data['data']['charity']['charityName']}")
print(f"Rating: {data['data']['charity']['currentRating']['rating']} stars")
print(f"Mission: {data['data']['charity']['mission']}")
Enrichment Workflow
- Extract EINs from your nonprofit dataset
- Batch requests (max 1,000/day)
- Cache responses locally to avoid re-fetching
- Merge data into your gold tables
- Track update date to know when to refresh
Data Comparison
Charity Navigator vs Other Sources
| Data Field | Charity Navigator | IRS EO-BMF | Form 990 XML | BigQuery |
|---|---|---|---|---|
| Star Rating | ✅ (0-4 stars) | ❌ | ❌ | ❌ |
| Mission | ✅ (Rated orgs) | ❌ | ✅ (30-40%) | ✅ (30-40%) |
| Website | ✅ (~80%) | ❌ | ❌ | ✅ (30-40%) |
| Financials | ✅ (Summary) | ❌ | ✅ (Detailed) | ✅ (Detailed) |
| Coverage | ~200K rated | 1.9M orgs | ~300K/year | 5M+ records |
| Update Freq | Annual | Monthly | Annual | Annual |
| Independent Rating | ✅ UNIQUE | ❌ | ❌ | ❌ |
Key Advantages:
- ✅ Only source with independent star ratings
- ✅ High-quality mission statements (manually reviewed)
- ✅ Better website URL coverage than Form 990
- ✅ Active advisories (warnings, alerts)
- ✅ Nonprofit evaluation methodology is transparent
Limitations:
- Only ~200K organizations have ratings (largest orgs prioritized)
- Smaller nonprofits may not have Charity Navigator profiles
- 1,000 API calls/day limit (use caching strategically)
Best Practices
Rate Limit Management
import time
from datetime import datetime, timedelta
class CharityNavigatorClient:
def __init__(self, api_key, daily_limit=1000):
self.api_key = api_key
self.daily_limit = daily_limit
self.call_count = 0
self.reset_time = datetime.now() + timedelta(days=1)
def query(self, ein):
# Check if we've hit the daily limit
if self.call_count >= self.daily_limit:
wait_seconds = (self.reset_time - datetime.now()).total_seconds()
if wait_seconds > 0:
print(f"Rate limit reached. Waiting {wait_seconds:.0f}s...")
time.sleep(wait_seconds)
self.call_count = 0
self.reset_time = datetime.now() + timedelta(days=1)
# Make API call
response = self._make_request(ein)
self.call_count += 1
return response
Caching Strategy
Cache responses to avoid redundant API calls:
import json
from pathlib import Path
cache_dir = Path("data/cache/charity_navigator/")
cache_dir.mkdir(parents=True, exist_ok=True)
def get_charity_data(ein, api_client):
cache_file = cache_dir / f"{ein}.json"
# Check cache first
if cache_file.exists():
with open(cache_file) as f:
return json.load(f)
# Fetch from API
data = api_client.query(ein)
# Save to cache
with open(cache_file, 'w') as f:
json.dump(data, f, indent=2)
return data
Incremental Updates
Only fetch new/updated ratings:
import pandas as pd
from datetime import datetime, timedelta
def needs_update(last_updated, max_age_days=90):
"""Check if rating needs refresh (default: every 90 days)"""
if pd.isna(last_updated):
return True
age = datetime.now() - pd.to_datetime(last_updated)
return age > timedelta(days=max_age_days)
# Filter nonprofits needing updates
nonprofits = pd.read_parquet("data/gold/nonprofits.parquet")
needs_refresh = nonprofits[
nonprofits['cn_updated_date'].apply(needs_update)
]
print(f"Need to refresh: {len(needs_refresh):,} organizations")
Schema
Fields to Add to Gold Tables
When enriching your nonprofit dataset, add these fields:
enriched_fields = {
'cn_star_rating': 'int64', # 0-4 stars
'cn_encompass_score': 'float64', # Numerical score
'cn_rating_date': 'datetime64', # When rated
'cn_mission': 'string', # Mission statement
'cn_website': 'string', # Website URL
'cn_category': 'string', # Category
'cn_cause': 'string', # Cause area
'cn_profile_url': 'string', # Link to CN profile
'cn_advisory_status': 'string', # Active advisories
'cn_updated_date': 'datetime64', # When we fetched data
}
Cost
FREE with the following limits:
- 1,000 API calls per day
- Beta offering (no fees)
- Nonprofit use case
For commercial use or higher volume, contact Charity Navigator: api@charitynavigator.org
Legal & Compliance
API Terms of Use
By using the Charity Navigator API, you agree to:
- Rate Limits: Max 1,000 calls/day
- Attribution: Display "Powered by Charity Navigator" on all pages
- Linkbacks: Link all charity names to their CN profiles
- Trademark: Include trademark notice
- No Redistribution: Cannot resell or redistribute CN data
- No Derivative Ratings: Cannot create competing rating systems
- Caching: Only for performance, not redistribution
- Termination: CN can terminate access for violations
Intellectual Property
- All Charity Navigator data and ratings are proprietary
- API and database owned by Charity Navigator, Inc.
- Users have no ownership rights to cached data
- Feedback/suggestions become CN property
Full Terms
Complete API Terms of Use: https://www.charitynavigator.org/partner/api-terms
Troubleshooting
"No rating available"
Not all nonprofits have Charity Navigator ratings. The service prioritizes:
- Larger organizations (>$1M revenue)
- National/regional nonprofits
- Organizations with public interest
Solution: Check for null ratings and gracefully handle unrated orgs.
"Rate limit exceeded"
Error: Maximum daily API calls (1,000) reached
Solution:
- Implement caching (see above)
- Process in batches over multiple days
- Prioritize most important organizations first
"Invalid EIN"
Error: Organization not found
Possible causes:
- EIN typo or formatting error
- Organization not in CN database
- Inactive/dissolved organization
Solution: Validate EINs before querying, handle 404s gracefully.
Support
- API Documentation: https://www.charitynavigator.org/partner/api
- Technical Support: api@charitynavigator.org
- Website: https://www.charitynavigator.org
- Phone: (201) 818-1288
Related Documentation
Trademark Notice: CHARITY NAVIGATOR and the CHARITY NAVIGATOR logo are registered trademarks of Charity Navigator. All rights reserved. Used with permission.