# UK FCA Enforcement Notices (`wildorigins/uk-fca-enforcement-notices`) Actor

🏷️ From $0.60 / 1K | FCA final notices, decision notices, warning notices and supervisory notices. Track fines, bans and censures against firms and individuals in UK financial services.

- **URL**: https://apify.com/wildorigins/uk-fca-enforcement-notices.md
- **Developed by:** [Wild Origins](https://apify.com/wildorigins) (community)
- **Categories:** News, Automation
- **Stats:** 1 total users, 0 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.60 / 1,000 notices

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 FCA Enforcement Notices

Extract UK Financial Conduct Authority enforcement actions as structured data: notice type, firm, individual, penalty amount, summary and a link to the FCA's own page. No account needed.

### 🔍 What does UK FCA Enforcement Notices do?

It reads the FCA's official RSS news feed and enforcement pages and returns every matching notice as a clean row of data, ready for a spreadsheet, a database or your own compliance tooling.

It covers:

- **Final notices**, completed enforcement actions with penalties or sanctions
- **Decision notices**, decisions to take regulatory action, which may be appealed
- **Warning notices**, proposed actions that are not final
- **Supervisory notices**, interventions and restrictions
- **Cancellation notices**, firm authorisation cancellations

The source is the [FCA RSS feed](https://www.fca.org.uk/news/rss.xml) and the FCA's own news pages.

### 📊 What data can I extract from the FCA?

One row per notice:

| Field | Description |
|---|---|
| `title` | Full title of the enforcement notice |
| `noticeType` | Type of notice, for example Final Notice or Decision Notice |
| `category` | FCA classification, for example Press Releases, News or Blogs |
| `publishDate` | Date the FCA published the item, ISO format |
| `firm` | Company name, where the notice names one |
| `individual` | Person's name, where the notice names one |
| `penalty` | Fine amount or sanction imposed |
| `summary` | Full description from the RSS feed |
| `url` | Link to the FCA press release or announcement |
| `scrapedAt` | Timestamp of when the data was collected |

The RSS feed does not include direct PDF links. Open the `url` to reach the full press release, where the PDF download link lives.

### 💡 Why scrape FCA enforcement notices?

**Compliance monitoring.** Watch new enforcement actions daily and see where the regulator's attention is going before it reaches you.

**Due diligence.** Screen a firm or an individual for regulatory history before onboarding a partner, client or hire.

**Penalty benchmarking.** Track fine amounts by breach type over time to size your own exposure.

**Legal and advisory research.** Build a searchable record of enforcement precedent to support client advice.

### 🚀 How do I use UK FCA Enforcement Notices?

1. Click **Try for free**.
2. Choose which notice types to collect with `finalNotices`, `decisionNotices`, `warningNotices`, `supervisoryNotices` and `cancellationNotices`.
3. Add a `searchTerm` to focus on a firm, individual or topic, for example `money laundering`.
4. Set `maxPages` to limit the scope, or `0` for every page, and use `startYear` to skip older notices.
5. Click **Start**, then download the results as JSON, CSV or Excel, or pull them from the API.

### ⬇️ Input

```json
{
  "finalNotices": true,
  "decisionNotices": true,
  "warningNotices": true,
  "maxPages": 5,
  "searchTerm": "money laundering"
}
```

| Field | Type | Default | What it does |
|---|---|---|---|
| `finalNotices` | boolean | `true` | Scrape final notices, completed actions with penalties |
| `decisionNotices` | boolean | `true` | Scrape decision notices, decisions to take action that may be appealed |
| `warningNotices` | boolean | `true` | Scrape warning notices, proposed actions that are not final |
| `supervisoryNotices` | boolean | `false` | Scrape supervisory notices, interventions and restrictions |
| `cancellationNotices` | boolean | `false` | Scrape cancellation notices, firm authorisation cancellations |
| `maxPages` | integer | `0` | Kept for compatibility, the feed is a single document so this has no effect |
| `startYear` | integer | | Only notices from this year onwards, leave empty for all |
| `searchTerm` | string | | Keyword search for firms, individuals or topics |

Each page typically contains 10 to 20 notices, so `maxPages` is the practical way to bound a run. `searchTerm` works well for a named firm or a breach type, for example `market abuse` or `Deutsche Bank`.

### ⬆️ Output

#### Table view

Results arrive as a Notices table you can sort and filter in the Console, with the notice type, firm and penalty lined up for scanning.

#### JSON

A typical row:

```json
{
  "title": "FCA fines Barclays Bank plc",
  "noticeType": "Final Notice",
  "category": "Press Releases",
  "publishDate": "2026-02-18",
  "firm": "Barclays Bank plc",
  "individual": null,
  "penalty": "£40.0m",
  "summary": "The FCA imposed a financial penalty of £40m on Barclays for failings in its anti-money laundering systems and controls...",
  "url": "https://www.fca.org.uk/news/press-releases/fca-fines-barclays-bank-plc-2025",
  "scrapedAt": "2026-02-18T09:47:32.123Z"
}
```

Download it from the run as JSON, CSV or Excel, or read it straight from the API.

### A note on firm and individual fields

`firm` is only populated when the notice title contains a recognisable company name ending in a corporate suffix such as Limited, PLC, LLP or Bank. Where the title does not name a company, for example a general policy announcement, `firm` is null rather than a guess. The same applies to `individual`. A null is deliberate: a wrong company name is worse than a missing one when you are filtering enforcement data.

### ⏱️ How long does a run take?

Measured on real runs, so you know what normal looks like and can tell it apart from a run that has stalled.

| What the run reads | Typical run time |
|---|---|
| The whole FCA news feed, currently 5 to 8 notices | 2 to 5 seconds |

There is only one row here because there is only one document. The FCA publishes its enforcement news as a single RSS feed with no paging, so the Actor fetches it once and filters in memory. Asking for more notice types, a keyword or an earlier start year changes what comes back but not how long it takes, and a run that returns eight notices takes the same two to five seconds as one that returns none. Most of that is the container starting rather than the work.

A run is never silently stuck. The fetch and the filtering are both logged, and if the feed cannot be read the run still finishes, with an empty dataset and the reason in its status message rather than a failure.

**Set the run timeout to suit the size of the ask.** This Actor's default is 3600 seconds, which is comfortably more than the largest run in the table above (20 pages of notices takes about 2 minutes). You are charged per delivered result rather than per minute, so a generous timeout costs you nothing and a tight one risks losing the run's work. Lower it only if you want a hard ceiling on how long a scheduled run may sit.

### 💰 How much does it cost?

**$0.001 per notice returned**, plus the standard **$0.00005** Apify charges once when a run starts. There is no monthly rental, so you pay only for what a run actually returns.

So a run that returns **50 notices** costs **$0.05005**. A monthly monitoring run that picks up 15 new notices costs **$0.01505**, and a full walk of a year holding 300 notices costs **$0.30005**. A run that finds nothing new costs $0.00005.

Paid Apify plans pay less per notice: **$0.00085** on Bronze, **$0.0007** on Silver, **$0.0006** on Gold, **$0.0005** on Platinum and **$0.0004** on Diamond, which is 40 percent of the list price. That 300 notice year is **$0.12005** on Diamond.

Set `maxPages` to bound the run, and `startYear` to skip years you already hold. The Apify listing always shows the current rates.

### 🔌 Integrations

Send results straight to Google Sheets, Slack, Airtable, Zapier, Make or your own webhook using [Apify integrations](https://docs.apify.com/platform/integrations). You can also trigger a run whenever something happens in another tool, which is the usual way to wire enforcement alerts into a compliance dashboard.

### 🔗 Using UK FCA Enforcement Notices with the Apify API

```bash
curl -X POST "https://api.apify.com/v2/acts/spookyweb~uk-fca-enforcement-notices/run-sync-get-dataset-items?token=YOUR_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"finalNotices": true, "decisionNotices": true, "warningNotices": true, "maxPages": 5, "searchTerm": "money laundering"}'
```

Or with the Apify client:

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

const client = new ApifyClient({ token: 'YOUR_TOKEN' });
const run = await client.actor('spookyweb/uk-fca-enforcement-notices').call({
  finalNotices: true,
  decisionNotices: true,
  warningNotices: true,
  maxPages: 5,
  searchTerm: 'money laundering',
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
```

Full detail is in the [Apify API reference](https://docs.apify.com/api/v2), and every run is also callable from the [Python](https://docs.apify.com/api/client/python) and [JavaScript](https://docs.apify.com/api/client/js) clients.

### ❓ FAQ

#### What is the difference between a final notice and a warning notice?

A warning notice sets out action the FCA proposes to take, and it is not final. A decision notice records that the FCA has decided to act, and it can still be referred to the Upper Tribunal. A final notice is the completed action, with the penalty or sanction actually imposed. If you only want concluded matters, set `finalNotices` to true and turn the other two off.

#### Does it include the penalty amount?

Yes, in the `penalty` field, where the notice states one. Warning and decision notices often do not carry a figure yet, and policy announcements never do, so `penalty` is null on those rather than a guess.

#### How far back does it go?

As far back as the FCA keeps its notice listings online. Set `maxPages` to `0` and leave `startYear` empty to walk every page, or set `startYear` to focus on recent enforcement and keep the run short.

#### Can I track a specific firm?

Yes, put the firm name into `searchTerm`. Bear in mind the `firm` field is only filled when the title names a company with a corporate suffix, so search by term rather than filtering on `firm` alone if you want everything mentioning that business.

#### How quickly do new notices appear?

The Actor reads the FCA's live RSS feed, so a notice is available as soon as the FCA publishes it. Schedule a daily run with a low `maxPages` to pick up new items without re-collecting the archive.

#### Why is there no publication date in the output?

The FCA RSS feed does not carry one, and inventing a date from the scrape time would be worse than leaving it out. Use `scrapedAt` to know when you collected a row, and open `url` for the FCA's own dated page.

### ⚖️ Is it legal to scrape FCA enforcement notices?

The FCA publishes final, decision, warning and supervisory notices itself, as a statutory part of its enforcement process. These are public regulatory records about firms and, where the FCA has chosen to name them, individuals. This Actor reads only the FCA's own published pages, and it never logs in.

Users are responsible for their own use of the data, including compliance with applicable data protection law where a notice names an individual. Apify's [ethical scraping guide](https://blog.apify.com/is-web-scraping-legal/) covers the wider picture.

### 👍 Your feedback

Found a bug, or want a field that is not here yet? Open an issue on the Actor's Issues tab. Requests that make the data more useful get built, and problems get fixed quickly.

### 🔎 You might also like

| Actor | What it does |
|---|---|
| [UK ICO Enforcement Actions](https://apify.com/spookyweb/uk-ico-enforcement-actions) | ICO fines, reprimands, enforcement notices and prosecutions with fine amounts and sectors |
| [UK Financial Ombudsman Decisions](https://apify.com/spookyweb/uk-fos-decisions) | Final FOS decisions filterable by business, sector and outcome, with PDF links |
| [UK Insolvency Register Search](https://apify.com/spookyweb/uk-insolvency-register-search) | Individual Insolvency Register search for bankruptcies, IVAs and debt relief orders |

# Actor input Schema

## `finalNotices` (type: `boolean`):

Scrape final enforcement notices (completed actions with penalties)

## `decisionNotices` (type: `boolean`):

Scrape decision notices (decisions to take action, may be appealed)

## `warningNotices` (type: `boolean`):

Scrape warning notices (proposed actions, not final)

## `supervisoryNotices` (type: `boolean`):

Scrape supervisory notices (interventions and restrictions)

## `cancellationNotices` (type: `boolean`):

Scrape cancellation notices (firm authorisation cancellations)

## `maxPages` (type: `integer`):

Kept for compatibility with earlier versions. The RSS feed is a single document, so this setting has no effect on the result.

## `startYear` (type: `integer`):

Only get notices from this year onwards (leave empty for all)

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

Optional: Search for specific firms, individuals, or topics

## Actor input object example

```json
{
  "finalNotices": true,
  "decisionNotices": true,
  "warningNotices": true,
  "supervisoryNotices": false,
  "cancellationNotices": false,
  "maxPages": 0,
  "searchTerm": ""
}
```

# Actor output Schema

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

One row per item: FCA enforcement notices.

# 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("wildorigins/uk-fca-enforcement-notices").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("wildorigins/uk-fca-enforcement-notices").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 wildorigins/uk-fca-enforcement-notices --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,wildorigins/uk-fca-enforcement-notices"
        }
    }
}
```

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/r3xUD8CA8yImT5Kjz/builds/aWuyLnukf0wRGwJMG/openapi.json
