Why short interest data dey always two weeks old
Short interest dey measured two times a month and published on lag. The FINRA cycle, the measured delay, wetin dey move while print dey pending, and days to cover.
Short interest data dey always old for one structural reason: e no be live feed. Brokers dey snapshot di shares wey dem hold short for dia accounts on FINRA-scheduled settlement dates — two times every month, mid-month and month-end — den dem go file those totals with FINRA, wey go compile every member firm report and publish di aggregate roughly eight business days later. Add di vendor and database hop wey dey bring di file to your screen and di freshest short interest number wey dey available on any given day dey describe positioning as e stand one to four weeks ago. Dis page dey measure dat gap instead of just talk am.
How the reporting lag dey happen for real
The cycle get four steps, and each one dey add days.
- The settlement date. FINRA dey publish schedule of settlement dates — one for mid-month, one for month-end. For each date, every broker-dealer go record the short positions wey dey inside im customer and firm accounts. Dis na settlement dates, no be trade dates: under T+1 settlement, trade wey dem strike for Monday go settle Tuesday, so the positions wey dem count for settlement date na the ones wey im trades don clear by then.
- The reporting deadline. Each member firm dey file im per-security short totals with FINRA within the next couple of business days. Nothing dey public for dis stage; na regulatory filing, no be market data feed.
- Compilation. FINRA dey sum thousands of firm-level reports for every security and arrange one file: na single number per security per settlement date — no intraday history, no venue detail, no per-firm breakout.
- Dissemination. The file dey go public roughly eight business days after the settlement date wey e describe. Vendors go come pull am, exchanges go republish am, and data warehouses like the one wey dey behind dis page go ingest am.
Nobody dey sit down for the number. The delay na the sum of the collection window, the compilation window, and the distribution hop — every step na batch process for calendar, no be stream.
How long e dey take, for days wey dem count?
Na every settlement date wey dis warehouse collect as live, one-by-one delivery — settlement date for one side, di day wey di rows first show for here for di oda side.
The exact SQL behind every number
WITH first_arrival AS (
SELECT settlement_date,
toDate(min(_ingest_time)) AS arrived
FROM global_markets.stocks_short_interest
GROUP BY settlement_date
),
bulk_days AS (
SELECT arrived
FROM first_arrival
GROUP BY arrived
HAVING count() > 5
)
SELECT settlement_date,
toString(arrived) AS arrived_here,
dateDiff('day', settlement_date, arrived) AS publication_lag_days
FROM first_arrival
WHERE arrived NOT IN (SELECT arrived FROM bulk_days)
ORDER BY settlement_dateDi most recent settlement wey dey file, 2026-06-30, land here on 2026-07-11 — 11 days afta di positions wey e dey describe dem record. Di one before am take 16 days. Across di whole series, di shape na band, no be constant:
The exact SQL behind every number
WITH first_arrival AS (
SELECT settlement_date,
toDate(min(_ingest_time)) AS arrived
FROM global_markets.stocks_short_interest
GROUP BY settlement_date
),
bulk_days AS (
SELECT arrived
FROM first_arrival
GROUP BY arrived
HAVING count() > 5
),
organic AS (
SELECT settlement_date,
dateDiff('day', settlement_date, arrived) AS lag
FROM first_arrival
WHERE arrived NOT IN (SELECT arrived FROM bulk_days)
)
SELECT count() AS settlements_measured,
min(lag) AS fastest_lag_days,
round(quantileDeterministic(0.5)(lag, cityHash64(settlement_date)), 1) AS median_lag_days,
max(lag) AS slowest_lag_days,
(SELECT count() FROM first_arrival WHERE arrived IN (SELECT arrived FROM bulk_days)) AS settlements_bulk_loaded,
(SELECT toString(max(arrived)) FROM bulk_days) AS bulk_load_date
FROM organicFor 8 settlements wey dem deliver one-by-one, di fastest print land 10 days afta im settlement date and di slowest take 26 days; di median na 14 days — di "two weeks old" wey dey di title, wey dem measure instead of just dey assume.
Make una note wetin dose queries comot. Warehouse history no be record of publication speed: on 2026-03-16 dis database load 197 settlements at once, for one single backfill of di archive. Ingest timestamps for dose rows na di backfill dem date, no be di disclosure, and any "lag" wey dem calculate from dem na artifact of our loading schedule. Na only settlements wey arrive one at a time, afta di archive don dey ground, dey measure di real pipeline — dose na di rows wey dey up.
Where the cycle stand today
The lag dey easy to see for the gap itself: at any moment, one settlement date don already happen but dem never publish am yet. This panel na the live receipt.
The exact SQL behind every number
WITH (SELECT max(settlement_date) FROM global_markets.stocks_short_interest) AS latest
SELECT toString(latest) AS latest_settlement_on_file,
(SELECT count() FROM global_markets.stocks_short_interest
WHERE settlement_date = latest) AS securities_in_that_print,
(SELECT dateDiff('day', latest, toDate(min(_ingest_time))) FROM global_markets.stocks_short_interest
WHERE settlement_date = latest) AS its_publication_lag_days,
(SELECT count() FROM global_markets.stocks_short_interest
WHERE settlement_date > latest AND settlement_date <= latest + 16) AS next_settlement_rows_on_file,
(SELECT count(DISTINCT date) FROM global_markets.stocks_short_volume
WHERE date > latest) AS daily_short_volume_files_since,
(SELECT dateDiff('day', latest, max(date)) FROM global_markets.stocks_short_volume) AS days_from_settlement_to_newest_daily_fileThe newest short interest print wey dey on file na the 2026-06-30 settlement, wey cover 22207 securities and dem deliver am 11 days after the fact. The next settlement for the cycle show 0 rows: dem never publish am, and with the lags wey we measure above, that one dey entirely normal. We bound that column to zero on purpose. When the print land, the bound go trip and this page go hold for update instead of quietly serving one stale sentence — na the same tripwire wey the June recap carry inline, one cycle later.
Meanwhile, the daily short-volume file don publish 12 times since that settlement date, and im freshest day dey 17 days newer than the newest short interest snapshot. Two FINRA datasets, two different clocks.
Wetin dey move wen di print still dey inside pipeline
Di lag only get sense if price dey move inside am. Dem dey move. Dis panel take di latest settlement, den measure each name regular-session close for di settlement date against im close for di day di file actually land.
The exact SQL behind every number
WITH latest AS (SELECT max(settlement_date) AS d FROM global_markets.stocks_short_interest),
arrived AS (
SELECT toDate(min(_ingest_time)) AS a
FROM global_markets.stocks_short_interest
WHERE settlement_date = (SELECT d FROM latest)
),
daily AS (
SELECT ticker,
toDate(toTimeZone(window_start, 'America/New_York')) AS session,
argMax(toFloat64(close), window_start) AS rth_close
FROM global_markets.delayed_stocks_minute_aggs
WHERE ticker IN ('AAPL', 'TSLA', 'NVDA', 'GME', 'MU')
AND toDate(toTimeZone(window_start, 'America/New_York')) >= (SELECT d FROM latest)
AND toDate(toTimeZone(window_start, 'America/New_York')) <= (SELECT a FROM arrived)
AND toHour(toTimeZone(window_start, 'America/New_York')) * 60
+ toMinute(toTimeZone(window_start, 'America/New_York')) BETWEEN 570 AND 959
GROUP BY ticker, session
)
SELECT si.ticker AS ticker,
round(si.short_interest / 1e6, 1) AS shares_short_m,
round(argMin(d.rth_close, d.session), 2) AS close_at_settlement,
round(argMax(d.rth_close, d.session), 2) AS close_when_published,
round((argMax(d.rth_close, d.session) / argMin(d.rth_close, d.session) - 1) * 100, 1) AS move_while_pending_pct,
count() AS sessions_in_window
FROM global_markets.stocks_short_interest AS si
INNER JOIN daily AS d ON d.ticker = si.ticker
WHERE si.settlement_date = (SELECT d FROM latest)
GROUP BY si.ticker, si.short_interest
ORDER BY abs(move_while_pending_pct) DESC, si.ticker ASCDi window run for 8 trading sessions. Di widest mover among di five na MU, wey go from $1151.01 for di settlement close to $978.69 for di day im short interest print show face — na -15% change for period wey di disclosed short position, by definition, freeze for 31.7 million shares. Di narrowest, GME, still move -1.9%.
Na im be di practical content of di lag. Any headline wey report "short interest for X" dey describe di position for di last settlement — everitin inside di window above no dey visible to am. Shorts fit don cover into strength or add into weakness; di number no fit tok, and e no go tok until di next print.
Days to cover, wey dem calculate with old numerator
Days to cover — shares short divide by average daily volume — na di ratio wey plenty readers dey see, and e carry di staleness two times: one numerator wey dem fix for settlement date, and one volume denominator wey di file don already calculate weeks ago. GameStop na di clearest case, since e be both household name and one of di more crowded liquid tickers.
The exact SQL behind every number
WITH latest AS (SELECT max(settlement_date) AS d FROM global_markets.stocks_short_interest),
arrived AS (
SELECT toDate(min(_ingest_time)) AS a
FROM global_markets.stocks_short_interest
WHERE settlement_date = (SELECT d FROM latest)
),
tape AS (
SELECT count(DISTINCT toDate(toTimeZone(window_start, 'America/New_York'))) AS sessions,
sum(toFloat64(volume)) AS shares
FROM global_markets.delayed_stocks_minute_aggs
WHERE ticker = 'GME'
AND toDate(toTimeZone(window_start, 'America/New_York')) > (SELECT d FROM latest)
AND toDate(toTimeZone(window_start, 'America/New_York')) <= (SELECT a FROM arrived)
AND toHour(toTimeZone(window_start, 'America/New_York')) * 60
+ toMinute(toTimeZone(window_start, 'America/New_York')) BETWEEN 570 AND 959
)
SELECT toString((SELECT d FROM latest)) AS settlement,
round(si.short_interest / 1e6, 1) AS shares_short_m,
round(si.avg_daily_volume / 1e6, 2) AS file_adv_m,
round(si.days_to_cover, 2) AS reported_days_to_cover,
round(tape.shares / tape.sessions / 1e6, 2) AS tape_adv_since_settlement_m,
round(si.short_interest / (tape.shares / tape.sessions), 2) AS days_to_cover_on_recent_volume,
round(abs(si.short_interest / (tape.shares / tape.sessions) - si.days_to_cover), 2) AS days_of_difference,
tape.sessions AS sessions_measured
FROM global_markets.stocks_short_interest AS si, tape
WHERE si.ticker = 'GME'
AND si.settlement_date = (SELECT d FROM latest)Read di row from left go right. For di 2026-06-30 settlement, GameStop carry 55.9 million shares short. Di file match dat one with average daily volume of 5.2 million shares and report 10.75 days to cover — di number wey screener go show you.
Now swap di denominator for wetin dey happen for real. Over di 7 regular sessions wey trade while di print still dey inside pipeline, GameStop average na 3.09 million shares per day for consolidated tape. Di same short position over dat volume dey work out to 18.08 days — 7.33 days from di published ratio, numerator remain identical. Na only di volume assumption change. Treat days to cover as dated ratio wey dem build from two dated inputs, no be live measure of how long exit go take.
Short squeezes: where di lag really dey bite
Di reason why many pipo dey search dis question at all na di squeeze. For squeeze, di short position na di main story — and na exactly di quantity wey nobody fit see for real time. GameStop for early 2021 na di textbook example. Di columns wey dey below mark each settlement regular-session close and di close eight trading sessions later, wey stand for FINRA roughly-eight-business-day dissemination target.
The exact SQL behind every number
WITH daily AS (
SELECT toDate(toTimeZone(window_start, 'America/New_York')) AS session,
argMax(toFloat64(close), window_start) AS cl
FROM global_markets.delayed_stocks_minute_aggs
WHERE ticker = 'GME'
AND window_start >= toDateTime('2020-12-01 00:00:00')
AND window_start < toDateTime('2021-03-15 00:00:00')
AND toHour(toTimeZone(window_start, 'America/New_York')) * 60
+ toMinute(toTimeZone(window_start, 'America/New_York')) BETWEEN 570 AND 959
GROUP BY session
),
ranked AS (
SELECT session, cl, row_number() OVER (ORDER BY session) AS n
FROM daily
)
SELECT toString(si.settlement_date) AS settlement,
round(si.short_interest / 1e6, 1) AS shares_short_m,
round(r0.cl, 2) AS close_at_settlement,
round(r8.cl, 2) AS close_8_sessions_later,
round((r8.cl / r0.cl - 1) * 100, 1) AS move_while_pending_pct
FROM global_markets.stocks_short_interest AS si
INNER JOIN ranked AS r0 ON r0.session = si.settlement_date
INNER JOIN ranked AS r8 ON r8.n = r0.n + 8
WHERE si.ticker = 'GME'
AND si.settlement_date >= toDate('2020-12-15')
AND si.settlement_date <= toDate('2021-02-26')
ORDER BY si.settlement_dateFollow di 2021-01-15 settlement. E record 61.8 million shares short with di stock at $35.49. Eight sessions later — around wen print like dat reach di public — GameStop close at $197.44, a 456.3% move. Anybody wey read dat short interest figure for im publication day dey read description of a stock wey no longer exist at dat price.
Di next print dey invert di trap. Di 2021-01-29 settlement record 21.4 million shares short — most of di position don go, with di stock at $328.24. By eight sessions later e be $51.19, -84.4%. Di covering don already happen before di file wey show am dey public. Both halves of di squeeze — di crowding and di unwind — dem disclose am after di fact.
Di daily cousin, and wetin e no dey tell you
FINRA dey publish something daily: short volume, wey be di share of volume wey dem report for one day wey dem mark as short-sale executions, e dey come out di next morning. E dey near-real-time, and e be different measurement. Short volume dey count trading flow — plenty of am na market-maker hedging wey dey flat by di time market close — no be positions wey dem hold. One stock fit print heavy short volume every day for one week but im short interest no go move anywhere. Di difference between di two datasets na di difference between traffic for road and di cars wey park for di end of am; dem describe both files here well-well.
No daily disclosed short interest number dey for US. Vendors dey sell daily estimates wey dem model from securities-lending and flow data; dem be models, no be disclosures. Di disclosed figure dey show face two times for month, and e dey arrive late.
FAQ
Why short interest data dey two weeks old?
Brokers dey snapshot short positions only for FINRA settlement dates wey dey happen two times every month, dem go file the totals few business days later, and FINRA go release the compiled file roughly eight business days after the settlement date. Across the settlements wey this database receive as live deliveries, the full pipeline run from 10 to 26 days, with a median of 14 days.
How brokers dey calculate and report short interest?
Each broker-dealer dey count the shares wey dem hold short for their customer and firm accounts as of the settlement date, dem go aggregate dem per security, and file that total with FINRA. FINRA go sum the reports from all member firms into one number per security — 22207 of dem for the 2026-06-30 print. Na regulatory tally of positions, no be count of trades.
The reporting cycle dey different for NYSE, Nasdaq or OTC stocks?
No. The same twice-monthly settlement schedule and the same compilation-and-dissemination cycle dey apply across US listing venues, and the exchanges dey republish from the FINRA file instead of producing their own count. The listing venue of a stock no dey change anything about how old its short interest number be.
Wetin be good or bad short interest percentage?
No threshold dey wey go make a stock good or bad holding, and high reading no be forecast. Wetin crowding measures dey describe na how large short position be relative to the tradable volume of the stock: GameStop latest print carry 10.75 reported days to cover, versus low single digits for most liquid names — see the current crowding leaders for the distribution.
The reporting lag matter for short squeezes?
Na where the lag matter pass. For the 2021-01-15 GameStop settlement, the stock move 456.3% between measurement and the eight-session mark wey dey approximate publication — and by the 2021-01-29 print the short position don already fall to 21.4 million shares. Squeeze crowding dey confirmed for public data only after the event.
Every panel above dey come with the SQL wey produce am — expand any one to audit the numbers, or run the settlement calendar on the Strasmore terminal.