Short Interest & Fails-to-Deliver API — SEC FTD + FINRA avatar

Short Interest & Fails-to-Deliver API — SEC FTD + FINRA

Pricing

from $3.30 / 1,000 results

Go to Apify Store
Short Interest & Fails-to-Deliver API — SEC FTD + FINRA

Short Interest & Fails-to-Deliver API — SEC FTD + FINRA

Short interest & fails-to-deliver (FTD) API. Merges SEC FTD and FINRA short-interest disclosures into one per-ticker time series with change and spike flags. Keyless official sources. Market-structure DATA, not investment advice.

Pricing

from $3.30 / 1,000 results

Rating

0.0

(0)

Developer

Kyle Maloney

Kyle Maloney

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

0

Monthly active users

2 days ago

Last modified

Share

Merges two official, keyless US market-structure disclosures — the SEC Fails-to-Deliver (FTD) semi-monthly files and the FINRA Consolidated Equity Short Interest bi-monthly file — into one per-ticker time series with change and spike flags.

This is a DATA tool, not investment advice. It reproduces public regulatory disclosures and arithmetic over them. It is not a signal, a recommendation, or a solicitation to buy, sell, or hold any security. Fails to deliver have many benign operational causes and are not evidence of misconduct. Verify every figure against the primary source before acting.

Who it's for

  • Quant / market-structure researchers building settlement-failure and short-interest factors without maintaining two file scrapers.
  • Compliance and surveillance teams watching Reg SHO threshold-adjacent activity in named tickers.
  • Financial data engineers who want one normalised, per-(ticker, settlement date) row instead of two different file formats.
  • AI agents — clean field names and explicit per-source status make this a safe MCP tool: it will tell you when it did not read a source instead of guessing.

What it does

  1. Pulls N SEC FTD half-month ZIPs, newest first, probing every path prefix the SEC serves them from (they move months between prefixes without notice), and reconciles each file against the SEC's own trailer record count and share total.
  2. Optionally pulls FINRA consolidated short interest, resolving FINRA's bi-monthly settlement calendar itself.
  3. Collapses the SEC's per-CUSIP rows to one total per (symbol, settlement date), as-of-joins the nearest FINRA observation, and computes deltas, trailing averages and spike flags.
  4. Stamps a per-source outcome on every row, so a missing source is visible rather than silently rendered as a zero or a false.

Example input

{
"tickers": ["GME", "AMC"],
"lookbackPeriods": 6,
"spikeMultiplier": 3,
"includeShortInterest": true,
"maxResults": 5000
}

Leave tickers empty for every symbol in the fetched files (capped by maxResults — see results_truncated). Leave shortInterestDates empty to have the actor resolve FINRA's calendar for you.

The contract: null never means "no"

  • null = not checked (the source was not requested, did not answer, or there was no history to compute against).
  • false = checked, and the answer is negative.

fails_spike, short_interest_spike and every short-interest value obey this. short_interest_status tells you which case you are in on every single row. If no SEC period can be retrieved the run fails loudly and emits nothing — you are never billed for an empty answer dressed up as a real one.

Output fields

One row per (ticker, settlement date). Every declared field is listed.

Identity & fails (SEC)

FieldDescription
symbolUppercased ticker
cusipRepresentative CUSIP (the one with the largest fails that day)
cusipsEvery CUSIP the SEC filed for this symbol that day
cusip_countHow many CUSIPs were summed into fails_quantity
descriptionIssuer / company name
settlement_dateSEC settlement date (YYYY-MM-DD)
fails_quantityTotal fails-to-deliver shares, summed across all CUSIPs
pricePrior-day close from the FTD file (null when the SEC value is .)
fails_deltaChange in fails_quantity vs the ticker's prior observation
fails_pct_changePercent change vs the prior observation
fails_trailing_avgAverage fails over the prior observations in the window
fails_trailing_windowHow many prior observations backed that average (null = none)
fails_spiketrue when fails > spikeMultiplier x trailing average; null when not computable

Short interest (FINRA, opt-in)

FieldDescription
short_interestFINRA current short-interest shares, as of short_interest_as_of
short_interest_prevFINRA's published prior-cycle short-interest shares
short_interest_deltaReal cycle-over-cycle change (current − previous)
short_interest_pct_changeFINRA's published changePercent
days_to_coverFINRA days-to-cover. Null at FINRA 999.99 ceiling — see below
days_to_cover_cappedtrue when FINRA published its 999.99 ceiling instead of a real ratio
avg_daily_volumeFINRA average daily share volume
short_interest_spikeSpike vs the trailing average of distinct prior FINRA observations; null when not computable or not read
short_interest_as_ofThe FINRA settlement date this row's short interest was observed on
short_interest_stale_daysDays between short_interest_as_of and settlement_date
short_interest_statusok / no_row / unavailable / not_requested
market_classFINRA marketClassCode: NYSE, ARCA, NNM, SC, BZX, AMEX, OTC
exchange_codeFINRA issuerServicesGroupExchangeCode
stock_split_flagFINRA stockSplitFlag (null when blank)
revision_flagFINRA revisionFlag (null when blank)
short_pct_floatStructurally always null — float is not published by FINRA. Retained so downstream schemas do not break.

Run provenance

FieldDescription
ftd_statusok (every requested period loaded) or partial
ftd_periods_loadedWhich SEC half-month keys backed this series, e.g. ["202607a"]
ftd_periods_missingWhich did not, and why (not_published / error)
ftd_latest_periodThe newest period loaded — guards against a stale vintage
ftd_trailer_reconciledParsed counts matched the SEC's own file trailer
results_truncatedtrue when maxResults cut the series (alphabetical subset)
sourcesWhich disclosures contributed to this row

Populating the optional columns. Set includeShortInterest: true (the shipped prefill) for the whole short-interest block. stock_split_flag and revision_flag are blank for most securities because most have neither; a verified live input that populates both is {"tickers": ["BOXL", "DD", "SLBT", "SPCX"], "lookbackPeriods": 4, "includeShortInterest": true} (2026-08-01: 13 rows carried stock_split_flag: "S", 20 carried revision_flag: "R"). short_pct_float is the only permanently-null column and is structurally so — FINRA does not publish float.

Use as an MCP tool

Available over mcp.apify.com. An agent can call it with a ticker list and read short_interest_status / ftd_status to know whether an absent value means "no short interest" or "not checked" — the distinction most market-data tools lose. Chain it with a filings or ownership actor for a fuller picture.

Sources, caveats & verified behaviour

  • SEC Fails-to-Deliver — semi-monthly ZIPs. The SEC serves them from more than one path prefix and moves months between prefixes without notice: verified 2026-08-01, the May-2026 files 404 on /files/data/fails-deliver-data/ and resolve only under /files/data/other/fails-deliver-data/. This actor probes every known prefix (plus the SEC's _0 re-upload suffix) and reports which periods loaded. Each file ends with a trailer declaring the SEC's own record count and share total; every run reconciles against it and fails rather than publish a time series over a truncated file.
  • FINRA Consolidated Equity Short Interest — bi-monthly, keyless, at https://cdn.finra.org/equity/otcmarket/biweekly/shrt{YYYYMMDD}.csv. Correction to earlier versions of this page: despite the otcmarket path and the .csv extension, this file is pipe-delimited and consolidated, not OTC-only — on 2026-06-30 it carried 22,209 records of which 12,745 (57.4%) were exchange-listed (NYSE 2,905, ARCA 2,641, Nasdaq NNM 3,804, BZX 1,431, Nasdaq SC 1,657, AMEX 307; OTC 9,464). A date FINRA has not published returns HTTP 403, which is reported as not_published.
  • days_to_cover has a ceiling sentinel. FINRA caps daysToCoverQuantity at 999.99: on 2026-06-30 that was 3,807 of 22,209 records (17.1%), while the next-highest genuine value in the entire file was 997.40 (one row). 2,985 of those had zero average daily volume, so the ratio is undefined. This actor emits days_to_cover: null there and sets days_to_cover_capped: true, rather than telling you 3,807 tickers take a thousand days to cover.
  • Short interest lags fails. FINRA publishes twice a month, the SEC files daily rows. short_interest_as_of and short_interest_stale_days tell you exactly how stale the short-interest side of any row is.
  • Multiple CUSIPs per symbol. Around reverse splits and share-class changes the SEC files a symbol under more than one CUSIP on the same day (verified: PSQH on 2026-07-13 filed 693691107 = 1,510 and 693691206 = 14,166). fails_quantity is the sum; cusips lists them.
  • maxResults truncates alphabetically, because the series is sorted by symbol then date. Narrow tickers for a complete answer; check results_truncated.
  • Not advice. Every field is a reproduction of a public disclosure or arithmetic over one. Fails to deliver arise from many ordinary operational causes.

FAQ

Why is short_interest null for my ticker? Read short_interest_status. not_requested = you left includeShortInterest off. no_row = FINRA answered and does not publish that symbol. unavailable = FINRA was asked and did not answer, so nothing on this row asserts anything about short interest.

Why is fails_spike null instead of false? Because there was no prior history in the window to compare against. false here would be a claim we cannot support.

Why are some periods missing? The SEC publishes the first-half file near the end of that month and the second-half file around the middle of the next one, so the newest one or two periods in a lookback window normally do not exist yet. ftd_periods_missing names them.

Does delta mode really remember across runs? Yes — state lives in a named key-value store (short-interest-ftd-monitor-state) keyed by your query scope. The first run for a scope establishes the baseline and says so.

Pricing

Pay per result: one billable result = one merged (ticker, settlement date) record. Tiered discounts apply on paid Apify plans. Runs that fail a source or drift gate emit nothing and bill nothing for results.

  • FDIC Deposit Market Share & HHI Rollup — bank deposit concentration.
  • FEC Campaign-Finance Delta — political-money flows.
  • RIA Registration Delta Monitor / PCAOB Auditor Engagement Monitor — adjacent regulatory-disclosure feeds from the same bulk-file layer.