How to Download FINRA Daily Short Volume Data
Learn how to use curl download FINRA daily short volume data, read Reg SHO file columns, and use awk calculate one symbol short volume ratio.
To download FINRA daily short volume data, you fit collect one plain-text file for each trading day from FINRA public content server. You no need login or API key. The file na Regulation SHO Daily Short Sale Volume file. Each pipe-delimited row get one symbol, plus that day short volume, total volume and short exempt volume. The data cover trades wey people report off-exchange to FINRA facility.
This guide use one historical date, June 12, 2026. E go show you how to work inside fresh Ubuntu container. You go install curl, download the file, read the columns, then use awk calculate short volume ratio for one symbol. Every command dey run as e dey written, whether na today or one year from now.
FINRA dey publish daily short volume file for where?
The consolidated file for any trading day dey sit for one predictable address:
https://cdn.finra.org/equity/regsho/daily/CNMSshvolYYYYMMDD.txt
Replace YYYYMMDD with the trade date. CNMS na the consolidated NMS file (National Market System, the exchange-listed universe). E cover every listed stock, with the figures added together across all FINRA trade reporting facilities (TRFs). FINRA dey post each day file no later than 6:00 p.m. ET on the trade date itself. Public short-selling data hardly dey come out faster than this one.
The trade-off na the scope. The file count only trades wey dem report to FINRA facility. For practical purpose, this mean off-exchange executions, like wholesalers wey dey fill retail orders and dark pools. Trades wey match for the exchanges themselves no dey inside am. So, the total volume column always dey smaller than the day volume wey price chart show.
Files dey available only for trading days. If you request weekend date or exchange holiday, server go return 403 Forbidden instead of empty file. Any script wey dey move through calendar must skip those dates or tolerate the error.
Step one: fresh Ubuntu container wey get curl
Start with clean container, then install curl. Ubuntu base image already get awk as mawk, so nothing else dey needed:
docker run --rm -it ubuntu:24.04 bash
apt-get update && apt-get install -y curl
Step two: download the FINRA daily short volume file for one fixed date
Fix the date. Command wey dem build around “today” fit break for weekends and holidays. E fit break again every morning before FINRA post the file. June 12, 2026 na Friday with normal trading session, and the file still dey the server:
curl -fsSLO https://cdn.finra.org/equity/regsho/daily/CNMSshvol20260612.txt
The flags mean: -f make curl fail when HTTP error happen, instead of saving the error page as data. -s dey mute the progress meter. -S still print a real error. -L follow redirect. -O save the file with the remote name. Check both ends of the file wey arrive:
head -3 CNMSshvol20260612.txt
tail -1 CNMSshvol20260612.txt
The first line na the header, Date|Symbol|ShortVolume|ShortExemptVolume|TotalVolume|Market. The last line na trailer: one bare integer wey show the number of data records for the file. Any parser must remove both. Now prove the weekend rule by requesting the next calendar day, Saturday, June 13:
curl -fsSLO https://cdn.finra.org/equity/regsho/daily/CNMSshvol20260613.txt
Curl print an error and exit with code 22: the server return 403, and -f refuse the request. The same thing happen for June 19, 2026, the Juneteenth holiday. A stored copy of the same series show the calendar pattern directly, with one row for each session and nothing in between:
| date wey dem trade | day for week | session name | symbols wey dem report | symbols name |
|---|---|---|---|---|
| 2026-06-01 | Monday | June 1 | 15118 | 15.12 thousand |
| 2026-06-02 | Tuesday | June 2 | 14907 | 14.91 thousand |
| 2026-06-03 | Wednesday | June 3 | 14839 | 14.84 thousand |
| 2026-06-04 | Thursday | June 4 | 5136 | 5.14 thousand |
| 2026-06-05 | Friday | June 5 | 14740 | 14.74 thousand |
| 2026-06-08 | Monday | June 8 | 14815 | 14.81 thousand |
| 2026-06-09 | Tuesday | June 9 | 14751 | 14.75 thousand |
| 2026-06-10 | Wednesday | June 10 | 5694 | 5.69 thousand |
| 2026-06-11 | Thursday | June 11 | 14687 | 14.69 thousand |
| 2026-06-12 | Friday | June 12 | 14734 | 14.73 thousand |
| 2026-06-15 | Monday | June 15 | 14948 | 14.95 thousand |
| 2026-06-16 | Tuesday | June 16 | 5631 | 5.63 thousand |
| 2026-06-17 | Wednesday | June 17 | 14611 | 14.61 thousand |
| 2026-06-18 | Thursday | June 18 | 14700 | 14.70 thousand |
| 2026-06-22 | Monday | June 22 | 14922 | 14.92 thousand |
| 2026-06-23 | Tuesday | June 23 | 5767 | 5.77 thousand |
| 2026-06-24 | Wednesday | June 24 | 14743 | 14.74 thousand |
| 2026-06-25 | Thursday | June 25 | 14716 | 14.72 thousand |
| 2026-06-26 | Friday | June 26 | 15052 | 15.05 thousand |
| 2026-06-29 | Monday | June 29 | 5489 | 5.49 thousand |
The exact SQL behind every number
SELECT
toString(date) AS trade_date,
formatDateTime(date, '%W') AS weekday,
concat(monthName(date), ' ', toString(toDayOfMonth(date))) AS session_label,
count(DISTINCT ticker) AS symbols_reported,
formatReadableQuantity(count(DISTINCT ticker)) AS symbols_label
FROM global_markets.stocks_short_volume
WHERE date >= '2026-06-01'
AND date < '2026-07-01'
GROUP BY date
ORDER BY dateJune 2026 produce 21 dated files. The first one, June 1, na Monday, and e carry 15.12 thousand symbols. Every row for the panel na weekday, and no row dey for June 19.
Wetín the columns for FINRA short volume file mean?
Each data row get six fields wey pipe separate.
Datena the trade date for YYYYMMDD format.Symbolna the ticker, up to 14 characters.ShortVolumena the number of shares sold short that day for trades wey dem report to FINRA, including short exempt trades.ShortExemptVolumena the part wey dem flag as short exempt: sales wey dem mark as exempt from the Reg SHO Rule 201 price test. Na the circuit breaker wey restrict short selling after stock fall 10% from the previous close.TotalVolumena every reported share for the symbol that day, short and long together.Marketna the reporting facility:Nfor the NYSE TRF,Qfor the Nasdaq TRF for Carteret,Bfor the Nasdaq TRF for Chicago, andDfor the Alternative Display Facility (ADF).
For the consolidated file, the Market field list every facility wey report the symbol, with comma separating dem. So, line fit end with something like B,Q,N. Na because of those commas the file dey use pipes as delimiter. Make you also note one recent change: since February 23, 2026, the three volume fields dey carry fractional shares up to six decimal places. So, value wey get six digits after decimal point normal. Files wey date before then get whole numbers only. Parser wey convert the value to integer go silently truncate the newer ones.
How I fit compute short volume ratio with awk?
Short volume ratio na short volume divided by total volume, wey dem quote as percentage. One awk line fit compute am for one symbol:
awk -F'|' '$2 == "AAPL" { printf "%s %s short=%s total=%s ratio=%.1f\n", $1, $2, $3, $5, 100 * $3 / $5 }' CNMSshvol20260612.txt
-F'|' set pipe as field separator, $2 == "AAPL" keep only AAPL row (header and trailer no go match), and printf divide field 3 by field 5. Replace am with any symbol. The panel below dey read the same date for six popular stocks from the stored FINRA series. E round the figures to millions of shares, so you fit compare the line wey you just run with am:
| ticker | short volume millions | total volume millions | short pct |
|---|---|---|---|
| AAPL | 6.66 | 13.16 | 50.6 |
| AMZN | 5.88 | 21.76 | 27 |
| KO | 2.06 | 3.65 | 56.3 |
| MSFT | 3.73 | 14.24 | 26.2 |
| NVDA | 15.19 | 45.34 | 33.5 |
| SPY | 7.48 | 15.48 | 48.3 |
The exact SQL behind every number
SELECT
ticker,
round(toFloat64(max(short_volume)) / 1e6, 2) AS short_volume_millions,
round(toFloat64(max(total_volume)) / 1e6, 2) AS total_volume_millions,
round(100 * toFloat64(max(short_volume)) / toFloat64(max(total_volume)), 1) AS short_pct
FROM global_markets.stocks_short_volume
WHERE ticker IN ('AAPL', 'AMZN', 'KO', 'MSFT', 'NVDA', 'SPY')
AND date = '2026-06-12'
GROUP BY ticker
HAVING max(total_volume) > 0
ORDER BY tickerFor AAPL on June 12, 2026, the file record 6.66 million shares sold short against 13.16 million reported in total. That one give short volume ratio of 50.6%. The other five names dey around the same level. Na the normal state of this file. Later section explain why ratio near one half no be the warning sign e look like.
One day na only snapshot, and the ratio dey change from session to session. Download one file for each date, and you fit build the series for the whole month.
Wetin be di difference between CNMS file and di per-facility files?
CNMS na total. FINRA still dey publish one file for each reporting facility on di same schedule, with di same layout and date stamp, but different prefix: FNSQshvol for Nasdaq TRF Carteret (Market Q), FNQCshvol for Nasdaq TRF Chicago (B), FNYXshvol for NYSE TRF (N), and FNRAshvol for ADF (D). Fifth one, FORFshvol, cover OTC Reporting Facility. E dey handle unlisted OTC equities and e no dey part of CNMS. Fetch Carteret file for di pinned date and pull di same symbol:
curl -fsSLO https://cdn.finra.org/equity/regsho/daily/FNSQshvol20260612.txt
awk -F'|' '$2 == "AAPL"' FNSQshvol20260612.txt
Run di same two lines against FNQCshvol20260612.txt and FNYXshvol20260612.txt. Di three ShortVolume fields go add up to di CNMS figure reach di last decimal. ADF file for dat date get only header and trailer of 0, and dat one dey common. See di split for AAPL:
| trading place | short volume millions | share of consolidated pct |
|---|---|---|
| Consolidated (CNMS) | 6.659 | 100 |
| Nasdaq TRF Carteret (Q) | 6.412 | 96.3 |
| NYSE TRF (N) | 0.194 | 2.9 |
| Nasdaq TRF Chicago (B) | 0.053 | 0.8 |
| ADF (D) | 0 | 0 |
The exact SQL behind every number
SELECT
tupleElement(v, 1) AS venue,
round(tupleElement(v, 2) / 1e6, 3) AS short_volume_millions,
round(100 * tupleElement(v, 2) / consolidated, 1) AS share_of_consolidated_pct
FROM
(
SELECT
consolidated,
arrayJoin([
('Consolidated (CNMS)', consolidated),
('Nasdaq TRF Carteret (Q)', carteret),
('Nasdaq TRF Chicago (B)', chicago),
('NYSE TRF (N)', nyse),
('ADF (D)', adf)
]) AS v
FROM
(
SELECT
toFloat64(ifNull(max(short_volume), 0)) AS consolidated,
toFloat64(ifNull(max(nasdaq_carteret_short_volume), 0)) AS carteret,
toFloat64(ifNull(max(nasdaq_chicago_short_volume), 0)) AS chicago,
toFloat64(ifNull(max(nyse_short_volume), 0)) AS nyse,
toFloat64(ifNull(max(adf_short_volume), 0)) AS adf
FROM global_markets.stocks_short_volume
WHERE ticker = 'AAPL'
AND date = '2026-06-12'
)
)
ORDER BY tupleElement(v, 2) DESCNasdaq TRF Carteret (Q) carry 96.3% of AAPL off-exchange short volume dat day. Nasdaq TRF for Carteret dey handle most off-exchange trade reporting across di market, and dis split show am. Di per-facility files matter when you wan know which venue one print pass through; na di consolidated file you go use for everything else.
Why FINRA short volume no be short interest?
Short volume na flow: na shares wey traders sell short during one trading session, and na off-exchange trades only. Short interest na stock: na number of shares wey still dey held short on settlement date. FINRA dey collect this data two times every month and publish am roughly two weeks later. The two figures no dey reconcile, and high short volume ratio no mean say short position big. If market maker fill customer buy order with inventory wey e no get, e sell short and record short sale. If e cover the position one hour later, the file go show the short sale but no trace of the purchase. On normal days, ratio for liquid names dey near one half, as the six-name panel above show. That market-making mechanic na the standard explanation. Short interest vs short volume explain the concept well, while wetin short interest be cover the position side. This post focus on how to get the file. For the position series itself, start with FINRA short interest data, then check when dem release short interest and why short interest dey two weeks old to understand the publication lag.
FINRA short volume file get some known quirks
Some things dey catch first-time users. Exchanges dey run test symbols through production systems. Nasdaq ZVZZT family na the one people know pass. Rows for these symbols fit show for files with volume wey look real. Remove any symbol wey you no fit match to listed security before you chart the data.
For rare cases, FINRA dey post one day's file again with corrected figures. Catalog page go label am “Updated”. So, number wey you pull for evening of trade date fit different from the same file wey you fetch one week later. Fetch am again before you cite am.
Trailer line na only one count, and e no get pipes. Naive parser wey assume say every line get six fields go fail for there.
Volumes dey fractional from February 23, 2026 onward, but dem be whole numbers before that date. Only regular-hours trades dey count. And na only trades wey dem report off-exchange to FINRA facility dey inside. So, total volume column no go ever match consolidated tape.
These na features of the file, no be defects. Parser wey understand them go return clean numbers.
FAQ
Onde mi fit download FINRA daily short volume data free?
You fit get am from FINRA public content server for cdn.finra.org/equity/regsho/daily/. One file dey represent each trading day, and the consolidated NMS file name na CNMSshvolYYYYMMDD.txt. You no need account; one curl command fit fetch am. FINRA website still get interactive view wey allow CSV export for up to seven days at once.
Why FINRA short volume file no dey for weekend or holiday?
FINRA dey produce files only for trade dates. If you request weekend date or exchange holiday, server go return HTTP 403 instead of empty file. So script wey dey move through calendar need skip non-trading days or handle the error.
FINRA daily short volume na the same thing as short interest?
No. Short volume dey count shares wey traders sell short during one day for off-exchange trades. This one include market-maker shorts wey dem cover within minutes. Short interest dey count shares wey still remain short on a settlement date, and FINRA collect am two times every month. Short volume ratio near 50% normal for liquid stock, and e no tell you the size of any open short position.
Why FINRA short volume file get decimals?
Since February 23, 2026, FINRA dey report fractional share quantities for NMS stocks to six decimal places across all three volume fields. Files before that date get whole shares only. So parser wey convert values to integers go truncate the newer files.
Wetin Market column mean for FINRA short volume file?
E dey show the FINRA facility wey receive the trade report: N for NYSE TRF, Q for Nasdaq TRF for Carteret, B for Nasdaq TRF for Chicago, and D for ADF. The consolidated CNMS file dey list every facility wey report the symbol, with commas between dem.
Every panel above come with the SQL wey dey underneath. Expand any one to see how dem calculate the number. If you wan pull a symbol’s short volume history without downloading file, ask for am in plain English on the Strasmore terminal.