# UK Political Donations Scraper: Electoral Commission Data (`seaf999ield/uk-political-donations`) Actor

UK political donations and loans from the official Electoral Commission register: filter by party, donor, date and value, and monitor new donations, by RawTrader | UK Industry & Bills: https://ukindustryandbills.substack.com · X: x.com/ImRawTrader

- **URL**: https://apify.com/seaf999ield/uk-political-donations.md
- **Developed by:** [RustonRoad](https://apify.com/seaf999ield) (community)
- **Categories:** News, Business, Automation
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

$2.00 / 1,000 donation or loan records

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/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 Political Donations Scraper: Electoral Commission Data

**Search every UK political donation and loan reported to the Electoral Commission and get alerts for new ones.**

### Who it's for

- Journalists and researchers following the money in UK politics
- Campaigners and NGOs monitoring donors and parties
- Compliance and due-diligence teams checking political links

### Sample output

| recipientName | donorName | donorType | valueGbp | reportedDate |
|---|---|---|---|---|
| ThinkLabour Limited | Gary Lubner | Individual | 175000 | 2026-09-16 |
| ThinkLabour Limited | Lord David Sainsbury | Individual | 125000 | 2026-09-16 |
| ThinkLabour Limited | Gary Lubner | Individual | 50000 | 2026-09-16 |

*Real rows from a test run (shortened; the full output has more fields).*

### Price per 1,000 results

Main event: **`donation-row` at $0.002 each**, so **1,000 results = $2.00**. See the Pricing tab for the current prices.

### Input example

```json
{
  "mode": "search",
  "daysBack": 90,
  "maxResults": 100
}
```

**Who is funding UK political parties?** Search every donation and loan reported to the **Electoral Commission**: parties, MPs and candidates (regulated donees), non-party campaigners and referendum participants. Filter by **date**, **party**, **donor type**, **donor name** and **minimum value**, or run a **changes monitor** that outputs only donations published since your last run. Official public register, no login, no API key.

| Mode | What you get |
|---|---|
| 🔎 **search** | All donations (or loans) in a date range that match your filters |
| 🔔 **changes** | Only records **not seen in previous runs**. Schedule it weekly to catch each new quarterly publication and the weekly pre-poll reports at elections |

**Free weekly newsletter**, UK Industry & Bills: https://ukindustryandbills.substack.com

### What you get

- One row per donation or loan from the Electoral Commission register: recipient, recipient type, donor name and type, company number, value in GBP, donation type, accepted and reported dates, reporting period and link
- Parties, MPs and candidates (regulated donees), non-party campaigners and referendum participants
- Filters by date, party, donor type, donor name and minimum value
- A **changes** monitor that returns only records published since your last run
- Export to CSV, Excel or JSON, or via the Apify API

### Who uses it

- **Journalists and newsrooms:** the biggest new donors to each party the day the Commission publishes.
- **Transparency researchers and campaigners:** company, trust and unincorporated-association donors, repeat donors, and loans.
- **Public affairs, lobbying and due-diligence teams:** check whether a company, director or client funds a party or MP.
- **Academics and data analysts:** clean JSON/CSV/Excel exports for analysis.

### Input

| Field | Example | Notes |
|---|---|---|
| Mode | `search` | or `changes` |
| Record type | `donations` | or `loans` |
| Days back / From / To | `90` / `2026-04-01` / `2026-06-30` | Dates as YYYY-MM-DD |
| Date field | `reported` | or `accepted` (start date for loans) |
| Party / recipient contains | `["Labour","Reform UK"]` | Text match |
| Recipient types | `["pp","rd"]` | Parties, regulated donees (MPs and candidates), etc. |
| Donor types | `["Company","Trade Union"]` | As published by the Commission |
| Donor name contains | `capital` | |
| Minimum value (GBP) | `50000` | |
| Monitor name | `weekly` | changes mode |
| Max results | `100` | 0 = no limit |

**Example: company donations of £50,000+ to any party in the last 180 days**

```json
{ "mode": "search", "kind": "donations", "daysBack": 180, "entityTypes": ["pp"], "donorTypes": ["Company"], "minValue": 50000 }
```

#### Example output (real sample)

| recipientName | donorName | donorType | valueGbp | acceptedDate |
|---|---|---|---|---|
| The Rt Hon David Davis MP | Trailfinders Ltd | Company | 55000 | 2026-07-22 |
| Conservative and Unionist Party | Flowidea Limited | Company | 250000 | 2026-06-11 |
| Labour Party | Unite the Union | Trade Union | 217625 | 2026-05-01 |

### Output

```json
{
  "recordType": "donation",
  "ecRef": "C0840306",
  "recipientName": "Conservative and Unionist Party",
  "recipientType": "Political Party",
  "accountingUnit": "Central Party",
  "donorName": "Flowidea Limited",
  "donorType": "Company",
  "companyRegistrationNumber": "2463564",
  "valueGbp": 250000,
  "donationType": "Cash",
  "acceptedDate": "2026-06-11",
  "reportedDate": "2026-07-30",
  "reportingPeriod": "Q2 2026",
  "ecUrl": "https://search.electoralcommission.org.uk/English/Donations/C0840306",
  "licence": "Open Government Licence v3.0"
}
```

Individual donors are shown by name only, exactly as the Commission publishes them. Their addresses are never output.

### Pricing (pay per event)

**In plain words:** **$2 per 1,000 donation or loan records**. Pulling a full quarter of donations for every party typically costs a few dollars at most.

| Event | Price |
|---|---|
| `donation-row`: each donation or loan record returned | $0.002 |

### FAQ

**How fresh is the data?** Parties report donations quarterly, and weekly before a general election. The Commission publishes them on its political finance search, and this actor reads that live.

**Is this legal to use?** Yes. This is a statutory public register, published under the Open Government Licence v3.0. *Contains public sector information from the Electoral Commission.*

**Can I track only new donations?** Yes. Use **changes** mode on a weekly schedule. The first run is a baseline.

### Related UK data actors

- [UK Short Interest Scraper: FCA Net Short Positions Tracker](https://apify.com/seaf999ield/uk-fca-short-positions)
- [UK Companies House Scraper: New Companies & Insolvency Alerts](https://apify.com/seaf999ield/uk-companies-house-feed)
- [UK Government Tenders Scraper: Find a Tender & Contracts Finder](https://apify.com/seaf999ield/uk-public-tenders-feed)

### About RawTrader | UK Industry & Bills

RawTrader | UK Industry & Bills is a UK newsletter and open data project tracking energy bills, fuel prices, public tenders, company closures and FCA short positions, using official data from Ofgem, DESNZ, ONS, Companies House, Find a Tender and the FCA.

- [RawTrader Data: every UK data tool in one place](https://imrawtrader.beehiiv.com/p/data)
- [UK Industry & Bills newsletter](https://imrawtrader.beehiiv.com)
- [Follow @ImRawTrader on X](https://x.com/ImRawTrader)

# Actor input Schema

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

'changes' remembers record IDs in a named key-value store per monitor and outputs only new donations/loans.

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

Donations or loans.

## `daysBack` (type: `integer`):

Used when From date is empty: last N days up to To date (default today).

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

First date to include. Overrides Days back.

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

Last date to include (default today).

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

Which date the range applies to.

## `parties` (type: `array`):

e.g. 'Labour', 'Conservative', 'Reform UK'. Matches the recipient or accounting unit name.

## `entityTypes` (type: `array`):

Leave empty for all.

## `donorTypes` (type: `array`):

e.g. Individual, Company, Trade Union, Unincorporated Association, Limited Liability Partnership, Trust, Public Fund.

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

Case-insensitive text match on the donor / lender name.

## `minValue` (type: `integer`):

Only records at or above this value.

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

Optional text passed to the Commission's own search.

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

changes mode: separate saved state per name.

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

Maximum records per run. 0 = no limit.

## Actor input object example

```json
{
  "mode": "search",
  "kind": "donations",
  "daysBack": 90,
  "dateField": "reported",
  "minValue": 0,
  "monitorName": "default",
  "maxResults": 100
}
```

# Actor output Schema

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

Matching records.

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

Counts, date range and totals.

# 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",
    "daysBack": 90,
    "maxResults": 100
};

// Run the Actor and wait for it to finish
const run = await client.actor("seaf999ield/uk-political-donations").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",
    "daysBack": 90,
    "maxResults": 100,
}

# Run the Actor and wait for it to finish
run = client.actor("seaf999ield/uk-political-donations").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 '{
  "mode": "search",
  "daysBack": 90,
  "maxResults": 100
}' |
apify call seaf999ield/uk-political-donations --silent --output-dataset

```

## MCP server setup

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

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/sXThPlcVcJItbSCW6/builds/Yq7NTzZYKtaUE39SB/openapi.json
