# Canada Charity Data — Directors & Financials (CRA T3010) (`foxlabs/ca-charity-data`) Actor

Search 80K+ Canadian registered charities from the official CRA T3010 open data — identity, category, address, website, plus optional directors/trustees and detailed financials (revenue, expenditures, assets). Open Government Licence — Canada, no key.

- **URL**: https://apify.com/foxlabs/ca-charity-data.md
- **Developed by:** [Berkan Kaplan](https://apify.com/foxlabs) (community)
- **Categories:** Lead generation
- **Stats:** 2 total users, 0 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $3.50 / 1,000 results

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

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

## What's an Apify Actor?

Actors are 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

<p align="center"><a href="https://apify.com/foxlabs/ca-charity-data"><img src="https://data.foxlabs.com.tr/img/ca-charity-data-banner.svg" alt="Canada Charity Data" width="100%" /></a></p>

## Canada Charity Data — Directors & Financials (CRA T3010)

Need **verified data on Canadian charities** — who they are, who runs them, and how they perform? This Actor turns the Canada Revenue Agency's official **T3010 "List of charities"** into clean, ready-to-use records: **~85,000 registered charities** with identity, category, address and website — plus, on demand, the full **board of directors / trustees** (names & positions) and the latest **T3010 financials**.

Built on the CRA's **official open data**, **Open Government Licence – Canada** — free for commercial reuse and redistribution. **No API key, no login, no fragile HTML scraping** — it reads the annual data files directly.

- 🇨🇦 **~85K registered charities** — the whole CRA register
- 👥 **Directors & trustees** *(opt-in)* — names, positions, arm's-length flag, start/end dates
- 📊 **Financials** *(opt-in)* — total revenue, expenditures, charitable spend, assets, liabilities, receipted donations
- 🌐 **Website + full address** for every charity that publishes one
- 🆓 **Open Government Licence** — reuse **and resell**, no key, no scraping

### Quick start (API)

Look up a charity with its board and financials:

```bash
curl -X POST "https://api.apify.com/v2/acts/foxlabs~ca-charity-data/run-sync-get-dataset-items?token=YOUR_APIFY_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{ "searchQuery": "red cross", "includeDirectors": true, "includeFinancials": true, "maxResults": 10 }'
```

Prefer no code? Open the **Input** tab, set your filters, and click **Start** — then download the results.

### What you get

One clean, flat record per charity:

| Field | Type | Description |
|---|---|---|
| `legalName` | string | Registered legal name |
| `businessNumber` | string | CRA Business Number (BN/RR) |
| `designation` / `designationCode` | string | `Charitable organisation` (C) / `Public foundation` (F) / `Private foundation` (P) |
| `categoryCode` | string | CRA category code |
| `address` / `city` / `province` / `postalCode` / `country` | string | Registered address |
| `website` | string | Published website, where available |
| `directors` *(opt-in)* | array | `{ name, position, atArmsLength, startDate, endDate }` per director / trustee |
| `financials` *(opt-in)* | object | Latest T3010 financials (see below) |
| `totalRevenueFormatted` | string | Display string, e.g. `CA$442,356,566` |
| `source` / `license` / `registryUrl` | string | Provenance — CRA, OGL–Canada, and the charity's CRA listing |

**`financials`** (when `includeFinancials` is on): `fiscalPeriodEnd`, `totalRevenue`, `totalExpenditures`, `charitableExpenditures`, `totalAssets`, `totalLiabilities`, `receiptedDonations`.

Missing values come back as `null`, never a guess.

#### Sample output

Real record for **The Canadian Red Cross Society** (`searchQuery: "canadian red cross"`, directors + financials on) — directors abbreviated (20 in full):

```json
{
  "legalName": "THE CANADIAN RED CROSS SOCIETY / LA SOCIETE CANADIENNE DE LA CROIX-ROUGE",
  "businessNumber": "119219814RR0001",
  "designation": "Charitable organisation",
  "designationCode": "C",
  "address": "B - 120 MCDONALD ST",
  "city": "SAINT JOHN",
  "province": "NB",
  "postalCode": "E2J1M5",
  "country": "CA",
  "website": "WWW.REDCROSS.CA",
  "financials": {
    "fiscalPeriodEnd": "2024-03-31",
    "totalRevenue": 442356566,
    "totalExpenditures": 591638990,
    "charitableExpenditures": 443797835,
    "totalAssets": 603847482,
    "totalLiabilities": 365788293,
    "receiptedDonations": 130641446
  },
  "totalRevenueFormatted": "CA$442,356,566",
  "directors": [
    { "name": "MIRANDA HUBBS", "position": "CHAIR", "atArmsLength": true, "startDate": "2017-06-17", "endDate": null },
    { "name": "RICHARD FADDEN", "position": "VICE CHAIR", "atArmsLength": true, "startDate": "2020-01-11", "endDate": null }
  ],
  "source": "Canada Revenue Agency — List of charities (T3010)",
  "license": "Open Government Licence — Canada",
  "registryUrl": "https://apps.cra-arc.gc.ca/ebci/hacc/srch/pub/dsplyRprtngPrd?q.stts=0007&selectedCharityBn=119219814RR0001&dsrdPg=1"
}
```

### Example inputs (copy & paste)

```jsonc
// 1) Charities in a city/province, with a website
{ "location": "Toronto", "onlyWithWebsite": true, "maxResults": 5000 }

// 2) Exact lookup by Business Number, with board & financials
{ "businessNumbers": ["119219814RR0001"], "includeDirectors": true, "includeFinancials": true }

// 3) Name search — every charity whose name contains "hospital"
{ "searchQuery": "hospital" }

// 4) Private foundations with financials (filter downstream by revenue)
{ "designation": "P", "includeFinancials": true, "maxResults": 20000 }

// 5) Board / director mapping for a cause
{ "searchQuery": "foundation", "includeDirectors": true }

// 6) Whole register, identity only (fast at scale)
{ "maxResults": 200000 }
```

### Input & filters

- **Charity name contains** (`searchQuery`) — case-insensitive substring on the legal name.
- **Business Numbers** (`businessNumbers`) — exact BN lookup (full `…RR0001` or the 9-digit core); overrides the name search.
- **Designation** (`designation`) — `C` charitable organisation, `F` public foundation, `P` private foundation.
- **Location contains** (`location`) — matches city, province or postal code.
- **Only with website** (`onlyWithWebsite`) — keep only charities that publish a website.
- **Include directors / trustees** (`includeDirectors`) — attach the board list.
- **Include financials** (`includeFinancials`) — attach the latest T3010 financials.
- **Max results** (`maxResults`) — 1 to **500,000**.

### Use cases

- **Grant-making & due diligence.** Verify a charity's registration, revenue, assets and board before funding or partnering.
- **KYC / KYB for the third sector.** Resolve the exact charity, its directors/trustees (the people in control) and its financial scale in one call.
- **Board / director mapping.** Attach directors to reconstruct who sits on which boards across Canadian charities.
- **Sector research & benchmarking.** Pull financials across thousands of charities to size a cause area or rank by revenue.
- **Prospecting.** Filter by cause, designation or province and enrich with website + board contacts.

### Performance & throughput

The Actor reads the CRA's annual T3010 data files directly and queries them locally with DuckDB. Identity runs are quick; **directors** and **financials** each add one reference file. A whole-register sweep pages through all ~85K charities up to your `maxResults`. No proxies, no keys, no per-request rate limits.

### Integrations

**JavaScript** (`apify-client`):

```js
import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: 'YOUR_APIFY_TOKEN' });
const run = await client.actor('foxlabs/ca-charity-data').call({
  searchQuery: 'foundation', includeDirectors: true, maxResults: 500,
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
```

**Python** (`apify-client`):

```python
from apify_client import ApifyClient
client = ApifyClient("YOUR_APIFY_TOKEN")
run = client.actor("foxlabs/ca-charity-data").call(run_input={
    "searchQuery": "foundation", "includeDirectors": True, "maxResults": 500,
})
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(item["legalName"], item["businessNumber"])
```

Also works with **Make / n8n / Zapier**, scheduled runs, webhooks, and the **Apify MCP server** for AI agents.

### Data quality (honest)

- **Identity, designation & address are complete** for every registered charity — core CRA fields.
- **Website** is present for the ~40% of charities that publish one; the CRA open data does **not** include charity email or phone, so this Actor doesn't invent them.
- **Directors / trustees** are dense (~95% of charities list a board, several names each) with positions and tenure dates.
- **Financials** come from the latest filed T3010; total revenue, expenditures and assets are present for essentially every charity that has filed.
- Nothing is fabricated — a missing value is `null`, never a guess. This is CRA-registered charities (federal); provincial non-profit registries are separate.

### Pricing

**Pay per result** — you're billed per charity returned; directors and financials are included in that price when enabled. There's an Apify **free tier** to evaluate the full feature set. No proxies, no third-party API costs — the CRA T3010 extract is a free public open-data source.

### FAQ

**Where does the data come from?** The Canada Revenue Agency's official **T3010 "List of charities"** open data, published on the Open Government Portal.

**Can I use this data commercially / resell it?** Yes. It's published under the **Open Government Licence – Canada**, which permits commercial reuse and redistribution with attribution. Records carry a `Source` credit.

**Do I get director / trustee names?** Yes — turn on **Include directors / trustees** and each record carries the board with names, positions and tenure.

**Does it include email or phone?** No — the CRA open data publishes website and address, not email/phone. We don't fabricate contact details.

**How fresh is it?** The CRA publishes the T3010 data annually; this Actor uses the latest published year.

**Do I need an API key or account for the source?** No. No key, no login, no scraping.

**What export formats?** JSON, CSV, Excel, or via the Apify API / integrations.

### Troubleshooting

- **Few / no results** → your filters may be too narrow; try a broader `searchQuery` or `location`, or an exact `businessNumbers` lookup.
- **No directors / financials on a record** → confirm the relevant toggle is on; a small number of charities have gaps in the filed data.
- **Name search returns extra matches** → it's a substring match; narrow with `location`, `designation` or an exact `businessNumbers` lookup.

### Notes, limits & legal (honest)

- **Official open data**, reused under the Open Government Licence – Canada. Not affiliated with the CRA.
- **Federal CRA-registered charities.** Provincial non-profit / society registries are separate.
- **Directors & financials are what charities filed** on their T3010; coverage varies by charity.
- **Personal data** is limited to what the public T3010 return publishes (director names, positions).

### Support

Questions, a field you'd like added, or a custom build? Open the **Issues** tab on this Actor, or email **info@foxlabs.com.tr**. We reply fast.

*If this Actor saves you time, a ⭐ review really helps.*

### Changelog

#### 0.1.1 — 2026-07-28

- **Directors/trustees and T3010 financials are now prefilled ON**, with a ready lookup (`119219814RR0001` Canadian Red Cross + `107492928RR0001` The Hospital for Sick Children) — the first run out of the box returns the board (with `position` and the arm's-length flag) plus the latest T3010 figures (100% fill on both records, measured 2026-07-28). The API `default` for both toggles is unchanged (`false`).
- Known limitation: the **Designation** filter offers `C` / `F` / `P`, but the CRA file actually uses `C` / `A` / `B` — choosing "Public foundation" or "Private foundation" currently returns no rows, and those ~11,400 records show a raw `A`/`B` in `designation`. Filter by name or location until this is corrected.

#### 0.1 — 2026-07-09

- Initial release. ~85K Canadian registered charities from the CRA T3010 open data: identity, designation, address, website, with opt-in directors/trustees (names & positions) and latest T3010 financials (revenue, expenditures, assets, liabilities, receipted donations). Open Government Licence – Canada, no key.

***

Part of the **[foXLabs data platform](https://data.foxlabs.com.tr/)** — official public-data company, contact, ownership, charity, jobs, location & AI-search intelligence scrapers. Browse the full suite at **[data.foxlabs.com.tr](https://data.foxlabs.com.tr/)**.

# Actor input Schema

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

Keep only charities whose legal name contains this text (case-insensitive). Example: "foundation", "hospital", "church". Leave empty to browse by the other filters.

## `businessNumbers` (type: `array`):

Exact CRA registration numbers for precise lookup (e.g. \["119219814RR0001"] = Canadian Red Cross, or just "119219814"). Overrides the name search.

## `designation` (type: `string`):

Filter by CRA designation type.

## `location` (type: `string`):

Keep only charities whose city, province or postal code contains this text (e.g. "Toronto", "ON", "Vancouver", "BC"). Leave empty for all of Canada.

## `onlyWithWebsite` (type: `boolean`):

Return only charities that publish a website URL.

## `includeDirectors` (type: `boolean`):

Attach each charity's directors, trustees and like officials (name, position, arm's-length flag, start/end date). Off by default — adds a reference download.

## `includeFinancials` (type: `boolean`):

Attach the latest T3010 financials — total revenue, expenditures, charitable expenditures, assets, liabilities, receipted donations and employee compensation. Off by default.

## `maxResults` (type: `integer`):

Maximum number of charities to return (1–500000).

## Actor input object example

```json
{
  "businessNumbers": [
    "119219814RR0001",
    "107492928RR0001"
  ],
  "designation": "any",
  "onlyWithWebsite": false,
  "includeDirectors": true,
  "includeFinancials": true,
  "maxResults": 1000
}
```

# Actor output Schema

## `dataset` (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 = {
    "searchQuery": "",
    "businessNumbers": [
        "119219814RR0001",
        "107492928RR0001"
    ],
    "location": "",
    "includeDirectors": true,
    "includeFinancials": true,
    "maxResults": 1000
};

// Run the Actor and wait for it to finish
const run = await client.actor("foxlabs/ca-charity-data").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": "",
    "businessNumbers": [
        "119219814RR0001",
        "107492928RR0001",
    ],
    "location": "",
    "includeDirectors": True,
    "includeFinancials": True,
    "maxResults": 1000,
}

# Run the Actor and wait for it to finish
run = client.actor("foxlabs/ca-charity-data").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": "",
  "businessNumbers": [
    "119219814RR0001",
    "107492928RR0001"
  ],
  "location": "",
  "includeDirectors": true,
  "includeFinancials": true,
  "maxResults": 1000
}' |
apify call foxlabs/ca-charity-data --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

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