# GuideStar / ProPublica Nonprofit Scraper (`parseforge/guidestar-scraper`) Actor

Access detailed nonprofit organization data from ProPublica's Nonprofit Explorer API. Perfect for grant researchers, fundraising teams, due diligence professionals, and market analysts who need accurate, up-to-date nonprofit financial data without manual lookup.

- **URL**: https://apify.com/parseforge/guidestar-scraper.md
- **Developed by:** [ParseForge](https://apify.com/parseforge) (community)
- **Categories:** Developer tools, Other
- **Stats:** 19 total users, 2 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

Pay per event

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

![ParseForge Banner](https://github.com/ParseForge/apify-assets/blob/ad35ccc13ddd068b9d6cba33f323962e39aed5b2/banner.jpg?raw=true)

## 🏛️ GuideStar/ProPublica Nonprofit Scraper

> 🚀 **Collect U.S. nonprofit organization data from IRS Form 990 filings in minutes.** Filter by state, city, NTEE category, revenue range, and asset size. No coding, no ProPublica account required.

> 🕒 **Last updated:** 2026-04-16 · **📊 25+ fields** · **📋 IRS Form 990 data** · **🇺🇸 All U.S. states**

The GuideStar/ProPublica Nonprofit Scraper pulls detailed profiles of tax-exempt organizations using public IRS Form 990 data. Each record includes the organization name, EIN, address, total revenue, total expenses, net assets, NTEE classification, tax-exempt subsection, and filing history. You can filter results by **state**, **city**, **NTEE category** (A through Z covering arts, education, health, human services, and more), **subsection code**, **revenue range**, and **asset size**. Free users can collect up to **10 organizations** per run, while paid users can retrieve up to **1,000,000 records**.

This tool is built for anyone who needs structured nonprofit data at scale. Grantmakers can screen thousands of organizations by cause area and financial health before making funding decisions. Researchers can analyze nonprofit density and revenue distribution across states and industries. Fundraising consultants can build prospect lists segmented by geography and size. The scraper handles pagination and search logic automatically, delivering clean records you can export to **JSON, CSV, or Excel** and load directly into your database, CRM, or analysis tool.

| Target Audience | Use Cases |
|---|---|
| Grantmakers and Foundations | Screen nonprofits by cause area, location, and financial size |
| Nonprofit Researchers | Analyze sector trends using IRS Form 990 financial data |
| Fundraising Consultants | Build prospect lists segmented by geography and revenue |
| Due Diligence Teams | Verify nonprofit financial health and filing status |
| Policy Analysts | Study nonprofit density and spending patterns by state |
| Philanthropic Advisors | Compare organizations by efficiency ratios and net assets |

---

### 📋 What the GuideStar/ProPublica Nonprofit Scraper does

- 🏢 **Organization profiles** - extract names, EINs, addresses, and contact information for every matched nonprofit
- 💰 **Financial statements** - pull total revenue, total expenses, net assets, and program spending data from IRS filings
- 🏷️ **NTEE classifications** - segment nonprofits by National Taxonomy category (A=Arts, B=Education, C=Environment, E=Health, P=Human Services, and more)
- 📍 **Geographic filtering** - narrow results by state and city to focus on specific markets or regions
- 📊 **Revenue and asset ranges** - filter by minimum and maximum annual revenue or total assets to find organizations of a specific size
- 📅 **Filing recency** - filter for organizations with recent Form 990 filings to ensure current data

The scraper queries the ProPublica Nonprofit Explorer database, which aggregates IRS Form 990 data for over 1.8 million tax-exempt organizations. It iterates through search results, collects structured data for each organization, and pushes records to an Apify dataset in real time. Duplicate organizations are handled automatically.

> 💡 **Why it matters:** IRS Form 990 data is public but spread across millions of filings. This scraper gives you structured, filterable access to the key fields that matter for research, grantmaking, and due diligence.

---

### 🎬 Full Demo

_🚧 Coming soon..._

---

### ⚙️ Input

<table>
<tr><th>Field</th><th>Type</th><th>Required</th><th>Description</th></tr>
<tr><td>searchQuery</td><td>string</td><td>No</td><td>Keyword search for organization name, alternate name, or city.</td></tr>
<tr><td>maxItems</td><td>integer</td><td>No</td><td>Maximum organizations to collect. Free: 10. Paid: up to 1,000,000.</td></tr>
<tr><td>state</td><td>string</td><td>No</td><td>Two-letter U.S. state code (e.g., CA, TX, NY). Leave empty for all states.</td></tr>
<tr><td>city</td><td>string</td><td>No</td><td>City name to filter results (e.g., New York, Los Angeles).</td></tr>
<tr><td>nteeCategory</td><td>string</td><td>No</td><td>NTEE category letter: A=Arts, B=Education, C=Environment, E=Health, P=Human Services.</td></tr>
<tr><td>subsectionCode</td><td>string</td><td>No</td><td>Tax-exempt subsection: 3=Charitable, 4=Social Welfare, 5=Labor, 6=Business Leagues.</td></tr>
<tr><td>minRevenue</td><td>integer</td><td>No</td><td>Minimum annual revenue in USD.</td></tr>
<tr><td>maxRevenue</td><td>integer</td><td>No</td><td>Maximum annual revenue in USD.</td></tr>
<tr><td>minAssets</td><td>integer</td><td>No</td><td>Minimum total assets in USD.</td></tr>
<tr><td>maxAssets</td><td>integer</td><td>No</td><td>Maximum total assets in USD.</td></tr>
<tr><td>hasRecentFiling</td><td>boolean</td><td>No</td><td>Only include organizations with Form 990 filings in the last 3 years.</td></tr>
<tr><td>minFilingYear</td><td>integer</td><td>No</td><td>Minimum year of most recent filing (e.g., 2020).</td></tr>
</table>

**Example 1: Education nonprofits in California**
```json
{
  "maxItems": 100,
  "state": "CA",
  "nteeCategory": "B",
  "subsectionCode": "3",
  "minRevenue": 100000,
  "maxRevenue": 10000000
}
````

**Example 2: Search by keyword across all states**

```json
{
  "searchQuery": "food bank",
  "maxItems": 50,
  "hasRecentFiling": true
}
```

> ⚠️ **Good to Know:** Free users are automatically limited to 10 items per run. Leave searchQuery empty to browse organizations by state and category. The scraper uses a letter-based search pattern when no keyword is provided to cover the full directory.

***

### 📊 Output

#### 🧾 Schema

| Emoji | Field | Type | Description |
|---|---|---|---|
| 🏢 | organizationName | string | Official name of the nonprofit organization |
| 📝 | ein | string | Employer Identification Number (IRS tax ID) |
| 📍 | address | string | Street address of the organization |
| 🏙️ | city | string | City where the organization is located |
| 📮 | state | string | Two-letter U.S. state code |
| 🔢 | zipCode | string | ZIP code of the organization |
| 💰 | totalRevenue | number | Annual total revenue from the most recent filing |
| 💸 | totalExpenses | number | Annual total expenses from the most recent filing |
| 📊 | netAssets | number | Net assets or fund balances |
| 🏷️ | nteeCode | string | NTEE classification code and description |
| 📋 | subsection | string | Tax-exempt subsection code |
| 📅 | filingYear | integer | Year of the most recent Form 990 filing |
| 🌐 | website | string | Organization website URL |
| 📞 | phone | string | Contact phone number |
| 🕐 | scrapedAt | string | Timestamp of data collection |
| ⚠️ | error | string | Error message if processing failed |

#### 📦 Sample records

<details>
<summary>📝 Education nonprofit in California</summary>

```json
{
  "organizationName": "Bay Area Community Resources",
  "ein": "94-2346382",
  "address": "171 Carlos Drive",
  "city": "San Rafael",
  "state": "CA",
  "zipCode": "94903",
  "totalRevenue": 24500000,
  "totalExpenses": 23800000,
  "netAssets": 5200000,
  "nteeCode": "B20 - Elementary, Secondary Education",
  "subsection": "501(c)(3)",
  "filingYear": 2023,
  "scrapedAt": "2026-04-16T12:00:00.000Z"
}
```

</details>

<details>
<summary>📝 Health nonprofit in New York</summary>

```json
{
  "organizationName": "Robin Hood Foundation",
  "ein": "13-3532160",
  "address": "826 Broadway",
  "city": "New York",
  "state": "NY",
  "zipCode": "10003",
  "totalRevenue": 187000000,
  "totalExpenses": 171000000,
  "netAssets": 98000000,
  "nteeCode": "P20 - Human Service Organizations",
  "subsection": "501(c)(3)",
  "filingYear": 2023,
  "scrapedAt": "2026-04-16T12:00:00.000Z"
}
```

</details>

<details>
<summary>📝 Environmental nonprofit in Washington</summary>

```json
{
  "organizationName": "Earthjustice",
  "ein": "94-1730465",
  "address": "325 Fourth Street",
  "city": "Juneau",
  "state": "AK",
  "zipCode": "99801",
  "totalRevenue": 156000000,
  "totalExpenses": 128000000,
  "netAssets": 245000000,
  "nteeCode": "C30 - Natural Resources Conservation",
  "subsection": "501(c)(3)",
  "filingYear": 2023,
  "scrapedAt": "2026-04-16T12:00:00.000Z"
}
```

</details>

***

### ✨ Why choose this Actor

| Feature | This Actor | Alternatives |
|---|---|---|
| IRS Form 990 financial data included | Yes | Often requires separate lookups |
| NTEE category filtering (A-Z) | Yes | Limited |
| Revenue and asset range filters | Yes | Rarely available |
| State and city geographic filters | Yes | State only |
| Recent filing filter | Yes | No |
| Up to 1,000,000 records per run | Yes | Capped lower |
| Export to JSON, CSV, and Excel | Yes | JSON only |

> 📊 **Over 1.8 million tax-exempt organizations are indexed. Filter by any combination of geography, cause area, size, and filing recency in a single run.**

***

### 📈 How it compares to alternatives

| Capability | This Actor | Manual Database Search | Generic Web Scrapers |
|---|---|---|---|
| Nonprofit-specific filters (NTEE, subsection, revenue) | Yes | Yes | No |
| Bulk export of thousands of records | Yes | Limited to pages | Varies |
| Structured financial data per organization | Yes | Yes | No |
| Scheduled recurring runs | Yes | No | Varies |
| No coding required | Yes | Yes | No |
| API and programmatic access | Yes | Limited | Varies |

This scraper is purpose-built for nonprofit research, combining the ProPublica Nonprofit Explorer data with flexible filtering and bulk export.

***

### 🚀 How to use

1. **Sign up** - [Create a free Apify account with $5 credit](https://console.apify.com/sign-up?fpr=vmoqkp)
2. **Find the Actor** - Search for "GuideStar Nonprofit Scraper" in the Apify Store
3. **Set your filters** - Choose state, NTEE category, revenue range, and other criteria
4. **Start the run** - Click "Start" and monitor results in real time
5. **Export your data** - Download as JSON, CSV, or Excel from the dataset tab

> 🕒 **Typical run time:** 1 to 3 minutes for 100 organizations. Larger runs with 1,000+ records may take 10 to 20 minutes.

***

### 💼 Business use cases

<table>
<tr>
<td>

**Grantmaking and Philanthropy**

- Screen applicants by NTEE category and financial health
- Compare peer organizations by revenue and net assets
- Identify underfunded nonprofits in target cause areas
- Build grantee prospect databases by state and city

</td>
<td>

**Due Diligence and Compliance**

- Verify nonprofit EINs and filing status before partnerships
- Check financial health indicators for vendor nonprofits
- Monitor portfolio organizations for filing lapses
- Cross-reference organizational data with public filings

</td>
</tr>
<tr>
<td>

**Academic Research**

- Analyze nonprofit density by state and sector
- Study revenue distribution across NTEE categories
- Track nonprofit growth trends over multiple filing years
- Build datasets for econometric or policy analysis

</td>
<td>

**Fundraising and Consulting**

- Build prospect lists by geography and organization size
- Segment nonprofits by revenue tier for targeted outreach
- Identify high-growth organizations in specific sectors
- Export contact data for CRM import and campaign planning

</td>
</tr>
</table>

***

***

### 🌟 Beyond business use cases

Data like this powers more than commercial workflows. The same structured records support research, education, civic projects, and personal initiatives.

<table>
<tr>
<td width="50%">

#### 🎓 Research and academia

- Empirical datasets for papers, thesis work, and coursework
- Longitudinal studies tracking changes across snapshots
- Reproducible research with cited, versioned data pulls
- Classroom exercises on data analysis and ethical scraping

</td>
<td width="50%">

#### 🎨 Personal and creative

- Side projects, portfolio demos, and indie app launches
- Data visualizations, dashboards, and infographics
- Content research for bloggers, YouTubers, and podcasters
- Hobbyist collections and personal trackers

</td>
</tr>
<tr>
<td width="50%">

#### 🤝 Non-profit and civic

- Transparency reporting and accountability projects
- Advocacy campaigns backed by public-interest data
- Community-run databases for local issues
- Investigative journalism on public records

</td>
<td width="50%">

#### 🧪 Experimentation

- Prototype AI and machine-learning pipelines with real data
- Validate product-market hypotheses before engineering spend
- Train small domain-specific models on niche corpora
- Test dashboard concepts with live input

</td>
</tr>
</table>

### 🤖 Ask an AI assistant about this scraper

Open a ready-to-send prompt about this ParseForge actor in the AI of your choice:

- 💬 [**ChatGPT**](https://chat.openai.com/?q=How%20do%20I%20use%20the%20GuideStar%20%2F%20ProPublica%20Nonprofit%20Scraper%20by%20ParseForge%20on%20Apify%3F%20Show%20me%20input%20examples%2C%20output%20fields%2C%20common%20use%20cases%2C%20and%20how%20to%20integrate%20it%20into%20a%20workflow.)
- 🧠 [**Claude**](https://claude.ai/new?q=How%20do%20I%20use%20the%20GuideStar%20%2F%20ProPublica%20Nonprofit%20Scraper%20by%20ParseForge%20on%20Apify%3F%20Show%20me%20input%20examples%2C%20output%20fields%2C%20common%20use%20cases%2C%20and%20how%20to%20integrate%20it%20into%20a%20workflow.)
- 🔍 [**Perplexity**](https://perplexity.ai/search?q=How%20do%20I%20use%20the%20GuideStar%20%2F%20ProPublica%20Nonprofit%20Scraper%20by%20ParseForge%20on%20Apify%3F%20Show%20me%20input%20examples%2C%20output%20fields%2C%20common%20use%20cases%2C%20and%20how%20to%20integrate%20it%20into%20a%20workflow.)
- 🅒 [**Copilot**](https://copilot.microsoft.com/?q=How%20do%20I%20use%20the%20GuideStar%20%2F%20ProPublica%20Nonprofit%20Scraper%20by%20ParseForge%20on%20Apify%3F%20Show%20me%20input%20examples%2C%20output%20fields%2C%20common%20use%20cases%2C%20and%20how%20to%20integrate%20it%20into%20a%20workflow.)

### ❓ Frequently Asked Questions

<details>
<summary><b>💳 Do I need a paid Apify plan to run this actor?</b></summary>

No. You can start right now on the free Apify plan, which includes **$5 in free monthly credit**. That is enough to run this actor several times and explore the output before committing to anything. Paid plans unlock higher limits, more concurrent runs, and larger datasets. [Create a free Apify account here](https://console.apify.com/sign-up?fpr=vmoqkp) to get started.

</details>

<details>
<summary><b>🚨 What happens if my run fails or returns no results?</b></summary>

Failed runs are not charged. If the source site changes, proxies get rate-limited, or a specific input matches nothing, re-run the actor or open our [contact form](https://tally.so/r/BzdKgA) and we will investigate. You can also check the run log in the Apify console to see why the run stopped.

</details>

<details>
<summary><b>📏 How many items can I scrape per run?</b></summary>

Free users are limited to **10 items per run** so you can preview the output and confirm the actor works for your use case. Paid users can raise maxItems up to **1,000,000** per run. [Upgrade here](https://console.apify.com/sign-up?fpr=vmoqkp) if you need full scale.

</details>

<details>
<summary><b>🕒 How fresh is the data?</b></summary>

Every run fetches live data at the moment of execution. There is no cache or delay: the records you get reflect what the source returned at that moment. Schedule the actor to maintain a rolling snapshot of the data you need.

</details>

<details>
<summary><b>🧑‍💻 Can I call this actor from my own code?</b></summary>

Yes. Apify exposes every actor as a REST endpoint and ships first-class SDKs for [Node.js](https://docs.apify.com/sdk/js) and [Python](https://docs.apify.com/sdk/python). You can start a run, read the dataset, and handle webhooks from your own app in a few lines. All you need is your Apify API token.

</details>

<details>
<summary><b>📤 How do I export the data?</b></summary>

Every Apify dataset can be downloaded in one click from the console as CSV, JSON, JSONL, Excel, HTML, XML, or RSS. You can also pull results programmatically via the [Apify API](https://docs.apify.com/api/v2) or stream them into BigQuery, S3, and other destinations through built-in integrations.

</details>

<details>
<summary><b>📅 Can I schedule the actor to run automatically?</b></summary>

Yes. Use the Apify scheduler to run the actor on any cadence, from hourly to monthly. Results are saved to your dataset and can be delivered to webhooks, email, Slack, cloud storage, or automation tools such as Zapier and Make.

***

</details>

### 🔌 Automating GuideStar/ProPublica Nonprofit Scraper

**Node.js example:**

```javascript
import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: 'YOUR_API_TOKEN' });
const run = await client.actor('parseforge/guidestar-scraper').call({
    maxItems: 100,
    state: 'CA',
    nteeCategory: 'B'
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items);
```

**Python example:**

```python
from apify_client import ApifyClient
client = ApifyClient('YOUR_API_TOKEN')
run = client.actor('parseforge/guidestar-scraper').call(run_input={
    'maxItems': 100,
    'state': 'CA',
    'nteeCategory': 'B'
})
items = list(client.dataset(run['defaultDatasetId']).iterate_items())
print(items)
```

- [Apify API documentation](https://docs.apify.com/api/v2)
- [Node.js client docs](https://docs.apify.com/api/client/js/)
- [Python client docs](https://docs.apify.com/api/client/python/)

**Schedules:** Set up recurring runs to refresh your nonprofit database weekly or monthly. Combine with Google Sheets or Slack integrations to automatically update your team when new organizations match your criteria.

### 🔌 Integrate with any app

- [Make](https://docs.apify.com/platform/integrations/make) - Automate nonprofit data workflows and sync with your CRM
- [Zapier](https://docs.apify.com/platform/integrations/zapier) - Connect to 5,000+ apps and trigger actions on new records
- [Slack](https://docs.apify.com/platform/integrations/slack) - Get notifications when new organizations match your filters
- [Airbyte](https://docs.apify.com/platform/integrations/airbyte) - Stream nonprofit data into your data warehouse
- [GitHub](https://docs.apify.com/platform/integrations/github) - Version control your scraper configurations
- [Google Drive](https://docs.apify.com/platform/integrations/drive) - Export results directly to Google Sheets

***

### 🔗 Recommended Actors

| Actor | Description |
|---|---|
| [FINRA BrokerCheck Scraper](https://apify.com/parseforge/finra-brokercheck-scraper) | Search broker and firm registration data from the FINRA registry |
| [GSA eLibrary Scraper](https://apify.com/parseforge/gsa-elibrary-scraper) | Collect government contractor and vendor data from the GSA eLibrary |
| [USAspending Scraper](https://apify.com/parseforge/usaspending-scraper) | Extract federal spending data and contract information |
| [PR Newswire Scraper](https://apify.com/parseforge/pr-newswire-scraper) | Collect press releases and news articles from PR Newswire |
| [FAA Aircraft Registry Scraper](https://apify.com/parseforge/faa-aircraft-registry-scraper) | Look up aircraft registration records by N-number from the FAA |

> 💡 **Pro Tip:** Combine the Nonprofit Scraper with the USAspending Scraper to cross-reference nonprofit grant recipients with federal spending records.

***

**🆘 Need Help?** [**Open our contact form**](https://tally.so/r/BzdKgA) to request a new scraper, propose a custom data project, or report an issue. We typically respond within 24 hours.

***

> **Disclaimer:** This Actor is an independent tool and is not affiliated with, endorsed by, or sponsored by GuideStar, Candid, ProPublica, or the IRS. All trademarks mentioned are the property of their respective owners.

# Actor input Schema

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

Keyword search for organization name, alternate name, or city. Leave empty to search all organizations using letter-based enumeration for maximum coverage.

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

Free users: Limited to 100. Paid users: Optional, max 1,000,000

## `state` (type: `string`):

Two-letter US state code (e.g., CA, TX, NY, FL, IL, PA, OH, GA, NC, MI). Leave empty for all states.

## `city` (type: `string`):

City name to filter results (e.g., New York, Los Angeles, Chicago). Leave empty for all cities.

## `nteeCategory` (type: `string`):

National Taxonomy category letter (A-Z). Examples: A=Arts, B=Education, C=Environment, D=Animal, E=Health, P=Human Services. Leave empty for all categories.

## `subsectionCode` (type: `string`):

Tax-exempt subsection. Common values: 3=Charitable, 4=Social Welfare, 5=Labor/Agricultural, 6=Business Leagues, 7=Social/Recreational.

## `minRevenue` (type: `integer`):

Minimum annual revenue in USD. Filter organizations by revenue size. Leave empty for no minimum.

## `maxRevenue` (type: `integer`):

Maximum annual revenue in USD. Filter organizations by revenue size. Leave empty for no maximum.

## `minAssets` (type: `integer`):

Minimum total assets in USD. Filter organizations by asset size. Leave empty for no minimum.

## `maxAssets` (type: `integer`):

Maximum total assets in USD. Filter organizations by asset size. Leave empty for no maximum.

## `hasRecentFiling` (type: `boolean`):

Filter to only include organizations with recent Form 990 filings (within last 3 years).

## `minFilingYear` (type: `integer`):

Minimum year of most recent filing (e.g., 2020). Leave empty for no minimum.

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

Proxy settings for requests. Recommended for high-volume scraping to avoid rate limits.

## Actor input object example

```json
{
  "maxItems": 10,
  "state": "CA",
  "nteeCategory": "B",
  "subsectionCode": "3",
  "hasRecentFiling": false
}
```

# Actor output Schema

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

Overview view of nonprofit organizations with key fields displayed in a table format

## `nonprofitRecords` (type: `string`):

Complete nonprofit organization dataset with all fields including financial statements, revenue/expense breakdowns, classifications, and filing history

# 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 = {
    "searchQuery": "",
    "maxItems": 10,
    "state": "CA",
    "nteeCategory": "B",
    "subsectionCode": "3"
};

// Run the Actor and wait for it to finish
const run = await client.actor("parseforge/guidestar-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 = {
    "searchQuery": "",
    "maxItems": 10,
    "state": "CA",
    "nteeCategory": "B",
    "subsectionCode": "3",
}

# Run the Actor and wait for it to finish
run = client.actor("parseforge/guidestar-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 '{
  "searchQuery": "",
  "maxItems": 10,
  "state": "CA",
  "nteeCategory": "B",
  "subsectionCode": "3"
}' |
apify call parseforge/guidestar-scraper --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "GuideStar / ProPublica Nonprofit Scraper",
        "description": "Access detailed nonprofit organization data from ProPublica's Nonprofit Explorer API. Perfect for grant researchers, fundraising teams, due diligence professionals, and market analysts who need accurate, up-to-date nonprofit financial data without manual lookup.",
        "version": "1.0",
        "x-build-id": "oNdivdNvhri6ATlyL"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/parseforge~guidestar-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-parseforge-guidestar-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/parseforge~guidestar-scraper/runs": {
            "post": {
                "operationId": "runs-sync-parseforge-guidestar-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/parseforge~guidestar-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-parseforge-guidestar-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",
                "properties": {
                    "searchQuery": {
                        "title": "Search Query",
                        "type": "string",
                        "description": "Keyword search for organization name, alternate name, or city. Leave empty to search all organizations using letter-based enumeration for maximum coverage."
                    },
                    "maxItems": {
                        "title": "Max Items",
                        "minimum": 1,
                        "maximum": 1000000,
                        "type": "integer",
                        "description": "Free users: Limited to 100. Paid users: Optional, max 1,000,000"
                    },
                    "state": {
                        "title": "State",
                        "pattern": "^[A-Z]{2}$",
                        "minLength": 2,
                        "maxLength": 2,
                        "type": "string",
                        "description": "Two-letter US state code (e.g., CA, TX, NY, FL, IL, PA, OH, GA, NC, MI). Leave empty for all states."
                    },
                    "city": {
                        "title": "City",
                        "type": "string",
                        "description": "City name to filter results (e.g., New York, Los Angeles, Chicago). Leave empty for all cities."
                    },
                    "nteeCategory": {
                        "title": "NTEE Category",
                        "enum": [
                            "",
                            "A",
                            "B",
                            "C",
                            "D",
                            "E",
                            "F",
                            "G",
                            "H",
                            "I",
                            "J",
                            "K",
                            "L",
                            "M",
                            "N",
                            "O",
                            "P",
                            "Q",
                            "R",
                            "S",
                            "T",
                            "U",
                            "V",
                            "W",
                            "X",
                            "Y",
                            "Z"
                        ],
                        "type": "string",
                        "description": "National Taxonomy category letter (A-Z). Examples: A=Arts, B=Education, C=Environment, D=Animal, E=Health, P=Human Services. Leave empty for all categories."
                    },
                    "subsectionCode": {
                        "title": "501(c) Subsection Code",
                        "enum": [
                            "",
                            "3",
                            "4",
                            "5",
                            "6",
                            "7",
                            "8",
                            "9",
                            "10",
                            "13",
                            "14",
                            "19"
                        ],
                        "type": "string",
                        "description": "Tax-exempt subsection. Common values: 3=Charitable, 4=Social Welfare, 5=Labor/Agricultural, 6=Business Leagues, 7=Social/Recreational."
                    },
                    "minRevenue": {
                        "title": "Min Annual Revenue",
                        "minimum": 0,
                        "type": "integer",
                        "description": "Minimum annual revenue in USD. Filter organizations by revenue size. Leave empty for no minimum."
                    },
                    "maxRevenue": {
                        "title": "Max Annual Revenue",
                        "minimum": 0,
                        "type": "integer",
                        "description": "Maximum annual revenue in USD. Filter organizations by revenue size. Leave empty for no maximum."
                    },
                    "minAssets": {
                        "title": "Min Total Assets",
                        "minimum": 0,
                        "type": "integer",
                        "description": "Minimum total assets in USD. Filter organizations by asset size. Leave empty for no minimum."
                    },
                    "maxAssets": {
                        "title": "Max Total Assets",
                        "minimum": 0,
                        "type": "integer",
                        "description": "Maximum total assets in USD. Filter organizations by asset size. Leave empty for no maximum."
                    },
                    "hasRecentFiling": {
                        "title": "Has Recent 990 Filing",
                        "type": "boolean",
                        "description": "Filter to only include organizations with recent Form 990 filings (within last 3 years).",
                        "default": false
                    },
                    "minFilingYear": {
                        "title": "Min Filing Year",
                        "minimum": 1990,
                        "maximum": 2030,
                        "type": "integer",
                        "description": "Minimum year of most recent filing (e.g., 2020). Leave empty for no minimum."
                    },
                    "proxyConfiguration": {
                        "title": "Proxy Configuration",
                        "type": "object",
                        "description": "Proxy settings for requests. Recommended for high-volume scraping to avoid rate limits."
                    }
                }
            },
            "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
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
