# Short Squeeze Radar - Short Interest, FTD & Reg SHO Score (`smartmoney-data/short-squeeze-radar`) Actor

Short squeeze screener on official data: FINRA short interest and days to cover, short interest % of shares, daily short volume, SEC fails-to-deliver and the Reg SHO list, in one transparent 0-100 score per ticker. Pay per result.

- **URL**: https://apify.com/smartmoney-data/short-squeeze-radar.md
- **Developed by:** [SmartMoney Data](https://apify.com/smartmoney-data) (community)
- **Categories:** Business, AI, Developer tools
- **Stats:** 3 total users, 2 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

$10.00 / 1,000 ticker squeeze profiles

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

## Short Squeeze Radar - Short Interest, FTD & Reg SHO Score

**Every official short-selling signal for a stock in one row, with a transparent 0-100 squeeze score.**

| | |
|---|---|
| **Data** | FINRA short interest and short volume, SEC fails-to-deliver, Nasdaq Reg SHO list |
| **Price** | $10 per 1,000 ticker profiles, no subscription. Apify's free plan credit covers a first test. |
| **Freshness** | Daily short volume; short interest twice a month |
| **Try it** | The input is pre-filled with a working example: just click **Start**. |

**Example output**

| Ticker | Squeeze score | Short % of float | Days to cover | On Reg SHO list |
|---|---|---|---|---|
| XYZ | 82 | 31.5% | 6.2 | Yes |
| ABC | 47 | 14.0% | 3.1 | No |

*Illustrative rows; real runs return the full fields listed under Output.*

Short squeeze research usually means five tabs: FINRA short interest, days to cover, the daily short volume files, the SEC's fails-to-deliver zips and the Reg SHO threshold list. This Actor pulls all of them, lines them up per ticker, adds short interest as a % of shares outstanding from each company's latest SEC filing, and scores the result. Run it on your watchlist, or let it scan the market's largest short positions.

### What you can do with it

- 🎯 **Squeeze watchlist:** score the names you follow every two weeks when new short interest lands.
- 🔭 **Market scan:** rank the largest short positions by squeeze pressure, OTC noise filtered out.
- 🚨 **Alerts:** schedule it and get the tickers that crossed a score of 70 in Slack, Discord or email.
- 📰 **Content:** "Most shorted stocks this cycle", with the numbers behind each one.
- 🤖 **AI agents:** "Is GME a squeeze candidate right now?" as one tool call.

### What goes into each row

| Signal | Source | Updated |
|---|---|---|
| Shares short, change vs previous report, days to cover | FINRA consolidated short interest (all US exchanges + OTC) | twice a month |
| Short interest as % of shares outstanding | SEC filing cover page (`dei:EntityCommonStockSharesOutstanding`) | each 10-Q/10-K |
| Share of daily volume sold short | FINRA Reg SHO daily short sale volume files | daily |
| Fails to deliver: total, largest day, $ value, vs average volume | SEC fails-to-deliver data | twice a month |
| On the Reg SHO threshold list, and for how many recent days | Nasdaq Trader threshold list | daily |

### The squeeze score (0-100)

Every component is shown in `scoreComponents`, so you can see exactly why a ticker ranks where it does.

| Component | Max points | Full points at |
|---|---|---|
| Days to cover | 25 | 10 days of average volume |
| Short interest % of shares outstanding | 25 | 25% |
| Short interest growth vs previous report | 15 | +50% |
| Largest daily fail-to-deliver vs average volume | 10 | 25% |
| Average share of volume sold short | 10 | 70% (0 at 40%) |
| Reg SHO threshold list | 15 | on the list today (10) and on most recent days (+5) |

Levels: **Extreme** ≥ 70, **High** ≥ 50, **Elevated** ≥ 30, otherwise **Low**.

### How to use it

#### Score a watchlist

```json
{ "tickers": ["GME", "AMC", "BYND", "CVNA"] }
```

#### Scan the market: top 25 names with at least 5 days to cover

```json
{ "maxResults": 25, "minDaysToCover": 5 }
```

#### Only high-pressure names, skip the slower lookups

```json
{ "minScore": 50, "includeSharesOutstanding": false }
```

### Output

One row per ticker, highest score first. Example (illustrative values):

```json
{
  "ticker": "GME",
  "issueName": "GameStop Corp",
  "settlementDate": "2026-09-15",
  "shortInterest": 60000000,
  "shortInterestPrevious": 50000000,
  "shortInterestChangePct": 20,
  "avgDailyVolume": 6000000,
  "daysToCover": 10,
  "sharesOutstanding": 300000000,
  "shortInterestPctOfShares": 20,
  "shortVolumeRatioAvg": 0.6,
  "shortVolumeDays": 5,
  "ftdTotalShares": 2000000,
  "ftdMaxDailyShares": 1500000,
  "ftdValueUsd": 50500000,
  "ftdToAvgVolume": 0.25,
  "onThresholdList": true,
  "thresholdDaysOnList": 10,
  "thresholdDaysChecked": 10,
  "squeezeScore": 83,
  "squeezeLevel": "Extreme",
  "scoreComponents": { "daysToCover": 25, "shortInterestPctOfShares": 20, "shortInterestGrowth": 6, "failsToDeliver": 10, "shortVolumeRatio": 6.7, "thresholdList": 15 },
  "dataNotes": []
}
```

The **`SUMMARY`** record lists the short interest date, the exact daily and half-monthly files used, any source that was unavailable, and the top 15 tickers.

### Use it from code or an AI agent

**Python**

```python
from apify_client import ApifyClient

client = ApifyClient("YOUR_APIFY_TOKEN")
run = client.actor("smartmoney-data/short-squeeze-radar").call(run_input={"maxResults": 25})
for t in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(t["ticker"], t["squeezeScore"], t["daysToCover"])
```

**AI agents (Claude, ChatGPT, Cursor and other MCP clients):** connect the Apify MCP server with this Actor preloaded:

```text
https://mcp.apify.com/?tools=smartmoney-data/short-squeeze-radar
```

Add this URL as a remote MCP server or custom connector in your AI client, sign in with Apify (OAuth), then just ask, for example:

> Score GME, AMC and CVNA for short squeeze risk.

**No-code:** schedule it after each FINRA release and send the results to Google Sheets, Slack, Zapier or Make.

> Part of the **SmartMoney Data** suite: [Insider Trades](https://apify.com/smartmoney-data/sec-insider-trades-tracker) · [Hedge Fund 13F Holdings](https://apify.com/smartmoney-data/sec-13f-hedge-fund-tracker) · [Congress Stock Trades](https://apify.com/smartmoney-data/congress-stock-trades-tracker) · [Form 144 Planned Sales](https://apify.com/smartmoney-data/sec-form-144-planned-insider-sales) · [13D/13G Activist Stakes](https://apify.com/smartmoney-data/sec-13d-13g-activist-stakes) · [8-K Material Events](https://apify.com/smartmoney-data/sec-8k-material-events) · [Smart Money Confluence](https://apify.com/smartmoney-data/smart-money-confluence-score) · [13F Consensus](https://apify.com/smartmoney-data/hedge-fund-13f-consensus)

### Pricing

**Pay per result:** you're charged for each ticker profile returned. Tickers below your `minScore` are free. See the **Pricing** tab for current rates. Set a *maximum cost per run* and the Actor stops cleanly when it's reached.

### FAQ

**How fresh is short interest?**
FINRA publishes short interest twice a month, about a week after each settlement date. The daily short volume and threshold list are from the latest trading days, and fails-to-deliver lag about two weeks. Each row says which dates it uses.

**Why is `shortInterestPctOfShares` empty for some tickers?**
ETFs, funds and many foreign issuers don't report shares outstanding on an SEC cover page. Those rows score 0 on that component and say so in `dataNotes`. Multi-class companies are measured against all classes combined.

**Which threshold list is used?**
Nasdaq's daily Reg SHO threshold list, which covers Nasdaq-listed securities. A NYSE-listed stock shows `onThresholdList: false` even if NYSE's own list includes it.

**Does a high score mean a squeeze will happen?**
No. It means the short side is crowded and stressed. Squeezes need a catalyst. Treat the score as a screen, not a prediction.

**Is this legal to use?**
Yes. Every source is public data published by FINRA, the SEC and Nasdaq.

### Related Actors

- 🧭 [Smart Money Confluence Score](https://apify.com/smartmoney-data/smart-money-confluence-score): insiders, activists and Congress in one score per ticker.
- 👔 [SEC Insider Trades Tracker](https://apify.com/smartmoney-data/sec-insider-trades-tracker): Form 4 buys and sells by CEOs and directors.
- 🎯 [13D & 13G Activist Stakes](https://apify.com/smartmoney-data/sec-13d-13g-activist-stakes): activist funds and 5%+ owners.

### Support

**Useful?** A short review on this page helps other people find it, and we read every one.

Found a bug or need a feature? Open an issue on the **Issues** tab or email **smartmoney-data@googlegroups.com**. We usually reply within a day.

*Data is provided for informational purposes only and is not investment advice.*

# Actor input Schema

## `tickers` (type: `array`):

US tickers to profile (e.g. GME, AMC). Leave empty to scan the market: the largest short positions are ranked and the top ones are profiled.

## `scanUniverse` (type: `integer`):

Market scan only: how many of the largest short positions (by shares short) to rank before profiling the top ones.

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

Market scan only: how many of the highest-ranked tickers to fully profile and return.

## `minDaysToCover` (type: `number`):

Market scan only: skip tickers whose short interest is less than this many days of average volume.

## `minScore` (type: `integer`):

Only return tickers scoring at least this (0-100).

## `includeOtc` (type: `boolean`):

Market scan only: OTC names are excluded by default because thin volume inflates days to cover.

## `shortVolumeDays` (type: `integer`):

Average the share of volume sold short over this many recent trading days (FINRA Reg SHO daily files). 0 skips it.

## `ftdPeriods` (type: `integer`):

How many of the latest half-monthly SEC fails-to-deliver files to include (2 = about a month). 0 skips it.

## `thresholdDays` (type: `integer`):

How many recent daily Nasdaq threshold lists to check, to see how long a ticker has been on it. 0 skips it.

## `includeSharesOutstanding` (type: `boolean`):

Look up shares outstanding from each company's latest SEC filing cover page (one extra request per ticker).

## `secUserAgent` (type: `string`):

The SEC asks automated clients to identify themselves as 'Company Name email@domain.com'. Put your own contact here for heavy use.

## Actor input object example

```json
{
  "tickers": [
    "GME",
    "AMC",
    "BYND",
    "CVNA"
  ],
  "scanUniverse": 2000,
  "maxResults": 50,
  "minDaysToCover": 0,
  "minScore": 0,
  "includeOtc": false,
  "shortVolumeDays": 5,
  "ftdPeriods": 2,
  "thresholdDays": 10,
  "includeSharesOutstanding": true,
  "secUserAgent": "SmartMoney Data Short Squeeze Radar smartmoney-data@googlegroups.com"
}
```

# Actor output Schema

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

No description

## `summary` (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 = {
    "tickers": [
        "GME",
        "AMC",
        "BYND",
        "CVNA"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("smartmoney-data/short-squeeze-radar").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 = { "tickers": [
        "GME",
        "AMC",
        "BYND",
        "CVNA",
    ] }

# Run the Actor and wait for it to finish
run = client.actor("smartmoney-data/short-squeeze-radar").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 '{
  "tickers": [
    "GME",
    "AMC",
    "BYND",
    "CVNA"
  ]
}' |
apify call smartmoney-data/short-squeeze-radar --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,smartmoney-data/short-squeeze-radar"
        }
    }
}
```

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/hAq5Dsaq0hWHdZYJW/builds/4a2d7OYriAIidL1Hy/openapi.json
