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

Search and export public Charity Commission register profiles for England and Wales, including status, activities, trustees, financial history, accounts and annual-return filing details.

- **URL**: https://apify.com/automation-lab/uk-charity-commission-register-scraper.md
- **Developed by:** [Stas Persiianenko](https://apify.com/automation-lab) (community)
- **Categories:** Business
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $1.23 / 1,000 charity profile extracteds

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?

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 **UK Charity Commission register** for England and Wales and export public charity profiles for due diligence, grant-making, nonprofit research, and recurring compliance checks.

The Actor accepts charity names, registered charity numbers, and public register profile URLs. It returns normalized charity identity, registration status, activities, trustees, financial history, accounts and annual-return filing details.

### What does this Actor do?

UK Charity Commission Register Scraper automates the public workflow at `register-of-charities.charitycommission.gov.uk`.

It can:

- search charities by a name or keyword;
- resolve registered charity numbers;
- extract one known public profile URL;
- collect current registration and reporting status;
- collect activity descriptions;
- collect trustee names, roles, and appointment dates;
- collect five-year income and expenditure figures where published;
- collect accounts and annual-return filing dates, timeliness, and download links;
- stop at a user-defined record limit;
- produce JSON, CSV, Excel, XML, RSS, or another Apify dataset export format.

No Charity Commission account, API key, login, browser, or user-supplied proxy is required.

### Why use it?

The Actor turns the Charity Commission's public server-rendered register pages into consistent, typed records without requiring a regulator login or API credentials. It combines identity, status, activities, trustees, five-year finances, and filing details in one export, preserving source URLs so teams can verify important findings.

This makes repeated due-diligence work easier to automate: use the same input for a one-off review, a scheduled portfolio check, or downstream spreadsheet and data-warehouse enrichment instead of manually opening and copying each public profile.

### Who is it for?

#### Grant makers and foundations

Verify a charity before awarding a grant. Review its current registration, activities, trustees, finances, and recent filing record from one structured dataset.

#### Procurement and compliance teams

Run repeatable checks on nonprofit suppliers, partners, and beneficiaries. Schedule the same input and compare saved datasets over time.

#### Journalists and researchers

Build a reproducible source list, inspect trustee networks, and compare income or expenditure across reporting periods.

#### Nonprofit data teams

Enrich a CRM or directory with authoritative public register identifiers and source URLs.

#### Developers

Call one Actor API instead of maintaining session-aware form submission, pagination, HTML parsing, retries, and output normalization.

### What data can I extract?

| Field | Meaning |
| --- | --- |
| `charityNumber` | Registered charity number displayed by the Commission |
| `organisationNumber` | Internal organisation identifier used in the profile URL |
| `name` | Registered charity name |
| `status` | Current status shown by search or inferred from registration history |
| `latestIncome` | Latest displayed total gross income in GBP |
| `reportingStatus` | Filing timeliness shown in search results |
| `activities` | Public description of how the charity spends its money |
| `trustees` | Trustee name, role, and appointment date when published |
| `financialHistory` | Reporting period end, gross income, and expenditure |
| `filings` | Accounts and annual-return title, year, receipt date, status, and download URL |
| `sourceUrl` | Direct full public profile URL |
| `searchQuery` | Query that discovered the charity, when applicable |
| `scrapedAt` | ISO timestamp for collection provenance |

Missing upstream values are omitted rather than invented.

### How to search the Charity Commission register

1. Open the Actor input page.
2. Add one or more values to **Charity name searches** or **Charity numbers**.
3. Leave **Include details** enabled for trustees, finances, and filings.
4. Set **Maximum charities** to your required dataset size.
5. Click **Start**.
6. Open the default dataset and export it in your preferred format.

A small first run is useful for checking query breadth before scheduling a larger recurring job.

### Input parameters

#### `queries`

An array of charity names or keywords.

```json
{
  "queries": ["oxfam"],
  "includeDetails": true,
  "maxItems": 10
}
```

#### `charityNumbers`

An array of registered charity numbers. Each number is resolved through the public register, which also handles profiles whose organisation number differs from their displayed charity number.

```json
{
  "charityNumbers": ["202918", "1081247", "1160384"],
  "includeDetails": true,
  "maxItems": 3
}
```

#### `startUrls`

An array of public Charity Commission `charity-details` URLs.

```json
{
  "startUrls": [
    { "url": "https://register-of-charities.charitycommission.gov.uk/en/charity-search/-/charity-details/202918" }
  ],
  "maxItems": 1
}
```

URLs on unrelated domains or non-profile paths fail validation.

#### `includeDetails`

Defaults to `true`.

Set it to `false` for a faster search-results export containing identity, status, latest income, reporting status, and source URL. Keep it enabled for due diligence profiles.

#### `maxItems`

The maximum number of unique charities saved across all inputs.

- minimum: `1`
- default: `25`
- maximum: `500`

The Actor deduplicates results by Charity Commission organisation number.

### Output example

A current profile record has this shape:

```json
{
  "charityNumber": "202918",
  "organisationNumber": "202918",
  "name": "OXFAM",
  "status": "Registered",
  "latestIncome": 339366903,
  "reportingStatus": "Received: On time",
  "activities": "Oxfam's objects are to prevent and relieve poverty...",
  "trustees": [
    {
      "name": "Andrew David Tivey",
      "role": "Trustee",
      "appointedAt": "27 November 2025"
    }
  ],
  "financialHistory": [
    {
      "periodEnd": "31/03/2025",
      "income": 339370000,
      "expenditure": 362640000
    }
  ],
  "filings": [
    {
      "title": "Annual return",
      "reportingYear": "31 March 2025",
      "receivedAt": "18 December 2025",
      "status": "On time"
    }
  ],
  "sourceUrl": "https://register-of-charities.charitycommission.gov.uk/en/charity-search/-/charity-details/202918/full-print?...",
  "searchQuery": "oxfam",
  "scrapedAt": "2026-08-25T14:20:00.000Z"
}
```

Financial values are normalized to GBP numbers. For example, `£344.30m` becomes `344300000`.

### Recurring charity due diligence workflow

Use an Apify Task for a stable list of charity numbers.

1. Save the Actor input as a Task.
2. Add a weekly or monthly schedule.
3. Send dataset items to a webhook, Make, Zapier, Google Sheets, or your warehouse.
4. Compare registration, trustee, income, expenditure, and filing fields with the previous run.
5. Route changes to a human reviewer.

The Actor exports current public snapshots. It does not itself send alerts or calculate changes between runs.

### How much does it cost to extract UK charity profiles?

The Actor uses pay-per-event pricing:

- one `start` event per run;
- one `item` event for each charity record saved;
- trustees, financial periods, and filings inside a charity record have no separate charge.

The start event is $0.00005. At the BRONZE tier, each saved charity is $0.002048.

Example BRONZE charges before platform plan allowances:

| Saved charities | Start | Items | Total |
| ---: | ---: | ---: | ---: |
| 1 | $0.00005 | $0.002048 | $0.002098 |
| 25 | $0.00005 | $0.0512 | $0.05125 |
| 100 | $0.00005 | $0.2048 | $0.20485 |

Higher-volume subscription tiers receive lower per-item prices. Runtime compute is included in Apify platform usage according to your plan.

### API usage with cURL

Start a synchronous run and return dataset items:

```bash
curl -X POST \
  "https://api.apify.com/v2/acts/automation-lab~uk-charity-commission-register-scraper/run-sync-get-dataset-items?token=$APIFY_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "charityNumbers": ["202918"],
    "includeDetails": true,
    "maxItems": 1
  }'
```

Keep the token in an environment variable or secret manager.

### API usage with JavaScript

```javascript
import { ApifyClient } from 'apify-client';

const client = new ApifyClient({ token: process.env.APIFY_TOKEN });
const run = await client.actor('automation-lab/uk-charity-commission-register-scraper').call({
  queries: ['oxfam'],
  includeDetails: true,
  maxItems: 10,
});

const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items);
```

### API usage with Python

```python
import os
from apify_client import ApifyClient

client = ApifyClient(os.environ['APIFY_TOKEN'])
run = client.actor('automation-lab/uk-charity-commission-register-scraper').call(run_input={
    'charityNumbers': ['202918', '1081247'],
    'includeDetails': True,
    'maxItems': 2,
})

items = client.dataset(run['defaultDatasetId']).list_items().items
print(items)
```

### Use with Apify MCP

Add the Actor to Claude Code:

```bash
claude mcp add --transport http apify \
  "https://mcp.apify.com?tools=automation-lab/uk-charity-commission-register-scraper"
```

#### Claude Desktop setup

Use this JSON in Claude Desktop's MCP configuration.

#### Cursor setup

Add the same remote MCP server URL in Cursor's MCP settings.

#### VS Code setup

Add the same server under the MCP configuration used by your VS Code extension.

```json
{
  "mcpServers": {
    "apify": {
      "url": "https://mcp.apify.com?tools=automation-lab/uk-charity-commission-register-scraper"
    }
  }
}
```

Example prompts:

- “Search the UK Charity Commission register for charities matching `community foundation` and return 20 results.”
- “Extract trustees, five-year finances, and filings for charity number 202918.”
- “Create a CSV-ready dataset for these ten charity numbers.”

### Integrations and exports

The default dataset works with:

- CSV and Microsoft Excel exports;
- JSON and XML pipelines;
- Google Sheets;
- Make and Zapier;
- webhooks;
- the Apify API client;
- cloud warehouses and custom ETL jobs.

Use `charityNumber` as the regulator-facing identifier and `organisationNumber` or `sourceUrl` for stable profile retrieval.

### Reliability and retries

The Actor uses the public SSR register rather than browser automation.

For each search it:

1. opens the search page;
2. retains the session cookie and form token;
3. submits the search query;
4. follows result pages;
5. fetches selected full-print profiles;
6. retries network, rate-limit, and temporary server errors with bounded backoff.

Malformed inputs, unsupported URLs, and permanent client errors are not retried blindly.

### Limitations

- Coverage is England and Wales, matching the public Charity Commission register used by this Actor.
- The Actor does not cover the Scottish Charity Register or Charity Commission for Northern Ireland.
- Search matching and ranking are controlled by the official register.
- Historical fields are limited to what each public profile publishes.
- Some charities do not publish every trustee, filing, or financial field.
- Public page structure or availability can change.
- `maxItems` is capped at 500 per run to keep extraction bounded and respectful.
- This is a current-snapshot extractor, not a built-in change detector or alerting service.

### Responsible use and legality

The Actor accesses public regulator pages without logging in.

Users remain responsible for:

- complying with applicable law and the source website's terms;
- establishing a lawful purpose for processing personal data such as trustee names;
- collecting only fields needed for that purpose;
- applying retention, access-control, and deletion policies;
- independently verifying decisions that affect people or organizations.

Do not treat an automated record as legal, financial, or grant-making advice.

### Troubleshooting

#### Why did my search return no charities?

Check the spelling and try a shorter distinctive name. For a known entity, use its registered charity number.

#### Why are trustee or filing fields empty?

Confirm `includeDetails` is `true`. The register may not publish that field for every charity.

#### Why was my URL rejected?

Only public `register-of-charities.charitycommission.gov.uk` URLs containing `/charity-details/` are accepted.

#### What should I do after a temporary source error?

Inspect the run log. The Actor already retries bounded temporary failures. If the register is unavailable, rerun later rather than increasing concurrency.

### FAQ

#### Does this Actor require a Charity Commission API key?

No. It uses public register search and full-print profile pages.

#### Can I search by both names and charity numbers?

Yes. Supply both arrays; results are combined and deduplicated up to `maxItems`.

#### Can I extract only quick search results?

Yes. Set `includeDetails` to `false`.

#### Are trustees charged separately?

No. The item event covers the complete saved charity record and its nested public details.

#### Can I schedule monitoring?

Yes. Save the input as an Apify Task and attach a schedule. Compare successive datasets in your downstream workflow.

#### Is this an official Charity Commission product?

No. This independent Actor extracts public information from the official register and includes source URLs for verification.

### Related Automation Lab Actors

For adjacent public-record due diligence workflows, see:

- [Australian ABN Register Scraper](https://apify.com/automation-lab/australian-abn-register-scraper)
- [Florida Sunbiz Business Search](https://apify.com/automation-lab/florida-sunbiz-business-search)
- [Domain Registration & RDAP Lookup](https://apify.com/automation-lab/domain-rdap-lookup)

These cover different registries and do not replace Charity Commission data for England and Wales.

### Changelog

See the Store changelog for shipped capabilities and future updates.

# Actor input Schema

## `queries` (type: `array`):

Names or keywords to search in the Charity Commission register, for example Oxfam or community foundation.

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

Registered charity numbers to look up. Each number is resolved through the public register search.

## `startUrls` (type: `array`):

Public register charity-details URLs to extract directly.

## `includeDetails` (type: `boolean`):

Open each full public profile and include activities, trustees, multi-year financial figures, accounts and annual-return filing details.

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

Maximum number of unique charity records saved across all searches and URLs.

## Actor input object example

```json
{
  "queries": [
    "oxfam"
  ],
  "includeDetails": true,
  "maxItems": 5
}
```

# Actor output Schema

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

Open the default dataset view containing charity identity, status, activities, trustees, financial history and filings.

# 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 = {
    "queries": [
        "oxfam"
    ],
    "includeDetails": true,
    "maxItems": 5
};

// Run the Actor and wait for it to finish
const run = await client.actor("automation-lab/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 = {
    "queries": ["oxfam"],
    "includeDetails": True,
    "maxItems": 5,
}

# Run the Actor and wait for it to finish
run = client.actor("automation-lab/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(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 '{
  "queries": [
    "oxfam"
  ],
  "includeDetails": true,
  "maxItems": 5
}' |
apify call automation-lab/uk-charity-commission-register-scraper --silent --output-dataset

```

## MCP server setup

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

```

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/3cthRWfltFm1HdxGg/builds/3XbS43dUFVNFjJzVN/openapi.json
