# UK Charity Commission Register Scraper (`crawlerbros/uk-charity-commission-register-scraper`) Actor

Search the official Register of Charities for England and Wales. Filter by name, number, income, expenditure, classification, or area of operation, or fetch a full charity record (trustees, financial history, governance, accounts) by charity number.

- **URL**: https://apify.com/crawlerbros/uk-charity-commission-register-scraper.md
- **Developed by:** [Crawler Bros](https://apify.com/crawlerbros) (community)
- **Categories:** Automation, Developer tools, Integrations
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $3.00 / 1,000 results

This Actor is paid per event and usage. You are charged both the fixed price for specific events and for Apify platform usage.
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 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

## UK Charity Commission Register Scraper

Search the official **Register of Charities for England and Wales**, published by the Charity Commission at register-of-charities.charitycommission.gov.uk. Find charities by name, charity number, objects/activities or classification, filter by income, expenditure, employee-benefit bands, area of operation and more, or fetch a complete charity record — trustees, financial history, governance details, filed accounts and contact information — by exact charity number.

This is the same public register used to verify whether an organisation is a registered charity, check its latest accounts and trustees, or research charities working in a particular cause area or region. No login, no cookies, no paid proxy required.

### What this actor does

- **Two modes:**
  - `search` — free-text keyword search (charity name, charity number, objects/activities, classifications, area of operation) with extensive filters
  - `byCharityNumber` — exact lookup by registered charity number, returning the full public record
- **Rich filtering on `search`:** registration status (registered/removed, with linked-charity and registration/removal date ranges), income and expenditure range, overdue-filings flag, employee-benefit bands, charitable classification (what the charity does / who it helps / how it helps), grant-making flag, and area of operation — nationally, by English local authority, London borough, Welsh local authority, or overseas country (200+ countries plus Scotland and Northern Ireland)
- **Full charity record on `byCharityNumber`:** overview & activities, income/expenditure, trustees, registration history, governing document and charitable objects, financial history by year, filed annual returns/accounts (with direct PDF download links), and contact details
- **Global area-of-operation coverage** — filter by any of ~200 countries a charity operates in, not just UK-based charities
- **No login, no cookies, no paid proxy** — reads the Charity Commission's public register pages directly
- **Empty fields are omitted** — every record only contains data the register actually published for that charity

### Output: per-charity summary (mode = `search`)

| Field | Description |
|---|---|
| `charityNumber` | Registered charity number |
| `charityName` | Registered name |
| `organisationNumber` | Internal register ID used to build the charity's detail-page URL (differs from the charity number for some linked/group charities) |
| `registrationStatus` | `Registered` or `Removed` |
| `income` | Latest annual income in GBP, when published |
| `reportingStatus` | Latest filing status, e.g. `Received: On time` or `Charity reporting is overdue by N days` |
| `charityUrl` | Link to the charity's page on the official register |
| `recordType` | Always `charitySummary` |
| `scrapedAt` | UTC timestamp of when the record was scraped |

### Output: full charity record (mode = `byCharityNumber`)

| Field | Description |
|---|---|
| `charityName`, `charityNumber`, `organisationNumber` | Identity |
| `reportingStatusBanner` | Headline status, e.g. `Charity reporting is up to date (on time)` or `Removed charity` |
| `activitiesDescription` | The charity's own description of its activities |
| `financialYearEnd`, `totalIncome`, `totalExpenditure` | Latest filed financial year |
| `employeeCount`, `trusteeCount`, `volunteerCount` | Headcounts, when published |
| `employeeBenefitsOver60k` | Note on employees with total benefits over £60,000 |
| `fundraisingInfo`, `tradingInfo`, `trusteePaymentsInfo` | Fundraising, trading-subsidiary and trustee-remuneration disclosures |
| `whatCharityDoes[]`, `whoCharityHelps[]`, `howCharityHelps[]` | Classification of purpose, beneficiaries and method |
| `whereCharityOperates[]` | Areas of operation, e.g. `Throughout England And Wales`, individual countries |
| `registrationHistory[]` | Registration/removal events with dates |
| `organisationType` | e.g. `Trust`, `CIO`, `Company` |
| `otherNames[]` | Working names and previous names |
| `giftAidStatus` | HMRC gift-aid recognition status |
| `otherRegulators` | Other regulators overseeing the charity, when published |
| `policies[]` | Governance policies the charity has declared, e.g. safeguarding, conflicts of interest |
| `landAndProperty` | Land/property ownership disclosure |
| `trustees[]` | `name`, `role`, `dateOfAppointment`, `otherTrusteeships[]` |
| `financialHistory[]` | Per financial year: `periodEndDate`, `totalGrossIncome`, `totalExpenditure`, `incomeFromGovernmentContracts`, `incomeFromGovernmentGrants` |
| `assetsAndLiabilities[]` | Per financial year (larger/accruals-accounting charities only): `periodEndDate`, `ownUseAssets`, `longTermInvestments`, `otherAssets`, `pensionSchemeAssetOrLiability`, `totalLiabilities` |
| `filingHistory[]` | Per filing: `title`, `reportingYear`, `dateReceived`, `receivedStatus`, `documentUrl` (direct PDF link when filed) |
| `governingDocumentText`, `charitableObjects`, `areaOfBenefit` | Governing document summary |
| `linkedCharities[]` | Charities registered under the same umbrella/appeal (e.g. a corporate charity's constituent trusts): `organisationNumber`, `name`, `url` (when published) |
| `address`, `phone`, `email`, `website` | Published contact details |
| `charityUrl` | Link to the charity's page on the official register |
| `recordType` | Always `charityDetail` |
| `scrapedAt` | UTC timestamp of when the record was scraped |

Field availability depends on what the charity has on file — for example, removed charities typically have no trustees, contact information, or current-year financial data, and the actor never fabricates missing fields.

### Input

| Field | Type | Default | Description |
|---|---|---|---|
| `mode` | select | `search` | `search` / `byCharityNumber` |
| `keywords` | string | `cancer research` | Charity name, number, or objects/activities/classification/area-of-operation text (mode=search) |
| `searchIn` | array (select) | all 5 fields | Restrict which fields `keywords` is matched against: charity number, charity name, where the charity operates, classifications, objects and activities |
| `charityNumbers` | array | `["247558"]` | Exact charity numbers to fetch full records for (mode=byCharityNumber). Capped at the first 50 per run |
| `registrationStatus` | array (select) | `registered` | `registered` and/or `removed` |
| `includeLinkedCharities` | boolean | `false` | Also include charities linked to a matching charity |
| `registrationDateFrom` / `registrationDateTo` | string | – | Registration date range, `YYYY-MM-DD` |
| `removedDateFrom` / `removedDateTo` | string | – | Removal date range, `YYYY-MM-DD` (with `registrationStatus` including `removed`) |
| `incomeMin` / `incomeMax` | integer | – | Latest annual income range in GBP |
| `expenditureMin` / `expenditureMax` | integer | – | Latest annual expenditure range in GBP |
| `overdueDocumentsOnly` | boolean | `false` | Only charities with overdue filings |
| `employeeBenefitBands` | array (select) | – | Bands of employee total benefits, e.g. `£150k to £200k` up to `Over £500k` |
| `grantMakingOnly` | boolean | `false` | Only charities that make grants to individuals or organisations |
| `whatCharityDoes` | array (select) | – | Classification of charitable purpose (16 options, e.g. Education/training, Disability, Overseas Aid) |
| `whoCharityHelps` | array (select) | – | Classification of beneficiary group (7 options) |
| `howCharityHelps` | array (select) | – | Classification of delivery method (10 options) |
| `areaOfOperationNational` | array (select) | – | `Throughout England And Wales` / `Throughout England` / `Throughout London` / `Throughout Wales` |
| `localAuthorityEngland` | array (select) | – | English local authority (~119, excluding London boroughs) |
| `londonBorough` | array (select) | – | London borough (~33) |
| `localAuthorityWales` | array (select) | – | Welsh local authority (~22) |
| `overseasCountry` | array (select) | – | Country the charity operates in, including Scotland and Northern Ireland (~275) |
| `sortBy` | select | `relevance` | Sort results by `relevance` (default), `charityNumber`, `charityName`, `registrationStatus`, `income`, or `reportingStatus` |
| `sortDirection` | select | `asc` | `asc` / `desc` (ignored when `sortBy` is `relevance`) |
| `maxItems` | integer | `20` | Hard cap on emitted records (1–2000, mode=search) |

#### Example: keyword search with income and classification filters

```json
{
  "mode": "search",
  "keywords": "cancer research",
  "registrationStatus": ["registered"],
  "incomeMin": 100000,
  "whatCharityDoes": ["103:The Advancement Of Health Or Saving Of Lives"],
  "maxItems": 50
}
```

#### Example: charities operating in a specific overseas country

```json
{
  "mode": "search",
  "keywords": "education",
  "overseasCountry": ["Kenya", "Uganda"],
  "maxItems": 30
}
```

#### Example: charities working in a London borough with overdue filings

```json
{
  "mode": "search",
  "keywords": "community",
  "londonBorough": ["Camden", "Hackney"],
  "overdueDocumentsOnly": true,
  "maxItems": 20
}
```

#### Example: full record by charity number

```json
{
  "mode": "byCharityNumber",
  "charityNumbers": ["247558", "1196005"]
}
```

### Use cases

- **Grant-making & philanthropy research** — find registered charities in a cause area, income band, or region before due diligence
- **Due diligence & compliance** — confirm an organisation is a genuinely registered (or check why it was removed), and review its trustees and overdue-filing status
- **Nonprofit sector analysis** — analyse income/expenditure trends, classification distribution, or geographic reach across the sector
- **Journalism & research** — trace a charity's trustees, financial history, and governance disclosures
- **Fundraising prospecting** — identify grant-making charities active in a specific cause area or beneficiary group
- **Data enrichment** — attach official register data (income, trustees, classifications) to an existing charity database

### FAQ

**What is the Register of Charities?** The official public record of every charity registered with the Charity Commission for England and Wales, including charities that have since been removed from the register.

**Does this cover Scottish or Northern Irish charities?** No — this register only covers charities registered in **England and Wales**. Scotland and Northern Ireland run separate charity regulators (OSCR and the Charity Commission for Northern Ireland). The `overseasCountry` filter's `Scotland`/`Northern Ireland` options describe charities registered in England and Wales that report operating there, not charities registered with those regulators.

**What's the difference between `charityNumber` and `organisationNumber`?** The charity number is the number the public knows a charity by. The organisation number is the register's internal ID for a specific entity and is used to build the charity's detail-page URL — for most standalone charities the two are the same, but for some linked or grouped charities they differ. The actor resolves this automatically; you only ever need to supply the charity number.

**Why do some search terms return no results?** The register's own search index treats a handful of extremely generic single words used in most charity names (e.g. `trust`, `charity` on their own) as too broad to match meaningfully. Use a more specific phrase, or search by charity number/name instead.

**Why are some fields missing from a charity record?** The actor only includes fields the register has actually published for that charity. Removed charities, very new charities, or charities exempt from certain disclosures (e.g. no employees over the benefit threshold) will have fewer fields — this is real data, never a placeholder.

**How current is this data?** The register reflects the Charity Commission's live public data at the time the actor runs — there's no caching delay.

**Can I download a charity's filed accounts?** Yes — `mode=byCharityNumber` returns a `documentUrl` PDF link for each filed accounts/annual-return submission, when the charity has uploaded one.

**Is a proxy or login required?** No. The register's search and charity-detail pages are fully public; the actor doesn't use cookies, an API key, or a paid proxy.

**Is this affiliated with the Charity Commission?** No — this is an independent, third-party actor that reads the Charity Commission's public register pages. It is not operated by or affiliated with the Charity Commission for England and Wales.

# Actor input Schema

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

What to fetch.

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

Charity name, charity number, or words to find in objects, activities, classifications or area of operation (mode=search).

## `searchIn` (type: `array`):

Which fields the keywords are matched against (mode=search). Restricting this narrows results considerably.

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

Exact registered charity numbers to fetch full records for, e.g. `247558`. Capped at the first 50 numbers per run.

## `registrationStatus` (type: `array`):

Registered and/or removed charities (mode=search). Defaults to registered charities only, matching the register's own default.

## `includeLinkedCharities` (type: `boolean`):

Also include charities linked to (grouped with) a matching charity (mode=search).

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

Only charities registered on/after this date (mode=search). Format: YYYY-MM-DD, e.g. `2020-01-01`.

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

Only charities registered on/before this date (mode=search). Format: YYYY-MM-DD, e.g. `2021-12-31`.

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

Only charities removed on/after this date (mode=search, registrationStatus includes removed). Format: YYYY-MM-DD.

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

Only charities removed on/before this date (mode=search, registrationStatus includes removed). Format: YYYY-MM-DD.

## `incomeMin` (type: `integer`):

Only charities with latest annual income greater than or equal to this whole-pound amount (mode=search).

## `incomeMax` (type: `integer`):

Only charities with latest annual income less than or equal to this whole-pound amount (mode=search).

## `expenditureMin` (type: `integer`):

Only charities with latest annual expenditure greater than or equal to this whole-pound amount (mode=search).

## `expenditureMax` (type: `integer`):

Only charities with latest annual expenditure less than or equal to this whole-pound amount (mode=search).

## `overdueDocumentsOnly` (type: `boolean`):

Only charities with latest annual return/accounts overdue (mode=search).

## `employeeBenefitBands` (type: `array`):

Only charities with at least one employee whose total benefits fall in one of these bands (mode=search).

## `grantMakingOnly` (type: `boolean`):

Only charities that make grants to individuals or organisations (mode=search).

## `whatCharityDoes` (type: `array`):

Filter by classification of charitable purpose (mode=search).

## `whoCharityHelps` (type: `array`):

Filter by classification of beneficiary group (mode=search).

## `howCharityHelps` (type: `array`):

Filter by classification of the method used to deliver charitable purposes (mode=search).

## `areaOfOperationNational` (type: `array`):

Filter to charities working nationally in England and/or Wales (mode=search).

## `localAuthorityEngland` (type: `array`):

Filter to charities working in specific English local authorities (mode=search). Excludes London boroughs — use `londonBorough` for those.

## `londonBorough` (type: `array`):

Filter to charities working in specific London boroughs (mode=search).

## `localAuthorityWales` (type: `array`):

Filter to charities working in specific Welsh local authorities (mode=search).

## `overseasCountry` (type: `array`):

Filter to charities working in specific countries outside England and Wales, including Scotland and Northern Ireland (mode=search).

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

Column to sort search results by (mode=search). Defaults to the register's own relevance ranking.

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

Ascending or descending order (mode=search). Ignored when `sortBy` is `relevance`.

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

Hard cap on emitted records (mode=search).

## Actor input object example

```json
{
  "mode": "search",
  "keywords": "cancer research",
  "searchIn": [
    "charityNumber",
    "charityName",
    "whereTheCharityOperates",
    "classifications",
    "objectsAndActivities"
  ],
  "charityNumbers": [
    "247558"
  ],
  "registrationStatus": [
    "registered"
  ],
  "includeLinkedCharities": false,
  "overdueDocumentsOnly": false,
  "employeeBenefitBands": [],
  "grantMakingOnly": false,
  "whatCharityDoes": [],
  "whoCharityHelps": [],
  "howCharityHelps": [],
  "areaOfOperationNational": [],
  "localAuthorityEngland": [],
  "londonBorough": [],
  "localAuthorityWales": [],
  "overseasCountry": [],
  "sortBy": "relevance",
  "sortDirection": "asc",
  "maxItems": 20
}
```

# Actor output Schema

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

Dataset containing all scraped charity records.

# 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 = {
    "mode": "search",
    "keywords": "cancer research",
    "searchIn": [
        "charityNumber",
        "charityName",
        "whereTheCharityOperates",
        "classifications",
        "objectsAndActivities"
    ],
    "charityNumbers": [
        "247558"
    ],
    "registrationStatus": [
        "registered"
    ],
    "includeLinkedCharities": false,
    "overdueDocumentsOnly": false,
    "employeeBenefitBands": [],
    "grantMakingOnly": false,
    "whatCharityDoes": [],
    "whoCharityHelps": [],
    "howCharityHelps": [],
    "areaOfOperationNational": [],
    "localAuthorityEngland": [],
    "londonBorough": [],
    "localAuthorityWales": [],
    "overseasCountry": [],
    "sortBy": "relevance",
    "sortDirection": "asc",
    "maxItems": 20
};

// Run the Actor and wait for it to finish
const run = await client.actor("crawlerbros/uk-charity-commission-register-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 = {
    "mode": "search",
    "keywords": "cancer research",
    "searchIn": [
        "charityNumber",
        "charityName",
        "whereTheCharityOperates",
        "classifications",
        "objectsAndActivities",
    ],
    "charityNumbers": ["247558"],
    "registrationStatus": ["registered"],
    "includeLinkedCharities": False,
    "overdueDocumentsOnly": False,
    "employeeBenefitBands": [],
    "grantMakingOnly": False,
    "whatCharityDoes": [],
    "whoCharityHelps": [],
    "howCharityHelps": [],
    "areaOfOperationNational": [],
    "localAuthorityEngland": [],
    "londonBorough": [],
    "localAuthorityWales": [],
    "overseasCountry": [],
    "sortBy": "relevance",
    "sortDirection": "asc",
    "maxItems": 20,
}

# Run the Actor and wait for it to finish
run = client.actor("crawlerbros/uk-charity-commission-register-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 '{
  "mode": "search",
  "keywords": "cancer research",
  "searchIn": [
    "charityNumber",
    "charityName",
    "whereTheCharityOperates",
    "classifications",
    "objectsAndActivities"
  ],
  "charityNumbers": [
    "247558"
  ],
  "registrationStatus": [
    "registered"
  ],
  "includeLinkedCharities": false,
  "overdueDocumentsOnly": false,
  "employeeBenefitBands": [],
  "grantMakingOnly": false,
  "whatCharityDoes": [],
  "whoCharityHelps": [],
  "howCharityHelps": [],
  "areaOfOperationNational": [],
  "localAuthorityEngland": [],
  "londonBorough": [],
  "localAuthorityWales": [],
  "overseasCountry": [],
  "sortBy": "relevance",
  "sortDirection": "asc",
  "maxItems": 20
}' |
apify call crawlerbros/uk-charity-commission-register-scraper --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

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