# 📉 Short Interest Tracker — Days to Cover + Squeeze Score (`nexgendata/short-interest-tracker`) Actor

Track FINRA bi-monthly short interest, % of float, days to cover, and squeeze-candidate scores across US-listed stocks. Real-time short positioning data for long-short hedge funds, prime brokers, squeeze traders, compliance teams. Bloomberg short-interest alternative — pay-per-result.

- **URL**: https://apify.com/nexgendata/short-interest-tracker.md
- **Developed by:** [NexGenData](https://apify.com/nexgendata) (community)
- **Categories:** Business
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $100.00 / 1,000 short interest 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/platform/actors/running/actors-in-store#pay-per-event

## What's an Apify Actor?

Actors are a software tools running on the Apify platform, for all kinds of web data extraction and automation use cases.
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.
Actors are written with capital "A".

## 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.
The best way to integrate Actors is as follows.

In JavaScript/TypeScript projects, use official [JavaScript/TypeScript client](https://docs.apify.com/api/client/js.md):

```bash
npm install apify-client
```

In Python projects, use official [Python client library](https://docs.apify.com/api/client/python.md):

```bash
pip install apify-client
```

In shell scripts, use [Apify CLI](https://docs.apify.com/cli/docs.md):

````bash
# MacOS / Linux
curl -fsSL https://apify.com/install-cli.sh | bash
# Windows
irm https://apify.com/install-cli.ps1 | iex
```bash

In AI frameworks, you might use the [Apify MCP server](https://docs.apify.com/platform/integrations/mcp.md).

If your project is in a different language, use the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).


# README

## 📉 Short Interest Tracker — Days to Cover + Squeeze Score

Stop renewing Ortex, S3 Partners, or a Bloomberg seat just to read FINRA's bi-monthly short-interest tape. This actor returns a clean, structured per-stock snapshot of **shares short, short % of float, short % of shares outstanding, days to cover, period-over-period change**, and a built-in **0–100 squeeze score** that flags candidates where high short positioning meets rising price action. Pay only for the records you pull — no annual contracts, no $35k/year S3 license, no $24k/year Bloomberg seat, no Ortex monthly minimum.

If you run a long-short book, trade squeezes, sit on a prime-brokerage desk, or work in trading compliance — this is the dataset you actually need. Cron it twice a month around FINRA's settlement-date publication cadence (~the 15th and the last business day of the month), pin it to a dashboard, or stream the high-short-interest universe into a backtest harness.

---

### What you get per record

Every dataset item is one US-listed equity's most recent bi-monthly FINRA short-interest snapshot, enriched with price context and a derived squeeze score:

| Field | Example | Description |
|---|---|---|
| `symbol` | `GME` | US listing ticker |
| `company_name` | `GameStop Corp.` | Full issuer name |
| `sector` | `Consumer Cyclical` | Sector classification when available |
| `shares_short` | `56789012` | Raw share count short on the latest FINRA report |
| `shares_short_prior` | `52345678` | Shares short on the *previous* bi-monthly report |
| `change_pct` | `8.49` | Period-over-period change in short interest (%) |
| `short_pct_of_float` | `22.41` | Most-watched squeeze metric — short / float (%) |
| `short_pct_of_outstanding` | `15.83` | Short / shares outstanding (%) |
| `days_to_cover` | `4.62` | shares_short / average daily volume |
| `report_date` | `Apr 30, 2026` | Settlement date of the bi-monthly snapshot |
| `avg_daily_volume` | `12300000` | 90-day average daily share volume |
| `current_price` | `12.34` | Last close in USD |
| `market_cap_usd` | `3450000000` | Raw USD market cap snapshot |
| `52w_high` | `25.06` | Trailing-52-week high |
| `52w_low` | `9.45` | Trailing-52-week low |
| `squeeze_score` | `78` | 0–100 derived blend (see below) |
| `is_squeeze_candidate` | `true` | Convenience flag — true when squeeze_score >= 70 |
| `source_url` | `https://stockanalysis.com/quote/gme/statistics/` | Source page for the snapshot |
| `data_source` | `stockanalysis.com (FINRA bi-monthly short interest)` | Provenance |
| `fetched_at_utc` | `2026-05-11T14:22:01+00:00` | ISO UTC fetch timestamp |

#### How the squeeze score is built

`squeeze_score` is a deterministic 0–100 blend of three components:

1. **Short % of float (50 pts)** — scaled linearly, plateaus at 30%. A name with 30%+ of float short maxes this leg out.
2. **Days to cover (30 pts)** — scaled linearly, plateaus at 10 days. Hard-to-exit positioning earns the full 30.
3. **52-week price momentum (20 pts)** — proxied by where current price sits in the trailing 52-week range. Names trading near their highs (where shorts are most vulnerable to a forced cover) score high; names slumping near lows score low.

A name with 25% short interest of float, 8 days to cover, and trading 80% of the way up its 52-week range receives a score of roughly `(25/30)*50 + (8/10)*30 + 0.8*20 = 41.7 + 24 + 16 = ~82`. We flag everything `>= 70` as `is_squeeze_candidate = true`.

Use the score as a **first-pass filter, not a trade signal**. It does not (and cannot) account for borrow availability, options skew, ATM-utilization, or shareholder-of-record concentration — those are knobs Ortex / S3 charge enterprise prices to model. The score is here to let you stack-rank the universe in a single column.

---

### Input parameters

- **symbols** — optional list of specific tickers to fetch (e.g. `["GME", "AMC", "CVNA"]`). When empty, the actor walks a curated universe of ~50 historically high-short-interest US names.
- **limit** — max records to return per run. Each record is billed at $0.10.
- **min_short_pct_of_float** — only return names with short % of float at or above this number. `10` is a useful threshold for "interestingly shorted" names; `20` filters to the truly crowded shorts.
- **min_days_to_cover** — minimum days-to-cover threshold. `5+` is conventional for "hard to exit" positioning.
- **squeeze_candidates_only** — boolean. When `true`, only rows with `squeeze_score >= 70` are emitted.
- **sector** — optional sector substring filter (e.g. `Technology`, `Consumer Cyclical`, `Healthcare`).

---

### Sample input

```json
{
  "limit": 25,
  "min_short_pct_of_float": 15,
  "min_days_to_cover": 3,
  "squeeze_candidates_only": false,
  "sector": ""
}
````

That request pulls up to 25 high-short-interest names across all sectors with at least 15% of float short and 3+ days to cover — the canonical "watchlist of squeeze candidates" pull. To narrow to the most stacked names only, set `squeeze_candidates_only: true` and the actor drops everything that doesn't clear the 70-score bar.

To pull a specific watchlist:

```json
{
  "symbols": ["GME", "AMC", "CVNA", "BYND", "LMND", "BIG", "PLUG", "UPST", "HOOD"],
  "limit": 25
}
```

That returns exactly those nine names — useful for nightly snapshots into your own warehouse, or for a re-pull after a FINRA settlement date.

***

### Who pays for this

- **Long-short hedge funds** — borrow-cost-aware shorts, basket construction, and the "what is the rest of the street already short?" check before adding a name. Use `short_pct_of_float` and `days_to_cover` to size the crowd you're joining.
- **Prime brokerage desks** — securities-lending pre-allocation, locate-availability triage, and high-utilization name spotting. The change\_pct field reveals where new shorts piled in between FINRA reports.
- **Short-squeeze traders** — the meme-stock crowd, retail squeeze hunters, and discretionary momentum desks. `squeeze_score` plus `is_squeeze_candidate` is the screener.
- **Compliance teams** — short-sale rule monitoring (Reg SHO), threshold-securities list cross-checks, and disclosure-obligation tracking. The dataset is sourced from FINRA — the same numbers the regulator publishes.
- **Quant / systematic funds** — backtest fuel. Pull the bi-monthly cycle, accumulate snapshots in your warehouse, and you have a multi-year short-interest panel for free.
- **Fintech / retail platforms** — "most shorted" widgets and squeeze leaderboards without an S3 enterprise contract.
- **Sell-side equity research** — "what is the consensus short positioning vs our rating?" Useful for divergence-driven thesis notes.
- **Risk management** — crowded-shorts exposure across the firm's existing short book. Cross-reference your shorts with the universe and flag the names where you're standing in line behind everyone else.

***

### Versus the incumbents

| Source | Bi-monthly short interest | Short % of float | Days to cover | Squeeze score / model | Pay-per-pull | Cost (US-equities only, retail-equivalent) |
|---|---|---|---|---|---|---|
| Bloomberg Terminal (SHRT / SI) | yes | yes | yes | no native model | no | ~$24,000 / year / seat |
| FactSet | yes | yes | yes | partial (Workstation add-on) | no | ~$12,000+ / year / seat |
| Refinitiv Eikon | yes | yes | yes | no | no | ~$22,000 / year / seat |
| Ortex Analytics | yes + estimates | yes | yes | yes (proprietary "Cost To Borrow" + utilization) | no — subscription | ~$60–$3,500 / month tiered |
| S3 Partners (BlackLight) | yes (institutional-grade) | yes | yes | yes (proprietary squeeze score) | no — enterprise license | $35,000+ / year |
| HighShortInterest.com (free) | yes (delayed) | yes | yes | no | n/a | free, but no API and no programmatic access |
| **NexGenData Short Interest Tracker (this actor)** | **yes (FINRA bi-monthly)** | **yes** | **yes** | **yes (deterministic 0–100)** | **yes** | **$0.10 / record, no subscription** |

A trader pulling 50 names twice a month spends `~$10/month` on this actor — roughly **1/350th of an Ortex subscription**, **1/200th of a Bloomberg seat**, and **vastly cheaper than any S3 contract**. You give up Ortex's proprietary borrow-rate model and S3's real-time intraday short-volume hydration; you keep FINRA's official tape, days-to-cover, and a transparent deterministic squeeze score you can audit yourself.

***

### Pricing — pay-per-event

| Event | Price |
|---|---|
| Actor start | **$0.01** (charged once per run) |
| Short interest record (primary event) | **$0.10** per record returned |

A pull of 50 names = $0.01 + 50 × $0.10 = **$5.01**. A pull of 10 names for a smoke test = $1.01. A full bi-monthly snapshot of the curated 50-name universe = $5.01 — run that twice a month for **~$10/month** of programmatic short-interest data.

No subscription. No minimum. No annual contract. Cron it twice a month around FINRA's mid-month and end-of-month settlement publication dates and accumulate the panel in your own storage.

***

### How it works under the hood

1. The actor resolves your input — either the explicit `symbols` list or the curated **~50-name high-short-interest universe** (GameStop, Carvana, AMC, Beyond Meat, Lemonade, Big Lots, Plug Power, Upstart, MicroStrategy, Faraday Future, Mullen Automotive, Nikola, Robinhood, SoFi, Opendoor, Rivian, Lucid, Chewy, Peloton, Wolfspeed, Rumble, Trump Media, Tilray, Canopy Growth, Aurora Cannabis, Virgin Galactic, Marathon Digital, Riot Platforms, CleanSpark, Bitfarms, Hut 8, Iris Energy, TeraWulf, Novavax, Bionano, Genius Brands, NIO, XPeng, Li Auto, FuboTV, Root, Ally, Affirm, BARK, etc.).
2. For each symbol, the actor pulls `stockanalysis.com/quote/{symbol}/statistics/` — a clean server-rendered statistics page that aggregates the FINRA bi-monthly short-interest report alongside float, shares outstanding, average volume, market cap, 52-week range, and price. This is the same backing data the Bloomberg SHRT screen and Ortex's free tier reference.
3. The HTML is parsed into a label→value map covering Shares Short, Short % of Float, Short % of Shares Outstanding, Short Ratio (Days to Cover), Float, Shares Outstanding, Average Volume (90 Days), Market Cap, 52-Week Range, and Stock Price.
4. Suffix-encoded numbers like `56.78M`, `3.45B`, and `12.3K` are normalized to raw ints. Percentages strip `%`, currency strips `$`, and 52-week ranges are split into low/high.
5. When the source page doesn't expose a pre-computed Short Ratio, the actor recomputes it as `shares_short / avg_daily_volume`. When prior-period short interest is exposed, period-over-period `change_pct` is computed inline.
6. The deterministic squeeze score is computed from short % of float, days to cover, and current price's position in the 52-week range (see "How the squeeze score is built" above). Anything `>= 70` is marked `is_squeeze_candidate = true`.
7. Filters are applied last: `min_short_pct_of_float`, `min_days_to_cover`, `squeeze_candidates_only`, and `sector` are all applied **after** parsing so that the squeeze score reflects raw numbers and only matching rows are emitted (and charged).
8. The actor throttles politely between symbols (0.3–0.8 second random sleep) to keep the source page happy and to avoid any rate-limiting. A symbol that 404s or returns no parseable short-interest fields is skipped silently — you only pay for rows that actually carry data.

***

### Operational notes

- **No proxy needed.** stockanalysis.com is unauthenticated and tolerates moderate concurrency from a residential or datacenter IP. The actor sequences symbols rather than fanning out aggressively, both to be polite and to keep the squeeze-score computation deterministic across runs.
- **FINRA cadence.** FINRA publishes the bi-monthly short-interest report twice a month: a "mid-month" snapshot (settlement around the 15th) and an "end-of-month" snapshot (last business day). Both are released ~8 trading days after settlement. The most rewarding cron schedule is **the morning after publication** — 2x/month.
- **Curated universe vs full FINRA file.** The default 50-name universe is a curated list of historically high-short-interest US names. To cover the full US universe, pass your own `symbols` list (the actor accepts up to a few hundred per pull) or chain it from a separate screener (see the Finviz Stock Screener below).
- **Stale rows.** When a symbol has had a corporate action (ticker change, bankruptcy delisting, reverse split absorbed by an acquirer), the page may 404 or return no short-interest fields — the actor skips silently. Re-run with an updated symbol list.
- **What this is not.** This is not real-time short volume (FINRA Reg SHO daily file) — that data is published daily with one-day delay and tracks intraday short *trades*, not short *interest*. The two metrics diverge meaningfully; FINRA bi-monthly is the institutional benchmark for "how short is this name", and is what Bloomberg / Ortex / S3 base their primary numbers on.
- **Penny stocks.** Sub-$1 names with extreme short ratios often have stale or missing FINRA data because of low float and dispersed ownership. Treat extreme `days_to_cover` (>30) values as suspicious unless corroborated.
- **Borrow rate.** This actor does not return borrow rate / cost-to-borrow — that data is published only by Ortex / S3 / S\&P IBKR and is not in the FINRA tape. If you need it, layer it from your prime broker.

***

### The full NexGenData market-intelligence fleet

This actor is one piece of a coordinated fleet — combine them to build a full Bloomberg-on-Apify stack at a fraction of the cost.

- **📊 [Finviz Stock Screener](https://apify.com/nexgendata/finviz-stock-screener)** — fundamentals + technicals + short-interest screener over the entire US universe. Use it to build a candidate list of high-short-interest names, then pipe the ticker list into this actor for per-name FINRA detail and squeeze scoring.
- **📋 [SEC Form 4 Insider Tracker](https://apify.com/nexgendata/sec-form4-insider-tracker)** — real-time insider buys and sells. When insiders buy *into* a high-short-interest name, the contrarian setup is one of the highest-historical-signal squeeze precursors.
- **🏛️ [SEC Form 13F Holdings Tracker](https://apify.com/nexgendata/sec-form-13f-holdings-tracker)** — quarterly institutional holdings. Cross-reference 13F net-new shorts against this actor's `change_pct` to spot where institutions are stacking positioning.
- **🧺 [ETF Holdings Tracker](https://apify.com/nexgendata/etf-holdings-tracker)** — constituent holdings and weights for US ETFs. Useful for understanding which ETFs hold a heavily-shorted name (forced ETF rebalancing can compound a squeeze).
- **📅 [Earnings Calendar](https://apify.com/nexgendata/earnings-calendar)** — upcoming earnings with EPS consensus and surprise history. Pair with short interest to spot pre-earnings short crowdings — historically the highest-volatility setups.
- **🤖 [Finance MCP Server](https://apify.com/nexgendata/finance-mcp-server)** — the same data, exposed as a Model Context Protocol server for Claude Desktop, Cursor, and other LLM clients. Ask "which high-short-interest names report earnings next week" in natural language and get a stitched answer back.

***

### Affiliate / referral

If this actor saves you an Ortex subscription, an S3 Partners license, or a Bloomberg seat, consider supporting NexGenData by using our affiliate link when you sign up for Apify:

**https://apify.com/nexgendata?fpr=2ayu9b**

Every signup helps keep the fleet maintained, the parsers up to date with stockanalysis.com layout changes, and the prices honest.

# Actor input Schema

## `symbols` (type: `array`):

Limit results to a specific list of stock tickers (e.g. GME, AMC, CVNA). Leave empty to scan the curated high-short-interest universe.

## `limit` (type: `integer`):

Maximum number of short interest records to return per run. Each record is billed at $0.10. Use a small limit to validate output, then scale up.

## `min_short_pct_of_float` (type: `integer`):

Only return stocks with short interest above this percentage of float (most-watched squeeze metric). Set to 0 to disable.

## `min_days_to_cover` (type: `integer`):

Only return stocks with days-to-cover above this threshold. Days to cover = shares short / average daily volume. Higher = harder for shorts to exit.

## `squeeze_candidates_only` (type: `boolean`):

Return only stocks flagged as squeeze candidates (high short % of float + high days to cover + recent positive price action). Squeeze score >= 70.

## `sector` (type: `string`):

Filter results by sector (e.g. Technology, Consumer Cyclical, Healthcare). Leave blank for all sectors.

## Actor input object example

```json
{
  "symbols": [],
  "limit": 25,
  "min_short_pct_of_float": 10,
  "min_days_to_cover": 0,
  "squeeze_candidates_only": false,
  "sector": ""
}
```

# 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 = {
    "symbols": [],
    "limit": 25,
    "min_short_pct_of_float": 10,
    "min_days_to_cover": 0,
    "squeeze_candidates_only": false,
    "sector": ""
};

// Run the Actor and wait for it to finish
const run = await client.actor("nexgendata/short-interest-tracker").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 = {
    "symbols": [],
    "limit": 25,
    "min_short_pct_of_float": 10,
    "min_days_to_cover": 0,
    "squeeze_candidates_only": False,
    "sector": "",
}

# Run the Actor and wait for it to finish
run = client.actor("nexgendata/short-interest-tracker").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print("💾 Check your data here: https://console.apify.com/storage/datasets/" + run["defaultDatasetId"])
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "symbols": [],
  "limit": 25,
  "min_short_pct_of_float": 10,
  "min_days_to_cover": 0,
  "squeeze_candidates_only": false,
  "sector": ""
}' |
apify call nexgendata/short-interest-tracker --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=nexgendata/short-interest-tracker",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "📉 Short Interest Tracker — Days to Cover + Squeeze Score",
        "description": "Track FINRA bi-monthly short interest, % of float, days to cover, and squeeze-candidate scores across US-listed stocks. Real-time short positioning data for long-short hedge funds, prime brokers, squeeze traders, compliance teams. Bloomberg short-interest alternative — pay-per-result.",
        "version": "0.0",
        "x-build-id": "xxpwmMK8CjcMUekMe"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/nexgendata~short-interest-tracker/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-nexgendata-short-interest-tracker",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        },
        "/acts/nexgendata~short-interest-tracker/runs": {
            "post": {
                "operationId": "runs-sync-nexgendata-short-interest-tracker",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor and returns information about the initiated run in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/runsResponseSchema"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/acts/nexgendata~short-interest-tracker/run-sync": {
            "post": {
                "operationId": "run-sync-nexgendata-short-interest-tracker",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        }
    },
    "components": {
        "schemas": {
            "inputSchema": {
                "type": "object",
                "properties": {
                    "symbols": {
                        "title": "Specific tickers (optional)",
                        "type": "array",
                        "description": "Limit results to a specific list of stock tickers (e.g. GME, AMC, CVNA). Leave empty to scan the curated high-short-interest universe.",
                        "default": [],
                        "items": {
                            "type": "string"
                        }
                    },
                    "limit": {
                        "title": "Maximum number of records",
                        "minimum": 1,
                        "maximum": 500,
                        "type": "integer",
                        "description": "Maximum number of short interest records to return per run. Each record is billed at $0.10. Use a small limit to validate output, then scale up.",
                        "default": 25
                    },
                    "min_short_pct_of_float": {
                        "title": "Minimum short % of float",
                        "minimum": 0,
                        "maximum": 100,
                        "type": "integer",
                        "description": "Only return stocks with short interest above this percentage of float (most-watched squeeze metric). Set to 0 to disable.",
                        "default": 0
                    },
                    "min_days_to_cover": {
                        "title": "Minimum days to cover",
                        "minimum": 0,
                        "maximum": 90,
                        "type": "integer",
                        "description": "Only return stocks with days-to-cover above this threshold. Days to cover = shares short / average daily volume. Higher = harder for shorts to exit.",
                        "default": 0
                    },
                    "squeeze_candidates_only": {
                        "title": "Only squeeze candidates",
                        "type": "boolean",
                        "description": "Return only stocks flagged as squeeze candidates (high short % of float + high days to cover + recent positive price action). Squeeze score >= 70.",
                        "default": false
                    },
                    "sector": {
                        "title": "Sector filter (optional)",
                        "type": "string",
                        "description": "Filter results by sector (e.g. Technology, Consumer Cyclical, Healthcare). Leave blank for all sectors.",
                        "default": ""
                    }
                }
            },
            "runsResponseSchema": {
                "type": "object",
                "properties": {
                    "data": {
                        "type": "object",
                        "properties": {
                            "id": {
                                "type": "string"
                            },
                            "actId": {
                                "type": "string"
                            },
                            "userId": {
                                "type": "string"
                            },
                            "startedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "finishedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "status": {
                                "type": "string",
                                "example": "READY"
                            },
                            "meta": {
                                "type": "object",
                                "properties": {
                                    "origin": {
                                        "type": "string",
                                        "example": "API"
                                    },
                                    "userAgent": {
                                        "type": "string"
                                    }
                                }
                            },
                            "stats": {
                                "type": "object",
                                "properties": {
                                    "inputBodyLen": {
                                        "type": "integer",
                                        "example": 2000
                                    },
                                    "rebootCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "restartCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "resurrectCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "computeUnits": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "options": {
                                "type": "object",
                                "properties": {
                                    "build": {
                                        "type": "string",
                                        "example": "latest"
                                    },
                                    "timeoutSecs": {
                                        "type": "integer",
                                        "example": 300
                                    },
                                    "memoryMbytes": {
                                        "type": "integer",
                                        "example": 1024
                                    },
                                    "diskMbytes": {
                                        "type": "integer",
                                        "example": 2048
                                    }
                                }
                            },
                            "buildId": {
                                "type": "string"
                            },
                            "defaultKeyValueStoreId": {
                                "type": "string"
                            },
                            "defaultDatasetId": {
                                "type": "string"
                            },
                            "defaultRequestQueueId": {
                                "type": "string"
                            },
                            "buildNumber": {
                                "type": "string",
                                "example": "1.0.0"
                            },
                            "containerUrl": {
                                "type": "string"
                            },
                            "usage": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "integer",
                                        "example": 1
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "usageTotalUsd": {
                                "type": "number",
                                "example": 0.00005
                            },
                            "usageUsd": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "number",
                                        "example": 0.00005
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
