# UK Short Interest Scraper: FCA Net Short Positions Tracker (`seaf999ield/uk-fca-short-positions`) Actor

FCA short positions UK: daily short interest from the official FCA net short positions report, with short % by company and ISIN, change alerts and history, by RawTrader | UK Industry & Bills: https://ukindustryandbills.substack.com · X: x.com/ImRawTrader

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

## Pricing

Pay per event

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 Short Interest Scraper: FCA Net Short Positions Tracker

**Track UK short interest every day from the official FCA aggregated net short positions report, with change alerts by company and ISIN.**

### Who it's for

- Traders and investors watching short interest on UK-listed shares
- Financial journalists covering the most-shorted UK companies
- Quant and research teams that need a clean daily short-interest dataset

### Sample output

| issuerName | isin | netShortPct | changeFromPreviousPct | positionDate |
|---|---|---|---|---|
| CERES POWER HOLDINGS PLC | GB00BG5KQW09 | 18.14 | 0.17 | 2026-10-20 |
| YELLOW CAKE PLC | JE00BF50RG45 | 15.1 | 0.13 | 2026-10-20 |
| PENNON GROUP PLC | GB00BNNTLN49 | 14.82 | 0.36 | 2026-10-20 |

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

### Price per 1,000 results

Main event: **`position-row` at $0.002 each**, so **1,000 results = $2.00**. Other events: `position-change` $0.01 each (only charged when that row type is output). See the Pricing tab for the current prices.

### Input example

```json
{
  "mode": "current",
  "maxResults": 50
}
```

**Track UK short interest every day from the official FCA aggregated net short positions (ANSP) report.** See the current net short % for every UK company on the FCA reportable shares list, get alerts when short interest is **new, increased, decreased or closed**, and pull per-issuer summaries with the previous level, peak and low. Official FCA data, no scraping, no login, no API key.

| Mode | What you get |
|---|---|
| 📊 **current** | Every current aggregate net short position: company, **ISIN**, **net short %** of issued share capital, position date. Filter by company name, ISIN and a minimum % |
| 🔔 **changes** | Compared with your previous run (saved snapshot): **new**, **increased**, **decreased** and **closed** short positions with **old %**, **new %**, change in percentage points and the issuer's total short % |
| 🏢 **issuerSummary** | Per company: total disclosed short %, previous level and change, date the current level started, **peak / low** and number of updates in a history window (default 90 days) |

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

### What you get

- The current **net short %** for every UK company on the FCA reportable shares list, with ISIN and position date
- Daily **change alerts**: new, increased, decreased and closed short positions with old %, new % and the change
- Per-issuer **summaries**: total short %, previous level, peak and low over a history window
- Straight from the official FCA aggregated net short positions report, with no scraping or login
- Export to CSV, Excel or JSON, or push alerts to Slack, Sheets or a trading dashboard via the API

### Important: what the FCA publishes since 13 July 2026

Under the **Short Selling Regulations 2025** the FCA now publishes **aggregate** net short positions per company (the sum of all individual positions at or above **0.2%**), on a T+2 basis, each working day from 12:00 UK time. **Individual position holders (hedge fund names) are anonymised and are no longer published**, so this actor reports short interest per company, not per fund. The old holder-level file is an archive frozen at 10 July 2026.

### Who uses it

- **Traders and investors:** spot the most shorted UK stocks (FTSE 100, FTSE 250, AIM) and short squeezes in the making.
- **Hedge funds and analysts:** a clean daily UK short-interest feed for models, screens and dashboards.
- **Investor relations teams:** get alerted the day short interest in your company changes.
- **Financial journalists:** daily "most shorted UK shares" and "biggest increases in short interest" stories.
- **Risk and compliance:** monitor short pressure on holdings and counterparties.

### Input

| Field | Example | Notes |
|---|---|---|
| Mode | `current` | or `changes`, `issuerSummary` |
| Issuer name contains | `["Ocado","Barclays"]` | Case-insensitive text match |
| ISINs | `["GB00B3MBS747"]` | Exact ISIN |
| Minimum net short % | `2` | % of issued share capital |
| Change types | `["new","increased"]` | changes mode, default all |
| Monitor name | `my-watchlist` | changes mode: separate saved snapshot per name |
| History window (days) | `90` | issuerSummary mode |
| Sort by | `netShortPct` | or `positionDate`, `issuerName` |
| Max results | `50` | 0 = no limit |

**Example: UK shares with 3%+ short interest**

```json
{ "mode": "current", "minShortPct": 3, "sortBy": "netShortPct" }
```

**Example: daily alert when short interest changes (schedule this every working day after 12:30 UK time)**

```json
{ "mode": "changes", "monitorName": "daily", "minShortPct": 0.5 }
```

The first run saves a baseline and outputs nothing; each later run outputs only the changes.

#### Example output (real sample)

| issuerName | isin | changeType | oldShortPct | newShortPct | reportDate |
|---|---|---|---|---|---|
| 80 Mile Plc | GB00BFD3VF20 | new | – | 0.9 | 2026-10-20 |
| 3I GROUP PLC | GB00B1YW4409 | increased | 0.77 | 1.07 | 2026-10-20 |
| 4IMPRINT GROUP PLC | GB0006640972 | decreased | 0.5 | 0.2 | 2026-10-20 |

### Output

```json
{
  "recordType": "change",
  "changeType": "increased",
  "issuerName": "3I GROUP PLC",
  "isin": "GB00B1YW4409",
  "oldShortPct": 0.77,
  "newShortPct": 1.07,
  "changePct": 0.3,
  "issuerTotalShortPct": 1.07,
  "oldPositionDate": "2026-10-16",
  "newPositionDate": "2026-10-16",
  "reportDate": "2026-10-20",
  "source": "FCA aggregated net short positions (ANSP) report",
  "sourceUrl": "https://www.fca.org.uk/publication/documents/aggregated-net-short-positions.xlsx"
}
```

A `RUN_SUMMARY` record in the default key-value store has the report date, counts, filters and the change breakdown.

### Pricing (pay per event)

**In plain words:** **$2 per 1,000 position or summary rows** and **$10 per 1,000 change alerts**. The whole current list (~425 companies) costs under $1, and a daily changes monitor a few cents.

| Event | Price |
|---|---|
| `position-row`: each current position or issuer summary row | $0.002 |
| `position-change`: each change row | $0.01 |

The full current list (about 425 companies) costs under $1. A daily changes monitor usually costs a few cents.

### FAQ

**Where does the data come from?** The FCA's daily [aggregated net short positions XLSX](https://www.fca.org.uk/publication/documents/aggregated-net-short-positions.xlsx), linked from the FCA page *Notification and disclosure of net short positions*.

**Why no fund names?** Since 13 July 2026 the FCA anonymises individual holders and publishes only aggregate positions per company.

**How fresh is it?** The FCA updates the file each working day from 12:00 UK time with positions from two working days earlier.

**What is "closed"?** The company dropped off the current list, meaning aggregate short interest fell below the reporting threshold or the share stopped being reportable.

*Contains public sector information published by the Financial Conduct Authority. This is not investment advice.*

### Related UK data actors

- [UK Gazette Insolvency Scraper: Winding-Up & Liquidations](https://apify.com/seaf999ield/uk-gazette-insolvency-notices)
- [UK Companies House Scraper: New Companies & Insolvency Alerts](https://apify.com/seaf999ield/uk-companies-house-feed)
- [UK Political Donations Scraper: Electoral Commission Data](https://apify.com/seaf999ield/uk-political-donations)

### 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`):

'current' outputs today's aggregate net short position for every company. 'changes' compares with the snapshot saved by the previous run (named key-value store per monitor) and outputs only changes. 'issuerSummary' adds the previous level, change and the peak/low over a history window.

## `issuers` (type: `array`):

Only companies whose name contains any of these texts (case-insensitive), e.g. 'BARCLAYS', 'Ocado'.

## `isins` (type: `array`):

Only these ISINs, e.g. GB0031348658.

## `minShortPct` (type: `number`):

Only positions at or above this % of issued share capital. In changes mode a change is kept if the old or new % meets it.

## `holders` (type: `array`):

Since 13 July 2026 (Short Selling Regulations 2025) the FCA publishes aggregate positions per company only and anonymises individual holders, so this filter is ignored. Kept for compatibility.

## `changeTypes` (type: `array`):

changes mode: which change types to output (default all).

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

changes mode: name of the saved snapshot (key-value store fca-shorts-<name>). Use different names for independent monitors.

## `historyDays` (type: `integer`):

issuerSummary mode: window for peak / low / number of updates.

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

Sort order for current and issuerSummary modes.

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

Maximum records to output per run. 0 = no limit.

## Actor input object example

```json
{
  "mode": "current",
  "monitorName": "default",
  "historyDays": 90,
  "sortBy": "netShortPct",
  "maxResults": 50
}
```

# Actor output Schema

## `positions` (type: `string`):

Current positions (current mode).

## `changes` (type: `string`):

Change alerts (changes mode).

## `issuerSummary` (type: `string`):

Per-issuer summary (issuerSummary mode).

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

Counts, report date, filters and change breakdown.

# 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": "current",
    "maxResults": 50
};

// Run the Actor and wait for it to finish
const run = await client.actor("seaf999ield/uk-fca-short-positions").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": "current",
    "maxResults": 50,
}

# Run the Actor and wait for it to finish
run = client.actor("seaf999ield/uk-fca-short-positions").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": "current",
  "maxResults": 50
}' |
apify call seaf999ield/uk-fca-short-positions --silent --output-dataset

```

## MCP server setup

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

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/WpDfmrJMF8da2SnWN/builds/WaSdTBYwNyjPAbydi/openapi.json
