Howwise RSS
Trading Software8 min read

Daily Short Interest Data Free: Real Sources and Limits

Short answer

True daily short interest data is not free, because it is not public at all: firms report open short positions to FINRA only twice a month. The closest free substitutes are FINRA's daily short sale volume files and twice-monthly short interest.

Key takeaways
  • Official short interest is published only for two settlement dates per month, about 7 business days after each date; anything labeled daily is a vendor estimate or a different metric.
  • FINRA's Reg SHO daily files at cdn.finra.org are free and posted the evening of the trade date, but they measure short sale volume (a flow), not short interest (a stock).
  • A short volume ratio of 40-50% is normal for many stocks because of market maker activity, so it says little about bearish positioning.
  • In backtests, key short interest to its publication date rather than its settlement date, or the result contains look-ahead bias.
  • Borrow fee and shortable-share availability are the best free-ish proxies for current short demand, but they are proxies, not position counts.

Is there any free daily short interest data?

No official source publishes daily short interest. Broker-dealers report their customers' and their own open short positions to FINRA only for two settlement dates per month (mid-month and end of month), and FINRA publishes the aggregate roughly 7 business days later. So the answer to "how often is short interest updated" is twice a month, with a lag.

Daily figures sold by securities-lending data vendors such as S3 Partners, Ortex and Fintel are modeled estimates built from lending and borrow data. They can be useful, but they are not regulatory counts.

The free daily dataset people actually mean is short sale volume. Mixing the two up is the most common mistake, so the definitions come first.

PropertyShort interestShort sale volume
TypeStock: total open short position at a point in timeFlow: shares sold short during one trading day
MeasuredOn a settlement date (twice a month)Every trading day
Can be netted by covering?Yes, covering reduces itNo, it only counts sales, never buys to cover
Typical rangeOften 0.5% to 20% of float, higher for extreme namesOften 30% to 60% of daily volume for many stocks
Free sourceFINRA, Nasdaq, NYSE pages and FINRA APIFINRA Reg SHO daily files
Warning: Short volume cannot be summed over days to get short interest. Because covering purchases are not recorded in it, the cumulative figure drifts without bound and means nothing as a position count.

How do I download FINRA Reg SHO daily short volume files?

FINRA posts one pipe-delimited text file per trade date, usually the evening of that date. The consolidated file is named CNMSshvolYYYYMMDD.txt and lives under cdn.finra.org/equity/regsho/daily/. Per-venue files use other prefixes (for example FNQCshvol for the Nasdaq facility and FNYXshvol for the NYSE facility), which is useful if you want to see where the volume was reported.

The columns are Date|Symbol|ShortVolume|ShortExemptVolume|TotalVolume|Market. Weekends and market holidays have no file, and the CDN returns 403 or 404 for them, so treat those codes as "no data" rather than as errors. Files can also end with a trailer line, so coerce numeric columns and drop rows that fail.

import io
import requests
import pandas as pd

BASE = "https://cdn.finra.org/equity/regsho/daily/"

def get_short_volume(day, prefix="CNMS"):
    url = f"{BASE}{prefix}shvol{day:%Y%m%d}.txt"
    r = requests.get(url, timeout=30)
    if r.status_code in (403, 404):
        return None  # weekend, holiday, or not posted yet
    r.raise_for_status()
    df = pd.read_csv(io.StringIO(r.text), sep="|", dtype={"Symbol": str})
    for c in ["ShortVolume", "ShortExemptVolume", "TotalVolume"]:
        df[c] = pd.to_numeric(df[c], errors="coerce")
    df = df.dropna(subset=["ShortVolume", "TotalVolume"]).copy()
    df["Date"] = pd.to_datetime(df["Date"].astype(int).astype(str), format="%Y%m%d")
    df["ShortRatio"] = df["ShortVolume"] / df["TotalVolume"]
    return df

days = pd.bdate_range("2026-10-19", "2026-10-23")
frames = [f for d in days if (f := get_short_volume(d)) is not None]
sv = pd.concat(frames, ignore_index=True)
print(sv[sv.Symbol == "AAPL"][["Date", "ShortVolume", "TotalVolume", "ShortRatio"]])
Tip: Save each raw file to disk once and parse from the saved copy. Re-downloading history on every run is slow, and keeping raw files lets you detect later corrections.

Why is short volume so noisy as a measure of bearishness?

Market makers and other liquidity providers routinely sell short to fill buy orders, then buy back to flatten inventory, often within the same day. Hedging by options dealers and arbitrage desks adds more short sales. None of this reflects a view that the price will fall, which is why short volume is commonly 40-50% of total volume for many liquid stocks.

So a high ratio is not evidence of heavy short positioning, and a low one is not evidence of the opposite. Changes in the ratio relative to the same stock's own history carry more information than the absolute level, and even then it is a descriptive statistic, not a signal.

Coverage is also partial. The files cover trades reported to FINRA facilities, so TotalVolume will not match consolidated tape volume from your price vendor. Never divide FINRA ShortVolume by consolidated volume; use the file's own TotalVolume as the denominator.

How do I get free twice-monthly short interest, and how often is it updated?

FINRA publishes consolidated short interest for each settlement date, covering exchange-listed and OTC securities. The same numbers appear on FINRA's short interest page, in the Nasdaq and NYSE short interest pages, and through the FINRA Query API at api.finra.org. The API needs a free FINRA developer account and API credentials, which you exchange for a short-lived OAuth bearer token.

The consolidated short interest dataset returns fields such as settlementDate, symbolCode, currentShortPositionQuantity, previousShortPositionQuantity, changePercent, averageDailyVolumeQuantity, daysToCoverQuantity and revisionFlag. Dataset and field names occasionally change, so print the returned columns before hard-coding them.

  1. Create a FINRA API account and generate a client ID and secret.
  2. Request a token with client credentials (HTTP basic auth) and use it as a Bearer header.
  3. POST a filter for the settlement date to the consolidatedShortInterest dataset and page through results with limit and offset.
  4. Store the settlement date and the date you downloaded each row.
import requests, pandas as pd

TOKEN_URL = ("https://ews.fip.finra.org/fip/rest/ews/oauth2/access_token"
             "?grant_type=client_credentials")
tok = requests.post(TOKEN_URL, auth=(CLIENT_ID, CLIENT_SECRET), timeout=30).json()["access_token"]

url = "https://api.finra.org/data/group/otcMarket/name/consolidatedShortInterest"
body = {
    "limit": 5000,
    "offset": 0,
    "compareFilters": [
        {"compareType": "EQUAL", "fieldName": "settlementDate", "fieldValue": "2026-09-30"}
    ],
}
r = requests.post(url, json=body,
                  headers={"Authorization": f"Bearer {tok}", "Accept": "application/json"},
                  timeout=60)
r.raise_for_status()
si = pd.DataFrame(r.json())
print(si[["symbolCode", "currentShortPositionQuantity",
          "previousShortPositionQuantity", "averageDailyVolumeQuantity",
          "daysToCoverQuantity"]].head())

What do days to cover and percent of float actually mean?

Days to cover = short interest / average daily volume. With 12,000,000 shares short and 3,000,000 average daily volume, days to cover is 4.0. FINRA's published figure uses its own volume average, so recomputing with your own window (say 20 or 30 days) gives a different number.

Percent of float = short interest / float. Float has no single definition: some sources use shares outstanding minus insider and strategic holdings, others use shares outstanding, others a vendor-adjusted free float. Shares outstanding also updates only when companies file. That is why one stock can show 8% on one site and 12% on another with identical short interest, and why you should store the denominator you used.

Scrapers such as yfinance expose sharesShort and shortPercentOfFloat, but these come from scraped pages, can be a cycle or more stale, and carry no settlement date. Use them for a quick look, not for a dataset you will backtest on.

Which other free datasets, broker data and paid APIs fill the gaps?

SEC fails-to-deliver (FTD) files are published twice monthly and list shares that failed to deliver at settlement per symbol. They show settlement stress, not short positions. Exchange threshold securities lists are daily and flag names with at least 10,000 shares of fails and at least 0.5% of shares outstanding for five consecutive settlement days. SEC Form SHO under Rule 13f-2 is aggregated, delayed and monthly, so it will never tell you what a particular firm holds; its compliance dates have moved, so confirm current status before depending on it.

Most discount brokers only repeat the twice-monthly figure. Interactive Brokers exposes shortable shares and indicative borrow fee data, which is the nearest thing to live lending information for retail. A rising borrow fee or falling availability indicates demand to short exceeds supply of shares to lend, but it is a proxy and says nothing about position size.

Price tiers below are rough and change; always confirm the update frequency of the exact field, because many APIs just re-serve the twice-monthly figure under a daily-sounding name.

SourceFrequencyLagCostMeasuresMain limitation
FINRA Reg SHO daily filesDailySame eveningFreeShort sale volumeFlow, not position; FINRA-reported venues only
FINRA short interest / APITwice monthlyAbout 7 business daysFree (account)Open short positionSparse and stale between dates
Nasdaq / NYSE short interest pagesTwice monthlySame as FINRAFreeOpen short positionManual, limited history
SEC FTD filesTwice monthlyWeeksFreeFailed deliveriesNot short interest
Threshold listsDailyNext dayFreePersistent failsOnly flags extreme names
SEC 13f-2 aggregateMonthlyDelayedFreeAggregated institutional shortsNo per-firm detail
IBKR shortable / borrow feeIntradayNear real timeAccount neededLending availability, feeProxy; account-level
Polygon, FMP, Nasdaq Data LinkVariesVariesFree to low tens or hundreds per monthMostly FINRA data repackagedCheck field frequency
Ortex, S3 Partners, FintelDailyIntraday to 1 dayHundreds to thousands per monthModeled estimateEstimate, methodology differs

How do I use short data in a backtest without look-ahead bias?

Short interest for the 15th is not known on the 15th. Key every row to its publication date, roughly 7 business days after settlement, not to the settlement date. Using the settlement date lets the backtest trade on information that did not yet exist.

Also store the date you captured each value. FINRA flags revisions, so a later download of the same settlement date may differ from what was visible at the time. Ticker changes, mergers and splits (see the stock split flag) mean you should map through a stable identifier such as CUSIP or a symbol history table, and drop or flag days with missing files instead of forward-filling short volume.

import pandas as pd
from pandas.tseries.offsets import BDay

si["settlementDate"] = pd.to_datetime(si["settlementDate"])
# Conservative: assume visible 8 business days after settlement
si["available_from"] = si["settlementDate"] + BDay(8)

prices = prices.sort_values("date")
si = si.sort_values("available_from")
merged = pd.merge_asof(
    prices, si, left_on="date", right_on="available_from",
    left_by="symbol", right_by="symbolCode", direction="backward")
Warning: None of these datasets is a trading signal on its own. This page covers data access and interpretation only, and BDay ignores exchange holidays, so use a real publication calendar when precision matters.

Common questions

What is the difference between short volume and short interest?

Short interest is the total number of shares currently sold short and not yet covered, measured on a settlement date. Short volume is how many shares were sold short during a single day, regardless of whether they were later covered.

Is there a free short interest API?

The FINRA Query API is free with a registered account and returns official twice-monthly short interest. Third-party APIs such as Polygon, FMP and Nasdaq Data Link have free or low-cost tiers, but they mostly repackage the same FINRA data.

Why does the same stock show different short percentages on different websites?

The numerator is usually the same FINRA figure, but the denominator differs: shares outstanding, float, or a vendor-adjusted free float. Sites also update at different times, and scraped fields may lag by a full cycle.

Do daily short estimates from Ortex or S3 match FINRA?

Not exactly. They model positions from securities-lending data and update daily, while FINRA reports actual firm submissions twice monthly. Compare vendor estimates with FINRA settlement-date figures to see how closely each tracks.

Are the Reg SHO daily files ever revised or missing?

Days with no trading have no file, and a file may not be posted the instant markets close. Keep your raw downloads and re-check recent days, since late corrections can change counts.

Related topics:short interestfinrareg shopythonbacktesting