FINRA Short Interest
Consolidated short interest per security, reported to FINRA twice a month.
finra_short_interest — the dataset name to pass to the Obscura API.
What one row means
FINRA consolidated short interest — the official twice-monthly settlement figure (shares short, days-to-cover), distinct from the daily Reg SHO short *volume* in `finra_short_volume`. One row per symbol per settlement date. Keyless FINRA Query API.
One row per (symbol, settlement_date).
Point-in-time availability
Every Obscura dataset carries available_date: the calendar day the publisher made the row
available, day-of, with no session rounding. It is the one column a backtest filters on, and it means the
same thing on every dataset in the catalog.
For finra_short_interest: published: available_date = settlement_date + 8 business days, FINRA's official twice-monthly dissemination schedule (the day FINRA publishes the consolidated short-interest figures to the public).
Refresh cadence
Obscura refreshes finra_short_interest every weekday — the most frequent scheduled job that re-collects or re-exports it. This is Obscura's own pipeline cadence, not the upstream publisher's release schedule; when a row became public is recorded per row in available_date.
Schema — 10 columns
The full public column list for finra_short_interest, with the meaning of every field. The same
schema is served unauthenticated at https://api.obscura.trade/v1/catalog/finra_short_interest.
| Column | Type | Description |
|---|---|---|
| symbol | text · not null | OTC/exchange ticker symbol of the security (symbolCode from the FINRA Query API response). Primary-key component; joins to other equity datasets by ticker (no CUSIP/CIK is provided by this feed). |
| settlement_date | date · not null | FINRA settlement date (the report's as-of date, one of the twice-monthly cutoffs: the 15th or the last business day of the month), parsed from settlementDate. Primary-key component alongside symbol; the period/event date this row measures. |
| available_date | date | PUBLIC-availability date = settlement_date + 8 business days, FINRA's official dissemination schedule; materialized by the collector via `calendar::add_business_days`. The point-in-time column to filter/join on — NEVER the settlement date itself. |
| issue_name | text | Issuer/security name as registered with FINRA for this symbol (issueName), e.g. 'Alcoa Corporation'. Free text, not normalized against EDGAR company names; may be truncated or abbreviated by FINRA. |
| current_short_qty | bigint | Total shares held in short positions as of this settlement date (currentShortPositionQuantity) — the headline consolidated short-interest figure for the symbol, aggregated across all reporting FINRA member firms. |
| previous_short_qty | bigint | Total shares short as of the prior settlement date (previousShortPositionQuantity, i.e. ~2 weeks earlier), carried on the same row so change can be computed without a self-join. |
| avg_daily_volume | bigint | Average daily trading volume over the settlement period used to compute days-to-cover (averageDailyVolumeQuantity), in shares/day. |
| days_to_cover | double precision | Days-to-cover = short position / average daily volume (daysToCoverQuantity as reported by FINRA, not recomputed locally) — the number of trading days it would take to close out all short positions at average volume. |
| change_pct | double precision | Percent change in short interest from the previous settlement date to this one (changePercent = (current_short_qty - previous_short_qty) / previous_short_qty * 100, as reported by FINRA); can be negative. |
| market_class | text | FINRA market-tier code for where the security trades (marketClassCode), e.g. NNM (Nasdaq National Market), NYSE, OTC, SC (Nasdaq Small Cap) — distinguishes which OTC/exchange rulebook governs the reporting firms for this symbol. |
Access finra_short_interest
Two delivery paths, one identifier. Both require an Obscura account and an active subscription; the catalog entry and the schema above are public.
import obscura
client = obscura.Client("obs_live_…")
df = client.query(
dataset="finra_short_interest",
symbols=["NVDA", "AAPL"],
start="2024-01-01",
)
Create a free account Browse all 95 datasets
Frequently asked questions
What is in the finra_short_interest dataset?
Consolidated short interest per security, reported to FINRA twice a month. FINRA consolidated short interest — the official twice-monthly settlement figure (shares short, days-to-cover), distinct from the daily Reg SHO short *volume* in `finra_short_volume`. One row per symbol per settlement date. Keyless FINRA Query API.
How do I avoid look-ahead bias with finra_short_interest?
Filter on finra_short_interest.available_date, the day the publisher made the row public. For this dataset that date is derived as follows — published: available_date = settlement_date + 8 business days, FINRA's official twice-monthly dissemination schedule (the day FINRA publishes the consolidated short-interest figures to the public). A query of the form WHERE available_date <= '<as-of date>' never sees a row before it existed.
In what formats can I get finra_short_interest?
As a Parquet bulk export (POST https://api.obscura.trade/v1/download) or as JSON from the typed query API (POST https://api.obscura.trade/v1/query), both with dataset="finra_short_interest". The column schema is public at https://api.obscura.trade/v1/catalog/finra_short_interest.
Can I filter finra_short_interest by company or symbol?
Yes. finra_short_interest carries symbol, the column the API's symbols filter resolves against.
How often is finra_short_interest updated?
Obscura refreshes finra_short_interest on a every weekday schedule — that is the most frequent scheduled job that re-collects or re-exports the table. It is Obscura's own pipeline cadence, not the upstream publisher's release schedule; when the publisher makes a row available is described by the availability rule above, and is recorded per row in available_date.