# UK Judicial Conduct Disciplinary Statements Watchdog (`hllerdgn80/uk-judicial-conduct-watchdog`) Actor

Tracks the Judicial Conduct Investigations Office's public disciplinary statements and reports every new sanction against a UK judge, magistrate or tribunal member as soon as it is published, with sanction, role and a summary.

- **URL**: https://apify.com/hllerdgn80/uk-judicial-conduct-watchdog.md
- **Developed by:** [Halil Erdogan](https://apify.com/hllerdgn80) (community)
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.01 / 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/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 Judicial Conduct Disciplinary Statements Watchdog

Tracks the **Judicial Conduct Investigations Office (JCIO)**'s public disciplinary
statements page and reports every new sanction against a UK judge, magistrate,
tribunal member or other judicial office holder as soon as it is published.

The JCIO publishes a short statement whenever the Lady/Lord Chief Justice and
the Lord Chancellor issue a disciplinary sanction for judicial misconduct.
There is no email alert, no RSS feed and no API for this — the only way to
know a new one has appeared is to check the page. This Actor does that for
you and reports only what is new since your last run.

### What it reports

For every disciplinary statement published since your last run:

- **office\_holder** — name and title as published (e.g. "Mr Leslie Wegg JP")
- **role** — judicial role extracted from the statement (JP, District Judge,
  Circuit Judge, Mr/Mrs Justice, Recorder, Tribunal Judge, etc.)
- **sanction** — formal advice, formal warning, reprimand, or removal from
  office (the four sanctions set out in the Constitutional Reform Act 2005)
- **date\_published** — the date on the statement
- **reference** — the JCIO's own statement number (e.g. "57/26")
- **summary** — the statement's facts/decision text (trimmed to ~1,200 characters)
- **source\_url** — direct link to the full official statement

### How it works

1. Fetches the JCIO's public disciplinary-statements listing page (all years).
2. Compares the statement IDs found against the ones saved from your previous
   run (stored in the Actor's key-value store — no external database needed).
3. Fetches and parses only the statements that are new.
4. Pushes one dataset row per new statement and saves the updated list of
   known IDs for next time.

On your very first run there is no baseline to diff against, so the Actor
reports the most recent statements (capped by **Max new statements per run**)
so you start with useful data instead of an empty dataset.

### Input options

- **Judicial role contains** — only report statements about a specific type
  of office holder (e.g. "JP" for magistrates, "Circuit Judge").
- **Sanction contains** — only report a specific sanction (e.g. "reprimand",
  "removal from office").
- **Max new statements per run** — cap on how many newly found statements are
  fetched in one run (default 50).

### Source and licence

Data comes directly from the JCIO's own public web pages
(`judicialconduct.judiciary.gov.uk` / `complaints.judicialconduct.gov.uk`),
which are open to the public with no login required. No robots.txt on
either host restricts this content. This Actor performs plain, low-volume
polling of official public pages — no scraping of paywalled, login-gated or
copyrighted third-party content.

### Who this is for

- Legal and court reporters who want to be first to a judicial misconduct
  story.
- Law firms, chambers and legal recruiters tracking the standing of
  individual judicial office holders.
- Academics and transparency researchers building a record of judicial
  discipline over time.
- Compliance teams at organisations that work with or appoint tribunal
  panel members.

# Actor input Schema

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

Only report statements about office holders whose role text contains this, e.g. "JP" (magistrates), "District Judge" or "Circuit Judge". Leave blank to check every role.

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

Only report statements whose sanction contains this text, e.g. "reprimand" or "removal from office". Leave blank to report every sanction (formal advice, formal warning, reprimand, removal from office).

## `maxNewStatements` (type: `integer`):

Cap on how many newly published statements are fetched and reported in a single run. On the very first run this limits how far back into the JCIO's archive the Actor reads.

## Actor input object example

```json
{
  "maxNewStatements": 50
}
```

# Actor output Schema

## `results` (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("hllerdgn80/uk-judicial-conduct-watchdog").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("hllerdgn80/uk-judicial-conduct-watchdog").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 hllerdgn80/uk-judicial-conduct-watchdog --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,hllerdgn80/uk-judicial-conduct-watchdog"
        }
    }
}
```

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/PWxnaa0FyF97leq8U/builds/5o8m6S1uqQI0ToEt6/openapi.json
