# UK Charity Data — Trustees, Contact & Financials (`foxlabs/uk-charity-data`) Actor

Search 170K+ UK charities from the official Charity Commission register (England & Wales) open data — identity, status, contact (email/phone/web), latest income & expenditure, plus optional trustees and detailed annual-report financials. Open Government Licence, no key.

- **URL**: https://apify.com/foxlabs/uk-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 $4.00 / 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/uk-charity-data"><img src="https://data.foxlabs.com.tr/img/uk-charity-data-banner.svg" alt="UK Charity Data" width="100%" /></a></p>

## UK Charity Data — Trustees, Contact & Financials

Need **verified data on UK charities** — who they are, how to reach them, who runs them, and how they perform? This Actor turns the official **Charity Commission for England & Wales** register into clean, ready-to-use records: **~170,000 registered charities** with identity, status, **contact details (email, phone, website)**, latest income & expenditure — plus, on demand, the **trustees** and the full **annual-report financials**.

Built on the Charity Commission's **official register extract**, **Open Government Licence v3.0** — free for commercial reuse and redistribution. **No API key, no login, no fragile HTML scraping** — it reads the register's daily data files directly.

- 🇬🇧 **~170K registered charities** — the whole register of England & Wales
- 📇 **Contact details** — email, phone and website, straight from the register (great for outreach/lead lists)
- 👥 **Trustees** *(opt-in)* — names, chair flag, person/organisation, appointment date
- 📊 **Financials** *(opt-in)* — income by source, expenditure, assets, reserves, funds, employee count; headline income & expenditure always included
- 🆓 **Open Government Licence** — reuse **and resell**, no key, no scraping

### Quick start (API)

Find active hospices with a contact email, plus their financials:

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

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 |
|---|---|---|
| `charityName` | string | Registered charity name |
| `registeredCharityNumber` | string | Public charity number |
| `organisationNumber` | string | The register's internal key (used in the registry URL) |
| `charityType` | string | e.g. `Charitable company`, `CIO`, `Trust` |
| `status` | string | `Registered` or `Removed` |
| `dateRegistered` / `dateRemoved` | string | Registration / removal dates (`YYYY-MM-DD`) |
| `address` / `city` / `postcode` | string | Registered contact address |
| `phone` / `email` / `website` | string | Published contact details |
| `latestIncome` / `latestExpenditure` | number | Latest reported income & spend (GBP) |
| `latestIncomeFormatted` | string | Display string, e.g. `£734,753,802` |
| `financialYearEnd` | string | End of the latest reported financial year |
| `activities` | string | The charity's own description of what it does |
| `companyNumber` | string | Companies House number, if the charity is also a company |
| `isCIO` / `isInsolvent` / `hasGiftAid` | bool | Status flags |
| `trustees` *(opt-in)* | array | `{ name, isChair, type, appointedDate }` per trustee |
| `financials` *(opt-in)* | object | Latest annual-return breakdown (see below) |
| `source` / `license` / `registryUrl` | string | Provenance — the register, OGL v3.0, and the charity's register page |

**`financials`** (when `includeFinancials` is on): `financialYearEnd`, `totalIncome`, `totalExpenditure`, `incomeDonations`, `incomeCharitable`, `incomeTrading`, `incomeInvestments`, `expenditureCharitable`, `reserves`, `netAssets`, `cash`, `fundsRestricted`, `fundsUnrestricted`, `employees`.

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

#### Sample output

Real record for **Cancer Research UK** (`charityNumbers: ["1089464"]`, trustees + financials on) — trustees abbreviated (14 in full):

```json
{
  "charityName": "CANCER RESEARCH UK",
  "registeredCharityNumber": "1089464",
  "organisationNumber": "3987102",
  "charityType": "Charitable company",
  "status": "Registered",
  "dateRegistered": "2001-11-23",
  "address": "Cancer Research UK, 2 Redman Place, LONDON",
  "city": "LONDON",
  "postcode": "E20 1JQ",
  "phone": "020 7242 0200",
  "email": "secretariat@cancer.org.uk",
  "website": "www.cancerresearchuk.org",
  "latestIncome": 734753802,
  "latestExpenditure": 714723789,
  "latestIncomeFormatted": "£734,753,802",
  "financialYearEnd": "2025-03-31",
  "companyNumber": "04325234",
  "isCIO": false,
  "hasGiftAid": true,
  "trustees": [
    { "name": "Lord Simon Stevens", "isChair": false, "type": "person", "appointedDate": "2023-10-01" },
    { "name": "Professor Dame Nancy Jane Rothwell", "isChair": false, "type": "person", "appointedDate": "2024-10-17" }
  ],
  "financials": {
    "financialYearEnd": "2025-03-31",
    "totalIncome": 734753802, "totalExpenditure": 714723789,
    "incomeDonations": 530012997, "incomeCharitable": 59000260,
    "reserves": 363401796, "cash": 24855363, "employees": 5169
  },
  "source": "Charity Commission for England & Wales — register extract",
  "license": "Open Government Licence v3.0",
  "registryUrl": "https://register-of-charities.charitycommission.gov.uk/charity-search/-/charity-details/3987102/charity-overview"
}
```

### Example inputs (copy & paste)

```jsonc
// 1) Active charities in a city, with a contact email
{ "location": "Manchester", "onlyWithEmail": true, "status": "registered", "maxResults": 5000 }

// 2) Exact lookup by charity number, with trustees & financials
{ "charityNumbers": ["1089464", "202918"], "includeTrustees": true, "includeFinancials": true }

// 3) Name search — every active charity whose name contains "hospice"
{ "searchQuery": "hospice", "status": "registered" }

// 4) Large charities with full financials (filter downstream by latestIncome)
{ "includeFinancials": true, "maxResults": 20000 }

// 5) Build a trustee / board contact map
{ "searchQuery": "foundation", "includeTrustees": true, "onlyWithEmail": true }

// 6) Whole register incl. removed charities (audit / history)
{ "status": "all", "maxResults": 200000 }
```

### Input & filters

- **Charity name contains** (`searchQuery`) — case-insensitive substring on the charity name.
- **Charity numbers** (`charityNumbers`) — exact registered charity numbers; overrides the name search.
- **Status** (`status`) — `registered` (active), `removed`, or `all`.
- **Location contains** (`location`) — matches the address or postcode.
- **Only with email** (`onlyWithEmail`) — keep only charities that publish a contact email.
- **Include trustees** (`includeTrustees`) — attach the trustee list.
- **Include detailed financials** (`includeFinancials`) — attach the latest annual-return breakdown.
- **Max results** (`maxResults`) — 1 to **500,000**.

### Use cases

- **Nonprofit outreach & fundraising.** Filter by name, cause or location, keep only charities with an email, and build a targeted, GDPR-friendly (public register) outreach list.
- **Grant-making & due diligence.** Verify a charity's registration, income, reserves and trustees before awarding or partnering.
- **KYC / KYB for the third sector.** Resolve the exact registered charity, its trustees (the people in control) and its Companies House number in one call.
- **Sector research & benchmarking.** Pull financials across thousands of charities to size a cause area, rank by income, or track reserves and headcount.
- **Board / trustee mapping.** Attach trustees to reconstruct who sits on which boards across the sector.

### Performance & throughput

The Actor reads the Charity Commission's daily register extract directly and queries it locally with DuckDB. Identity + contact runs are quick; **trustees** and **financials** each add one reference file, so those runs download a little more up front. A whole-register sweep pages through all ~170K registered 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/uk-charity-data').call({
  searchQuery: 'hospice', onlyWithEmail: 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/uk-charity-data").call(run_input={
    "searchQuery": "hospice", "onlyWithEmail": True, "maxResults": 500,
})
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(item["charityName"], item["registeredCharityNumber"])
```

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

### Data quality (honest)

- **Identity & status are complete** for every registered charity — name, number, type, status and registration date are core register fields.
- **Contact details are strong but not universal** — most active charities publish an email/phone/website, but some don't; missing values are `null`. Contact is the charity's own published data.
- **Headline financials** (`latestIncome` / `latestExpenditure`) are present for charities that have filed; the **detailed `financials`** come from the most recent annual return (Part B) and exist for charities above the reporting threshold.
- **Trustees** reflect the register's current list; the `isChair` flag is set where the Commission records it.
- **Removed charities** carry historical data and often have no current contact — filter to `registered` (the default) for active outreach.
- Nothing is fabricated — a missing value is `null`, never a guess. This is England & Wales only (Scotland's OSCR and Northern Ireland's CCNI are separate registers).

### Pricing

**Pay per result** — you're billed per charity returned; trustees 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 Charity Commission extract is a free public open-data source.

### FAQ

**Where does the data come from?** The official **Charity Commission for England & Wales** register extract, published daily.

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

**Do I get contact emails?** Yes — where the charity published one. Use **Only with email** to keep just those records.

**Does it cover Scotland and Northern Ireland?** No — this is England & Wales (Charity Commission). Scotland (OSCR) and Northern Ireland (CCNI) maintain separate registers.

**How fresh is it?** The Commission republishes the extract daily; each run reads the current files.

**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, or the charities are `Removed` (the default is registered only — set `status` to `all`).
- **No trustees / financials on a record** → confirm the relevant toggle is on; very small charities may not file detailed financials.
- **Name search returns extra matches** → it's a substring match; narrow with `location` or an exact `charityNumbers` lookup.

### Notes, limits & legal (honest)

- **Official open data**, reused under the Open Government Licence v3.0. Not affiliated with the Charity Commission.
- **England & Wales only.** Scotland (OSCR) and NI (CCNI) are separate registers.
- **Contact & financials are what charities filed** with the Commission; coverage varies by size and filing obligations.
- **Personal data** is limited to what the public register publishes (trustee names, roles).

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

- **Trustees and detailed financials are now prefilled ON**, with a ready lookup (`220949` British Red Cross + `1089464` Cancer Research UK) — the first run out of the box returns the trustee board plus the full annual-return breakdown (100% fill on both records, measured 2026-07-28), and it runs *faster* than the old identity-only browse. The API `default` for both toggles is unchanged (`false`).
- Fix: the `charityNumbers` example used `1110858`, which no longer matches a registered charity in the daily extract — replaced with live-verified numbers.

#### 0.1 — 2026-07-09

- Initial release. ~170K registered charities from the official Charity Commission (England & Wales) register extract: identity, status, contact (email/phone/web), latest income & expenditure, with opt-in trustees and detailed annual-report financials. Open Government Licence v3.0, 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 name contains this text (case-insensitive). Example: "hospice", "animal", "trust". Leave empty to browse by the other filters.

## `charityNumbers` (type: `array`):

Exact registered charity numbers for precise lookup (e.g. \["220949" = British Red Cross, "1089464" = Cancer Research UK). Overrides the name search.

## `status` (type: `string`):

Filter by registration status. Registered = currently on the register; Removed = de-registered / dissolved.

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

Keep only charities whose address or postcode contains this text — a city, county or postcode area (e.g. "London", "Manchester", "BS1"). Leave empty for all of England & Wales.

## `onlyWithEmail` (type: `boolean`):

Return only charities that publish a contact email — useful for lead / outreach lists.

## `includeTrustees` (type: `boolean`):

Attach each charity's trustees (name, chair flag, person/organisation, appointment date). Off by default — adds a reference download.

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

Attach the latest annual-return financial breakdown — income by source, expenditure, assets, reserves, funds and employee count. (Headline latest income & expenditure are always included.) Off by default.

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

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

## Actor input object example

```json
{
  "charityNumbers": [
    "220949",
    "1089464"
  ],
  "status": "registered",
  "onlyWithEmail": false,
  "includeTrustees": 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": "",
    "charityNumbers": [
        "220949",
        "1089464"
    ],
    "location": "",
    "includeTrustees": true,
    "includeFinancials": true,
    "maxResults": 1000
};

// Run the Actor and wait for it to finish
const run = await client.actor("foxlabs/uk-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": "",
    "charityNumbers": [
        "220949",
        "1089464",
    ],
    "location": "",
    "includeTrustees": True,
    "includeFinancials": True,
    "maxResults": 1000,
}

# Run the Actor and wait for it to finish
run = client.actor("foxlabs/uk-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": "",
  "charityNumbers": [
    "220949",
    "1089464"
  ],
  "location": "",
  "includeTrustees": true,
  "includeFinancials": true,
  "maxResults": 1000
}' |
apify call foxlabs/uk-charity-data --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/acts/tPVP2BL6HMFgcbYxW/builds/ptXo68SIK7oWMIIYS/openapi.json
