# Stock Short Interest Scraper (US Tickers, History) (`scrapers_lat/stock-short-interest-scraper`) Actor

Scrape bi-monthly short interest for US stocks (Nasdaq + NYSE) by ticker: shares short, days to cover, average daily volume, change vs prior period and the full reported history. Export to JSON, CSV or Excel.

- **URL**: https://apify.com/scrapers\_lat/stock-short-interest-scraper.md
- **Developed by:** [Scrapers Lat](https://apify.com/scrapers_lat) (community)
- **Categories:** Automation, Developer tools
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $11.34 / 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.
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

[![Stock Short Interest Scraper (US Tickers, History)](https://scrapers.lat/banners/stock-short-interest-scraper.png)](https://console.apify.com/actors/nmpjlfZvSN8h85rGH/input)

## Stock Short Interest Scraper (US Tickers, History)

Here is one real result, with every field the actor returns:

```json
{
  "ticker": "AAPL",
  "companyName": "Apple Inc. Common Stock",
  "exchange": "NASDAQ-GS",
  "stockType": "Common Stock",
  "lastSalePrice": 316.5101,
  "settlementDate": "07/31/2026",
  "sharesShort": 141606163,
  "avgDailyVolume": 58400983,
  "daysToCover": 2.42,
  "priorSettlementDate": "07/15/2026",
  "priorSharesShort": 146547784,
  "changeVsPrior": -4941621,
  "pctChangeVsPrior": -3.37,
  "historyCount": 12,
  "history": [
    { "settlementDate": "07/31/2026", "sharesShort": 141606163, "avgDailyVolume": 58400983, "daysToCover": 2.42 },
    { "settlementDate": "07/15/2026", "sharesShort": 146547784, "avgDailyVolume": 47952794, "daysToCover": 3.06 },
    { "settlementDate": "06/30/2026", "sharesShort": 140526320, "avgDailyVolume": 81121306, "daysToCover": 1.73 },
    { "settlementDate": "06/15/2026", "sharesShort": 144248476, "avgDailyVolume": 52343843, "daysToCover": 2.76 },
    { "settlementDate": "05/29/2026", "sharesShort": 155886024, "avgDailyVolume": 46064146, "daysToCover": 3.38 },
    { "settlementDate": "05/15/2026", "sharesShort": 138782718, "avgDailyVolume": 50565316, "daysToCover": 2.74 }
  ],
  "aiSqueezeRisk": null,
  "aiTrend": null,
  "aiInterpretation": null,
  "url": "https://www.nasdaq.com/market-activity/stocks/aapl/short-interest",
  "source": "nasdaq.com",
  "observedAt": "2026-08-20T14:40:00.000Z",
  "error": null
}
```

The most complete short interest scraper available for US equities. It returns every field the official bi-monthly short interest report exposes for a ticker (shares short, average daily volume, days to cover, settlement date), plus derived fields the raw report does not give you (change and percent change versus the prior period), and the full reported history as one clean time series. Works for both Nasdaq and NYSE listed stocks, so you get consolidated coverage in a single run.

**📥 [Input](https://apify.com/scrapers_lat/stock-short-interest-scraper/input-schema) · 📤 [Output](https://apify.com/scrapers_lat/stock-short-interest-scraper/output-schema) · 💰 [Pricing](https://apify.com/scrapers_lat/stock-short-interest-scraper/pricing) · ▶️ [Examples](https://apify.com/scrapers_lat/stock-short-interest-scraper/examples)**

![Platform](https://img.shields.io/badge/platform-Apify-1a1a1a) ![Coverage](https://img.shields.io/badge/coverage-Nasdaq%20%2B%20NYSE-2ea44f) ![Output](https://img.shields.io/badge/output-JSON%20%7C%20CSV%20%7C%20Excel-4c8bf5) ![Billing](https://img.shields.io/badge/billing-Pay%20per%20result-f1be4b)

### Table of contents

- [What it does](#what-it-does)
- [Quickstart](#quickstart)
- [Input reference](#input-reference)
- [Output reference](#output-reference)
- [Example output record](#example-output-record)
- [Run via API and CLI](#run-via-api-and-cli)
- [Fetch results](#fetch-results)
- [Billing and limits](#billing-and-limits)
- [FAQ and troubleshooting](#faq-and-troubleshooting)
- [More scrapers at scrapers.lat](#more-scrapers-at-scraperslat)

### What it does

Give it a list of US stock tickers and it returns the reported short interest for each one: the latest bi-monthly settlement period plus the full history series. For every ticker you get:

- Shares sold short at the most recent settlement date
- Average daily share volume for that period
- Days to cover (the short interest ratio)
- The change and percent change in shares short versus the prior period
- The complete reported history as an array of periods, newest first, so you can chart the trend
- Company name, listing exchange, security type and the most recent quoted price
- An optional AI short-squeeze signal (squeeze risk, trend label, one-line interpretation)

Short interest is published roughly twice a month, so the history lets you track how bearish positioning is building or unwinding on a name over time.

### Quickstart

Real input example:

```json
{
  "tickers": ["AAPL", "TSLA", "GME"],
  "historyPeriods": 12,
  "maxResults": 10
}
```

Run it and you get one record per ticker, each with the latest short interest and the history series. Add `"aiShortSignal": true` (paid plans) to attach an AI read of squeeze risk and trend.

### Input reference

| Name | Type | Required | Description | Example |
| --- | --- | --- | --- | --- |
| `tickers` | array of strings | yes | US stock tickers to pull short interest for. Works for Nasdaq and NYSE listed stocks. | `["AAPL", "TSLA", "GME"]` |
| `historyPeriods` | integer | no | How many recent bi-monthly settlement periods to include in the history series (newest first). Default 12, max 60. | `12` |
| `maxResults` | integer | no | Maximum number of stock records to collect across the run. Free plans are capped at 10. | `10` |
| `aiShortSignal` | boolean | no | Attach an AI squeeze-risk rating, trend label and one-line interpretation. Off by default, paid plans only, charged only on a usable result. | `false` |

### Output reference

| Name | Type | Description |
| --- | --- | --- |
| `ticker` | string | Stock ticker symbol |
| `companyName` | string | Company name |
| `exchange` | string | Listing exchange code, e.g. NASDAQ-GS or NYSE |
| `stockType` | string | Security type, e.g. Common Stock |
| `lastSalePrice` | number | Most recent quoted share price in USD |
| `settlementDate` | string | Settlement date of the latest reported period (MM/DD/YYYY) |
| `sharesShort` | number | Shares sold short at the latest settlement date |
| `avgDailyVolume` | number | Average daily share volume for the latest period |
| `daysToCover` | number | Days to cover (short interest ratio) for the latest period |
| `priorSettlementDate` | string | Settlement date of the prior reported period |
| `priorSharesShort` | number | Shares short at the prior settlement date |
| `changeVsPrior` | number | Change in shares short versus the prior period |
| `pctChangeVsPrior` | number | Percent change in shares short versus the prior period |
| `historyCount` | number | Number of periods included in the history series |
| `history` | array | Full short-interest history, newest first. Each item has settlementDate, sharesShort, avgDailyVolume and daysToCover. |
| `aiSqueezeRisk` | string | AI add-on: squeeze-risk rating (low, moderate, elevated, high) |
| `aiTrend` | string | AI add-on: short-interest trend (rising, falling, flat) |
| `aiInterpretation` | string | AI add-on: one-line interpretation |
| `url` | string | Public short-interest page for the ticker |
| `source` | string | Data source |
| `observedAt` | string | ISO timestamp when the record was collected |
| `error` | string | Error message for a failed ticker (null on success) |

### Example output record

This GameStop record is served from the consolidated FINRA short-interest dataset, which the actor uses automatically for NYSE listed tickers:

```json
{
  "ticker": "GME",
  "companyName": "GameStop Corp. Class A",
  "exchange": "NYSE",
  "stockType": null,
  "lastSalePrice": null,
  "settlementDate": "07/31/2026",
  "sharesShort": 53736062,
  "avgDailyVolume": 3150012,
  "daysToCover": 17.06,
  "priorSettlementDate": "07/15/2026",
  "priorSharesShort": 55426276,
  "changeVsPrior": -1690214,
  "pctChangeVsPrior": -3.05,
  "historyCount": 12,
  "aiSqueezeRisk": null,
  "aiTrend": null,
  "aiInterpretation": null,
  "source": "finra.org",
  "observedAt": "2026-08-20T14:45:00.000Z",
  "error": null
}
```

### Run via API and CLI

Start a run with the Apify API:

```bash
curl -X POST "https://api.apify.com/v2/acts/scrapers_lat~stock-short-interest-scraper/runs?token=YOUR_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"tickers":["AAPL","TSLA","GME"],"historyPeriods":12,"maxResults":10}'
```

Or with the Apify CLI:

```bash
apify call scrapers_lat/stock-short-interest-scraper \
  --input '{"tickers":["AAPL","TSLA","GME"],"historyPeriods":12,"maxResults":10}'
```

### Fetch results

Read the dataset items once the run finishes:

```bash
curl "https://api.apify.com/v2/actor-runs/RUN_ID/dataset/items?token=YOUR_TOKEN&clean=true&format=json"
```

Swap `format=json` for `format=csv` or `format=xlsx` to export to CSV or Excel.

### Billing and limits

- Pay per result. You are charged for the actor start and for each ticker record returned.
- The AI short-squeeze signal is an optional add-on, off by default, and is charged only when a usable signal is returned.
- Empty and failed runs are never charged. Unknown or delisted tickers return an error row with no charge.
- Free Apify plans are capped at 10 records per run, and paid add-ons are disabled on free plans.
- The actor respects your spend limit: once your configured maximum charge is reached it stops returning and charging further records.

### FAQ and troubleshooting

**Which stocks are covered?** US equities listed on Nasdaq and NYSE. Provide the plain ticker symbol.

**How often is short interest updated?** Short interest is reported on a bi-monthly schedule (roughly twice a month), a few business days after each settlement date. The history series reflects every reported period available.

**Why is a ticker returning an error row?** The symbol is likely unknown, delisted, or not a reporting equity. Error rows are never charged.

**Can I get more history?** Yes. Raise `historyPeriods` up to 60 to include more past settlement periods in the series.

**What is days to cover?** The short interest ratio: shares short divided by average daily volume, an estimate of how many trading days it would take to buy back all short positions.

### More scrapers at scrapers.lat

Building market and finance datasets? Pair this with our Finviz stock fundamentals scraper, European net short positions scraper, and other finance and company data actors on [scrapers.lat](https://scrapers.lat).

This is an independent scraper of public data and is not affiliated with, endorsed by, or connected to Nasdaq, NYSE, FINRA, or any exchange.

# Actor input Schema

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

US stock tickers to pull short interest for, e.g. AAPL, TSLA, GME. Works for Nasdaq and NYSE listed stocks. One record per ticker with the latest reported period plus the full history.

## `historyPeriods` (type: `integer`):

How many recent bi-monthly settlement periods to include in the history series for each ticker (newest first). Short interest is reported roughly twice a month.

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

Maximum number of stock records to collect across the whole run. Free Apify plans are capped at 10 per run.

## `aiShortSignal` (type: `boolean`):

Use AI to add a squeeze-risk rating, a short-interest trend label and a one-line interpretation from the short-interest history and days to cover. Charged only when a usable signal is returned. Disabled on free plans.

## Actor input object example

```json
{
  "tickers": [
    "AAPL",
    "TSLA",
    "GME"
  ],
  "historyPeriods": 12,
  "maxResults": 10,
  "aiShortSignal": false
}
```

# 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 = {
    "tickers": [
        "AAPL",
        "TSLA",
        "GME"
    ],
    "historyPeriods": 12,
    "maxResults": 10
};

// Run the Actor and wait for it to finish
const run = await client.actor("scrapers_lat/stock-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 = {
    "tickers": [
        "AAPL",
        "TSLA",
        "GME",
    ],
    "historyPeriods": 12,
    "maxResults": 10,
}

# Run the Actor and wait for it to finish
run = client.actor("scrapers_lat/stock-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 '{
  "tickers": [
    "AAPL",
    "TSLA",
    "GME"
  ],
  "historyPeriods": 12,
  "maxResults": 10
}' |
apify call scrapers_lat/stock-short-interest-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,scrapers_lat/stock-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/nmpjlfZvSN8h85rGH/builds/4CkUuPdQBw2wHXq9o/openapi.json
