# Short Interest & Short Volume: FINRA, All US Stocks (`tacps126/short-interest`) Actor

FINRA short interest for every US stock (NYSE, Nasdaq, Arca, Cboe, OTC): short interest, change, days to cover, average volume, plus daily short-sale volume and short ratio. By ticker with one year of history, or the whole market with filters.

- **URL**: https://apify.com/tacps126/short-interest.md
- **Developed by:** [Tapaswai Choudhary](https://apify.com/tacps126) (community)
- **Categories:** Business, Automation, Developer tools
- **Security:** Limited permissions
- **Stats:** 1 total users, 0 monthly users, 0.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $4.00 / 1,000 rows

This Actor is paid per event and usage. You are charged both the fixed price for specific events and for Apify platform usage.
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

## Short Interest & Short Volume: FINRA, All US Stocks

Short interest for **every US stock**: NYSE, Nasdaq, NYSE Arca, NYSE American, Cboe and OTC, about 22,000 stocks per settlement date, straight from FINRA's official consolidated short interest. Look up your tickers with up to a year of history, or scan the whole market for the most-shorted stocks with filters. Add the **daily short-sale volume** and short ratio, or pull the daily files on their own.

**Built for** traders and short-squeeze screeners, quant and research teams, financial newsletters and dashboards, fintech apps and AI agents.

### What you get

| Field | Meaning |
|---|---|
| `symbol`, `issueName`, `market` | Ticker, company and listing market |
| `settlementDate` | The 15th or the last business day of the month |
| `shortInterest`, `previousShortInterest` | Shares held short now and on the date before |
| `change`, `changePercent` | Change since the date before |
| `avgDailyVolume`, `daysToCover` | Average daily volume and short interest ÷ volume |
| `shortVolumeRatio`, `shortVolumeDays` | Share of volume sold short over the days before the date (optional) |
| `stockSplit`, `revised` | FINRA's split and revision flags |

Daily short volume rows: `symbol`, `date`, `shortVolume`, `shortExemptVolume`, `totalVolume`, `shortRatio`.

### Why this Actor

- **Whole market in one run.** Every listed and OTC stock, not only one exchange: ~22,000 rows in about 10 seconds.
- **Screen it.** Minimum days to cover, short interest, change %, average volume and short volume ratio; sort by any of them.
- **History.** Up to 24 settlement dates (one year) per ticker.
- **Two datasets.** Twice-monthly short interest and daily short volume, joined on request.
- **Alerts.** Turn on *Only new* and schedule it: each new settlement date or trading day arrives once. Send it to Slack, Google Sheets, email or a webhook.
- **AI insights (optional).** Squeeze risk, what the numbers say (shorts building or covering) and what to watch next, in plain words; with your profile, a fit score.
- **For AI agents.** Callable as an MCP tool.

### How to use it

Most-shorted Nasdaq and NYSE stocks on the newest date:

```json
{
  "markets": ["Nasdaq", "NYSE"],
  "minDaysToCover": 10,
  "minAvgDailyVolume": 500000,
  "addShortVolume": true,
  "maxItems": 100
}
```

A year of history for your watchlist:

```json
{ "symbols": ["GME", "AMC", "TSLA"], "historyCycles": 24 }
```

Daily short volume, last 5 trading days, heavy short selling only:

```json
{ "dataset": "shortVolume", "shortVolumeDays": 5, "minTotalVolume": 1000000, "minShortRatio": 0.6 }
```

### Pricing

**$5 per 1,000 rows** (one stock on one date) plus a small start fee per run. AI insights, when you turn them on, are $0.01 each. On the Apify free plan a run returns up to 100 rows.

### Good to know

- FINRA publishes short interest about a week after each settlement date and keeps one rolling year. Daily short volume appears the evening of each trading day.
- Daily short volume covers trades reported to FINRA's facilities, not every exchange's own trades, so `shortRatio` is the share of that volume.
- Figures are as FINRA publishes them. Need another field or market? **Contact tacps126@gmail.com**.

# Actor input Schema

## `dataset` (type: `string`):

Short interest is the number of shares held short on a settlement date (the 15th and the month end). Daily short volume is the shares sold short each trading day.

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

Stock tickers, e.g. GME or BRK.A. Leave empty for the whole market (about 22,000 stocks; use the filters below).

## `settlementDate` (type: `string`):

Short interest settlement date as YYYY-MM-DD, e.g. 2026-10-15. Empty = the newest published.

## `historyCycles` (type: `integer`):

For tickers: how many settlement dates back (24 = one year of history).

## `addShortVolume` (type: `boolean`):

Add each stock's share of volume sold short over the trading days before the settlement date (`shortVolumeRatio`).

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

Daily short volume: how many trading days back. With "Add short volume ratio": how many days are averaged.

## `markets` (type: `array`):

Short interest only. Empty = every market.

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

Short interest divided by average daily volume, e.g. 5.

## `minShortInterest` (type: `integer`):

e.g. 1000000.

## `minChangePercent` (type: `number`):

e.g. 20 for short interest up 20% or more; -100 keeps everything.

## `minAvgDailyVolume` (type: `integer`):

Leaves out thinly traded stocks, e.g. 100000.

## `minShortRatio` (type: `number`):

Share of volume sold short, 0 to 1, e.g. 0.5.

## `minTotalVolume` (type: `integer`):

Daily short volume only: leave out days with less volume.

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

Newest date first, then this (highest first).

## `maxItems` (type: `integer`):

Most rows returned.

## `onlyNew` (type: `boolean`):

Schedule the Actor and each run returns only rows (ticker + date) that earlier runs did not deliver: each new settlement date or trading day once.

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

Optional name for the "only new" history, so several monitors can run side by side.

## `tenantId` (type: `string`):

Optional label used to keep separate histories for different clients or teams.

## `aiInsights` (type: `boolean`):

Add an `insight` to each row: what the short position says, the squeeze risk and what to watch; with a profile, how relevant it is to you.

## `aiProfile` (type: `string`):

What you trade or watch, e.g. "Small-cap biotech swing trader, looks for short squeezes with rising short interest". Adds a fit score.

## `aiLanguage` (type: `string`):

Insights are written in this language, whatever the source language.

## `maxInsights` (type: `integer`):

Insights are added to the first N rows (in the sort order).

## `aiProvider` (type: `string`):

Which AI does the analysis. Apify needs no key: the model's tokens are billed to your Apify account by Apify's AI gateway (a fraction of a cent per call with the default model). Any other provider uses your own key and bills you there.

## `aiApiKey` (type: `string`):

Your own key for the provider above (not needed for Apify). Sent only to that provider, never stored.

## `aiModel` (type: `string`):

Model name. Apify: an OpenRouter id like anthropic/claude-sonnet-... or google/gemini-... (default: the newest Claude Haiku listed, a light model since it runs once per result). Anthropic: default claude-opus-5-5. Others: required.

## `aiBaseUrl` (type: `string`):

Only for "Other OpenAI-compatible API", e.g. http://localhost:11434/v1 for Ollama.

## `debug` (type: `boolean`):

Save extra diagnostics with the run (for support requests).

## Actor input object example

```json
{
  "dataset": "shortInterest",
  "symbols": [
    "GME",
    "AMC",
    "TSLA",
    "AAPL"
  ],
  "historyCycles": 1,
  "addShortVolume": false,
  "shortVolumeDays": 5,
  "sortBy": "daysToCover",
  "maxItems": 500,
  "onlyNew": false,
  "aiInsights": false,
  "aiLanguage": "English",
  "maxInsights": 25,
  "aiProvider": "apify",
  "debug": false
}
```

# Actor output Schema

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

The produced items (default dataset items).

# 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": [
        "GME",
        "AMC",
        "TSLA",
        "AAPL"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("tacps126/short-interest").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": [
        "GME",
        "AMC",
        "TSLA",
        "AAPL",
    ] }

# Run the Actor and wait for it to finish
run = client.actor("tacps126/short-interest").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 '{
  "symbols": [
    "GME",
    "AMC",
    "TSLA",
    "AAPL"
  ]
}' |
apify call tacps126/short-interest --silent --output-dataset

```

## MCP server setup

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

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/4CtPvtlDwdPd9bBlG/builds/KXvNJvTqHkfVJdRMe/openapi.json
