# UK Charity Register - England, Wales, Scotland & NI (`j0401/uk-charity-register`) Actor

All three UK charity registers in one dataset (429,806 rows, OGL v3): England & Wales (Charity Commission, with latest annual-return financials joined), Scotland (OSCR) and Northern Ireland (CCNI). Name, number, status, type, address, purposes, income and expenditure. Search, look up or aggregate.

- **URL**: https://apify.com/j0401/uk-charity-register.md
- **Developed by:** [Wenhao Yang](https://apify.com/j0401) (community)
- **Stats:** 3 total users, 2 monthly users, 37.5% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.03 / 1,000 uk charity records

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

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

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
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.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

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

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

## UK Charity Register - England, Wales, Scotland & Northern Ireland

All three official UK charity registers in one dataset, from the Charity
Commission for England and Wales, the Office of the Scottish Charity Regulator
(OSCR) and the Charity Commission for Northern Ireland:

**429,806 registrations** as of **19 October 2026** -
**396,463** England & Wales (**356,260** distinct registered charity numbers -
linked charities produce extra rows), **24,960** Scotland, **8,383** Northern
Ireland.

Every record carries the charity number, name, registration status and dates,
legal form, contact address and postcode, purposes/activities, and the latest
reported income and expenditure. For **22,697** England & Wales organisations
the latest annual return is joined in full: income breakdown (donations,
charitable activities, trading, investments), expenditure breakdown, funds
(endowment / restricted / unrestricted), assets, cash and employee count.

### Low cost

**From $0.00005 per record, down to $0.00003 at Gold.** Pay only for the
records you receive - all three registers stay searchable, you are never
billed for the scan behind it.

### What you get per charity

| field group | fields |
|---|---|
| identity | `corpus`, `charityNumber`, `linkedCharityNumber`, `organisationNumber`, `charityName`, `knownAs` |
| status | `status` (raw register value), `registrationStatus` (`Registered` / `Removed`), `registrationDate`, `removalDate`, `reportingStatus` |
| legal | `charityType`, `companyNumber` |
| contact | `address`, `town`, `postcode`, `mainLocation`, `website`, `email`, `phone` |
| purpose | `purposes`, `activities`, `beneficiaries` |
| money | `financialYearEnd`, `income`, `expenditure`, `incomeDonations`, `incomeCharitableActivities`, `incomeOtherTrading`, `incomeInvestments`, `incomeOther`, `expenditureRaisingFunds`, `expenditureCharitable`, `expenditureOther`, `expenditureGovernance`, `fundsEndowment`, `fundsUnrestricted`, `fundsRestricted`, `fundsTotal`, `assetsFixed`, `assetsTotal`, `assetsCash`, `employees`, `volunteers` |
| provenance | `sourceUrl`, `refreshedDate` |

`volunteers` is kept as published: OSCR publishes bands such as `"1-50 volunteers"`, CCNI publishes a count. `employees` is a count in all three registers.

### Search it

- **Name** - `name="CANCER"` (1,311 charities across the three registers:
  1,205 England & Wales, 81 Scotland, 25 Northern Ireland).
- **Exact number** - `charityNumber="200027"` (England & Wales),
  `"SC000001"` (Scotland), `"100002"` (Northern Ireland).
- **Status** - `status="Registered"` (216,014) or `"Removed"` (213,792).
- **Type** - `type="CIO"` (44,606), `"Charitable company"`, `"Trust"`,
  `"Unincorporated association"`, `"Other"`.
- **Where** - `postcode="SW1"` (2,320 charities).
- **How big** - `incomeMin` / `incomeMax` in GBP:
  `incomeMin=10000000` finds the 2,529 charities reporting 10m+.
- **When** - `registeredFrom` / `registeredTo` (YYYY-MM-DD).

### Example inputs

**Charities by name** - the donor/partner screen.

```json
{ "name": "CANCER", "corpus": "england-wales", "maxResults": 20 }
```

**One charity number, in full** - Scotland.

```json
{ "charityNumber": "SC000001" }
```

**Large charities** - latest reported income of 10m or more.

```json
{ "incomeMin": 10000000, "corpus": "england-wales", "maxResults": 25 }
```

**Removed CIOs** - the England & Wales deregistration screen.

```json
{ "status": "Removed", "type": "CIO", "maxResults": 25 }
```

**Counts by register** - `mode=aggregate`.

```json
{ "mode": "aggregate", "groupBy": "corpus" }
```

**Income distribution** - `groupBy=incomeBand`.

```json
{ "mode": "aggregate", "groupBy": "incomeBand" }
```

### Or roll it up

`mode=aggregate` returns one count row per group - **corpus**, **status**,
**type**, **registrationYear** or **incomeBand**. The default (empty) run
answers the whole-register summary from a small precomputed record.

Income bands as of this build: none **176,969** / under 10k **99,188** /
10k-100k **90,342** / 100k-500k **42,082** / 500k-1m **8,260** /
1m-10m **10,436** / 10m+ **2,529**.

### Example output

England & Wales, with the latest annual-return financials joined:

```json
{
 "corpus": "england-wales",
 "charityNumber": "213252",
 "linkedCharityNumber": "0",
 "organisationNumber": "213252",
 "charityName": "THE CORPORATION OF THE CHURCH HOUSE",
 "status": "Registered",
 "registrationStatus": "Registered",
 "reportingStatus": "Submission Received",
 "registrationDate": "1963-01-23",
 "charityType": "Other",
 "address": "CORPORATION OF THE CHURCH HOUSE, 27 GREAT SMITH STREET, LONDON",
 "postcode": "SW1P 3AZ",
 "website": "www.churchhouse.org.uk",
 "email": "info@churchofengland.org",
 "purposes": "To own and maintain Church House for the use of the National Institutions of the Church of England.",
 "financialYearEnd": "2025-12-31",
 "income": "8682737",
 "expenditure": "9540807",
 "incomeCharitableActivities": "2720780",
 "incomeOtherTrading": "5878569",
 "fundsTotal": "22720997",
 "assetsTotal": "22720997",
 "assetsCash": "1054968",
 "employees": "35",
 "refreshedDate": "2026-10-18"
}
```

### Notes on the data, from the sources

- **One row = one register entry, not always one charity.** England & Wales
  records include linked/subsidiary charities (`linkedCharityNumber`); 396,463
  rows map to 356,260 distinct registered charity numbers.
- **Status is normalised.** England & Wales publishes `Registered` / `Removed`;
  OSCR publishes `Active` / `Not Submitted` / `Not Monitored`; Northern Ireland
  publishes an annual-return status such as `Received: on time` or `Overdue:
  991 days`, with `Removed` marking deregistration. `registrationStatus`
  reduces these to `Registered` / `Removed`; `status` keeps the raw value.
  Northern Ireland removals: 1,386.
- **Financials are the latest published figures, not audited accounts.**
  Income is reported on 253,602 of the 396,463 England & Wales rows (64% -
  most removed charities never filed), 23,811 of 24,960 Scottish rows and all
  8,383 Northern Ireland rows. The detailed breakdown is available for the
  22,697 organisations with an annual-return Part B; elsewhere those fields are
  blank.
- **Daily refresh.** All three registers republish daily; every record carries
  `refreshedDate`.
- **Organisational data.** Trustee names are not published in these register
  files and are not output.
- **Licence.** Open Government Licence v3 - commercial reuse is expressly
  permitted, with attribution to the Charity Commission, OSCR and CCNI.

Data sources: `ccewuksprdoneregsadata1.blob.core.windows.net` (Charity
Commission for England and Wales), `oscr.org.uk` (OSCR),
`charitycommissionni.org.uk` (CCNI).

# Actor input Schema

## `mode` (type: `string`):

search = filter the registers. lookup = one exact charity number in full. aggregate = one row per group. Leave blank to auto-route: filters -> search, a bare charityNumber -> lookup, no filters -> aggregate.

## `corpus` (type: `string`):

Which register to search. Blank = all three.

## `charityNumber` (type: `string`):

Exact registered charity number: England & Wales e.g. "200027", Scotland e.g. "SC000001", Northern Ireland e.g. "100002".

## `name` (type: `string`):

Name substring, case-insensitive (e.g. "CANCER" or "NHS").

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

Registered (on the register) or Removed (no longer registered). Blank = both.

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

Exact type/legal form, e.g. "CIO", "Charitable company", "Trust", "Unincorporated association", "Other".

## `companyNumber` (type: `string`):

Exact Companies House company number where the charity is also a company (e.g. "01759471").

## `postcode` (type: `string`):

Registered-address postcode prefix (must contain at least one digit), e.g. "SW1" or "EH47".

## `registeredFrom` (type: `string`):

Earliest registration date (YYYY-MM-DD), inclusive.

## `registeredTo` (type: `string`):

Latest registration date (YYYY-MM-DD), inclusive.

## `incomeMin` (type: `number`):

Minimum latest reported income in GBP, e.g. 1000000. Charities with no reported income are excluded by this filter.

## `incomeMax` (type: `number`):

Maximum latest reported income in GBP.

## `aggregate` (type: `boolean`):

When on, returns one summary record per group with count, instead of individual charities.

## `groupBy` (type: `string`):

corpus -> register; status -> Registered vs Removed; type -> legal form; registrationYear -> registrations by year; incomeBand -> latest income band. Blank defaults to corpus.

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

Cap the number of search records pushed (0 = the default ceiling of 50, maximum 5000). Aggregate returns every group.

## Actor input object example

```json
{
  "aggregate": false,
  "maxResults": 50
}
```

# Actor output Schema

## `recordsUrl` (type: `string`):

UK charity records or aggregate rows - as JSON

## `datasetUrl` (type: `string`):

No description

## `runUrl` (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 = {};

// Run the Actor and wait for it to finish
const run = await client.actor("j0401/uk-charity-register").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 = {}

# Run the Actor and wait for it to finish
run = client.actor("j0401/uk-charity-register").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print(f"💾 Check your data here: https://console.apify.com/storage/datasets/{run.default_dataset_id}")
for item in client.dataset(run.default_dataset_id).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{}' |
apify call j0401/uk-charity-register --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,j0401/uk-charity-register"
        }
    }
}
```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

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