# US Short Interest Scraper: NYSE, Nasdaq and OTC via FINRA Data (`getascraper/short-interest-scraper`) Actor

Extract official FINRA short interest for any US security: NYSE, Nasdaq, Arca and OTC. Short interest, days to cover, period change, plus a look-ahead-safe knowable date for backtests. History to 2017. Export to Google Sheets, Slack or Zapier. $2 per 1,000 rows.

- **URL**: https://apify.com/getascraper/short-interest-scraper.md
- **Developed by:** [GetAScraper](https://apify.com/getascraper) (community)
- **Categories:** Lead generation, Automation, Other
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $1.50 / 1,000 short interests

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?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
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.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — 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

## 📉 US Short Interest Scraper: NYSE, Nasdaq and OTC via FINRA Data

<table width="100%">
<tr>
<td style="padding:24px 28px;background:#FEF2F2;border:1px solid #FECACA;border-top:4px solid #991B1B;border-radius:12px">
<span style="font-size:23px;font-weight:800;color:#1C1917;line-height:1.3">Short interest for every US ticker, not just the Nasdaq ones</span><br>
<span style="font-size:15px;color:#57534E;line-height:1.6">Official FINRA data for NYSE, Nasdaq, NYSE Arca and OTC securities. Short interest, days to cover, and period change, going back to 2017.</span>
</td>
</tr>
</table>

<table width="100%">
<tr>
<td style="padding:14px 12px;width:25%;background:#FFFFFF;border:1px solid #FECACA;border-radius:10px 0 0 10px;vertical-align:top">
<span style="font-size:15px;font-weight:800;color:#991B1B">🏛️ Every US market</span><br>
<span style="font-size:12px;color:#57534E">NYSE, Nasdaq, Arca and OTC. Tickers like IBM and SPY that Nasdaq-only tools miss entirely.</span>
</td>
<td style="padding:14px 12px;width:25%;background:#FFFFFF;border:1px solid #FECACA;border-left:none;vertical-align:top">
<span style="font-size:15px;font-weight:800;color:#991B1B">📅 History back to 2017</span><br>
<span style="font-size:12px;color:#57534E">Over 200 settlement periods, not the twelve months most tools stop at.</span>
</td>
<td style="padding:14px 12px;width:25%;background:#FFFFFF;border:1px solid #FECACA;border-left:none;vertical-align:top">
<span style="font-size:15px;font-weight:800;color:#991B1B">🎯 Backtest-safe dates</span><br>
<span style="font-size:12px;color:#57534E">Every row carries the date the figure actually became public, not just the settlement date.</span>
</td>
<td style="padding:14px 12px;width:25%;background:#FFFFFF;border:1px solid #FECACA;border-left:none;border-radius:0 10px 10px 0;vertical-align:top">
<span style="font-size:15px;font-weight:800;color:#991B1B">🔔 Quiet until it matters</span><br>
<span style="font-size:12px;color:#57534E">Monitor mode returns nothing until a genuinely new period publishes.</span>
</td>
</tr>
</table>

Pull official short interest data straight from [FINRA](https://www.finra.org/finra-data/browse-catalog/equity-short-interest), the regulator that collects it. Export to JSON, CSV or Excel, or connect it into Google Sheets and your own pipeline via the API. Run it on demand or on a schedule. No account, no API key, no coding required.

### ✨ Why use this Actor

**Built for anyone who needs short interest as data, not as a web page.**

- 📊 **Quant and systematic traders**: backtest crowding and squeeze signals on more than 200 settlement periods, with a date field that keeps hindsight out of your results.
- 🔍 **Squeeze watchers**: track days to cover and period-over-period short interest changes across a whole watchlist in one run.
- 🧑‍💻 **Fintech and app builders**: a clean, structured short interest feed to power your own screener or dashboard.

**Coverage is the difference.** Other short interest scrapers on the Store read Nasdaq's own site, so NYSE and Arca tickers such as IBM and SPY come back empty. This Actor reads FINRA's consolidated data, which covers every US market in one place.

### ⚙️ How it works

<table width="100%">
<tr>
<td style="padding:16px 14px;width:33%;background:#FEF2F2;border:1px solid #FECACA;border-radius:10px 0 0 10px;vertical-align:top">
<span style="font-size:12px;font-weight:800;color:#991B1B;letter-spacing:1px">STEP 1</span><br>
<span style="font-size:14px;font-weight:700;color:#1C1917">Add your tickers</span><br>
<span style="font-size:12px;color:#57534E">Any US symbols, or leave it empty to pull the whole market.</span>
</td>
<td style="padding:16px 14px;width:33%;background:#FEF2F2;border:1px solid #FECACA;border-left:none;vertical-align:top">
<span style="font-size:12px;font-weight:800;color:#991B1B;letter-spacing:1px">STEP 2</span><br>
<span style="font-size:14px;font-weight:700;color:#1C1917">Pick a period</span><br>
<span style="font-size:12px;color:#57534E">The latest settlement period, or any historical range back to 2017.</span>
</td>
<td style="padding:16px 14px;width:33%;background:#FEF2F2;border:1px solid #FECACA;border-left:none;border-radius:0 10px 10px 0;vertical-align:top">
<span style="font-size:12px;font-weight:800;color:#991B1B;letter-spacing:1px">STEP 3</span><br>
<span style="font-size:14px;font-weight:700;color:#1C1917">Get your data</span><br>
<span style="font-size:12px;color:#57534E">Short interest, days to cover and change land in your dataset, ready to export.</span>
</td>
</tr>
</table>

### 📥 Input

| Field | Type | Required | Description |
|---|---|---|---|
| `symbols` | array of strings | No | Tickers to fetch, e.g. TSLA, GME, IBM, SPY. Leave empty to pull every reported security for the period. |
| `market` | enum | No | Exchange-listed (NYSE, Nasdaq, Arca), OTC, or both. |
| `latestOnly` | boolean | No | Return only the most recently published settlement period. |
| `settlementDateFrom` | string | No | Start of a historical range, as YYYY-MM-DD. Used when `latestOnly` is off. |
| `settlementDateTo` | string | No | End of a historical range, as YYYY-MM-DD. Used when `latestOnly` is off. |
| `monitorMode` | boolean | No | Return nothing until a settlement period newer than your last run is published. |
| `maxItems` | integer | No | Stop after this many rows. |
| `proxyConfiguration` | object | No | Proxy settings. Datacenter by default, which is all this Actor needs. |

### 📤 Output

Every result is one security for one settlement period:

```json
{
  "symbol": "GME",
  "issueName": "GameStop Corp. Class A",
  "market": "NYSE",
  "settlementDate": "2026-08-14",
  "knowableDate": "2026-08-25",
  "shortInterest": 54036583,
  "previousShortInterest": 53736109,
  "shortInterestChange": 300474,
  "shortInterestChangePercent": 0.56,
  "averageDailyVolume": 10175619,
  "daysToCover": 5.31,
  "daysToCoverIsCapped": false
}
```

Download the dataset in JSON, CSV, Excel, HTML or XML from the Apify Console, or pull it through the API.

### 📊 Data table

| Field | Type | Description |
|---|---|---|
| `symbol` / `issueName` | string | Ticker and full security name. |
| `market` | string | The market the security trades on: NYSE, NNM, ARCA, BZX and others. |
| `marketScope` | string | Whether the row came from exchange-listed or OTC reporting. |
| `settlementDate` | string | The date the short positions were measured. |
| `knowableDate` | string | The date the figure became public. Use this one for backtests so you never act on data that had not been released yet. |
| `shortInterest` | number | Shares held short, as reported to FINRA. |
| `previousShortInterest` | number | The same figure for the prior settlement period. |
| `shortInterestChange` | number | Change in shares held short since the prior period. |
| `shortInterestChangePercent` | number | The same change, as a percentage. |
| `averageDailyVolume` | number | Average daily trading volume used for the days-to-cover calculation. |
| `daysToCover` | number | Days of average volume needed to cover the short position. |
| `daysToCoverIsCapped` | boolean | True when trading volume was near zero and the days-to-cover figure hit its reporting ceiling. Treat those values as unusable rather than as a real signal. |
| `hadStockSplit` / `isRevised` | boolean | Flags for a split during the period, or a later revision to the figure. |

The Output tab also ships three pre-built views: short interest overview, squeeze signals, and point-in-time history.

### 💰 Pricing

This Actor is pay per result: you only pay for the rows you actually collect, and a run that returns nothing costs nothing. There is no subscription and no minimum spend, so a monitor run that finds no new period is free.

### ⭐ Enjoying US Short Interest Scraper?

<table width="100%" style="display:table;width:100%">
<tr>
<td style="padding:20px 24px 14px;background:#FEF2F2;border:1px solid #FECACA;border-left:5px solid #991B1B;border-radius:10px 10px 0 0">
<span style="font-size:20px;letter-spacing:4px">⭐ ⭐ ⭐ ⭐ ⭐</span><br>
<span style="font-size:17px;font-weight:800;color:#1C1917">Found the NYSE tickers other short interest tools left out?</span><br>
<span style="font-size:14px;color:#57534E">A 5-star rating takes 10 seconds and helps other traders and analysts find it. Your feedback also tells us what to build next.</span>
</td>
</tr>
<tr>
<td style="padding:0;background:#991B1B;border:1px solid #FECACA;border-top:none;border-radius:0 0 10px 10px;text-align:center">
<a href="https://apify.com/getascraper/short-interest-scraper/reviews" style="display:block;padding:13px 16px;color:#FFFFFF;text-decoration:none;font-weight:800;font-size:15px;letter-spacing:0.3px">★&nbsp;&nbsp;Rate this Actor on Apify</a>
</td>
</tr>
</table>

### 🛠️ Tips for better runs

- Short interest publishes twice a month, on the 15th and the last business day, and appears about seven business days later. Schedule around that rhythm.
- Turn on monitor mode for scheduled runs. It stays silent until a new period lands, so you never pay for duplicate rows.
- For a whole-market pull, leave `symbols` empty and raise `maxItems`. A single settlement period covers thousands of securities.
- Sort by `daysToCover` in the squeeze view, but filter out rows where `daysToCoverIsCapped` is true first.

### ❓ FAQ

**Does this include cost to borrow or short percent of float?**
No. FINRA publishes short interest, average daily volume and days to cover, and this Actor reports exactly those. Cost to borrow, percent of float and utilization come from other sources and are not included.

**Why do other short interest scrapers return nothing for IBM or SPY?**
They read Nasdaq's own site, which only carries Nasdaq-listed securities. This Actor reads FINRA's consolidated data, so NYSE, NYSE Arca and OTC securities are all covered.

**How accurate is the knowable date?**
It applies FINRA's published schedule of seven business days after settlement. It counts weekends but not market holidays, so in a holiday week the real publication date can be a day later. It is a close guide, not an exact timestamp.

**Is it legal to use this data?**
Short interest reporting is required of broker-dealers under FINRA rules, and FINRA publishes the results as public data. This Actor reads that public source. You are responsible for how you use the data.

**How far back does the history go?**
To late 2017, covering more than 200 settlement periods. Turn off "latest settlement period only" and set a date range to pull history.

Found a bug or need a custom version of this Actor? Open an issue from the Actor's Issues tab and it'll be looked at directly.

### 🔗 Other actors

- [Capitol Trades Scraper: Congress Stock Trades & Monitor Mode](https://apify.com/getascraper/capitol-trades-scraper) ↗ - US Congress stock trade disclosures with the same monitor-mode pattern.
- [Simply Wall St Scraper: Snowflake Scores and Fair Value](https://apify.com/getascraper/simply-wall-street-scraper) ↗ - stock valuation scores, fair value and analyst targets.
- [eToro Scraper: Top Investors & Portfolio Stats](https://apify.com/getascraper/etoro-scraper) ↗ - trader leaderboards and portfolio statistics.
- [Forge Global Scraper: Pre-IPO Valuations & Funding Rounds](https://apify.com/getascraper/forge-global-scraper) ↗ - private pre-IPO company valuations.
- [Dealroom Scraper: Company Funding and Investor Cap Tables](https://apify.com/getascraper/dealroom-scraper) ↗ - startup funding rounds and investor cap tables.

# Actor input Schema

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

Tickers to fetch, e.g. TSLA, GME, IBM, SPY. Works for NYSE, Nasdaq, NYSE Arca and OTC. Leave empty to pull every reported security for the selected period (see Max rows before you do).

## `market` (type: `string`):

"Exchange-listed" covers NYSE, Nasdaq and NYSE Arca. "OTC" covers over-the-counter securities. "Both" queries each in turn.

## `latestOnly` (type: `boolean`):

Return only the most recently published settlement period. Turn this off to pull a historical range, which returns far more rows.

## `settlementDateFrom` (type: `string`):

Start of the settlement-date range, as YYYY-MM-DD. Only used when "Latest settlement period only" is off. Leave empty to start from the oldest period available.

## `settlementDateTo` (type: `string`):

End of the settlement-date range, as YYYY-MM-DD. Only used when "Latest settlement period only" is off. Leave empty to run through the newest period.

## `monitorMode` (type: `boolean`):

Remembers the last settlement period collected and returns nothing until a newer one is published. Pair it with a schedule to get a clean feed with no duplicates.

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

Stop after this many rows. Raise it for whole-market pulls, where a single settlement period covers thousands of securities.

## `proxyConfiguration` (type: `object`):

Proxy settings. Datacenter is the default and is all this Actor needs, since the data comes from an official public source with no blocking.

## Actor input object example

```json
{
  "symbols": [
    "TSLA",
    "GME",
    "AMC"
  ],
  "market": "exchange",
  "latestOnly": true,
  "monitorMode": false,
  "maxItems": 25,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}
```

# Actor output Schema

## `results` (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 = {
    "symbols": [
        "TSLA",
        "GME",
        "AMC"
    ],
    "market": "exchange",
    "maxItems": 25,
    "proxyConfiguration": {
        "useApifyProxy": true
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("getascraper/short-interest-scraper").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": [
        "TSLA",
        "GME",
        "AMC",
    ],
    "market": "exchange",
    "maxItems": 25,
    "proxyConfiguration": { "useApifyProxy": True },
}

# Run the Actor and wait for it to finish
run = client.actor("getascraper/short-interest-scraper").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": [
    "TSLA",
    "GME",
    "AMC"
  ],
  "market": "exchange",
  "maxItems": 25,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}' |
apify call getascraper/short-interest-scraper --silent --output-dataset

```

## MCP server setup

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

```

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/VjgVj0FEpYD87Hiec/builds/Tz6RKHQWzCBmA65dD/openapi.json
