SPCX: SpaceX's First Month on the Public Market
SpaceX's June 2026 debut as SPCX, receipt by receipt: a delayed opening cross, a top-of-tape dollar-volume run, spread seasoning, day-three options, and shorts.
SpaceX went public on June 12, 2026 under the ticker SPCX — four letters that in April still traded as a different company. Priced at $135, the stock opened at $150 (11.1% above issue), peaked at a $201.99 close on 2026-06-16, printed a $146.88 pre-market low, and finished at $170.72 — 26.5% above issue, 15.5% below the peak — while ranking fourth on the entire US tape by regular-hours dollar volume, ahead of NVDA. Every number here is a stored query result; expand any panel for the exact SQL.
The exact SQL behind every number
WITH
(
SELECT toFloat64(final_issue_price)
FROM global_markets.stocks_ipos
WHERE ticker = 'SPCX'
ORDER BY listing_date DESC LIMIT 1
) AS issue_px,
(
SELECT count() FROM global_markets.delayed_stocks_minute_aggs
WHERE ticker = 'SPCX'
AND window_start >= toDateTime('2026-05-01 00:00:00') AND window_start < toDateTime('2026-06-01 00:00:00')
) AS may_bars,
(
SELECT count() FROM global_markets.delayed_stocks_minute_aggs
WHERE ticker = 'SPY'
AND window_start >= toDateTime('2026-06-19 00:00:00') AND window_start < toDateTime('2026-06-20 00:00:00')
) AS spy_jun19,
(
SELECT (toString(argMax(et_date, c)), max(c), argMax(c, et_date))
FROM (
SELECT
toDate(toTimeZone(window_start, 'America/New_York')) AS et_date,
argMax(toFloat64(close), window_start) AS c
FROM global_markets.delayed_stocks_minute_aggs
WHERE ticker = 'SPCX'
AND window_start >= toDateTime('2026-06-12 00:00:00') AND window_start < toDateTime('2026-07-01 00:00:00')
AND (toHour(window_start) * 60 + toMinute(window_start)) BETWEEN 810 AND 1199
GROUP BY et_date
)
) AS closes,
(
SELECT max(toFloat64(high)) FROM global_markets.delayed_stocks_minute_aggs
WHERE ticker = 'SPCX'
AND window_start >= toDateTime('2026-06-12 00:00:00') AND window_start < toDateTime('2026-07-01 00:00:00')
) AS hi,
(
SELECT min(toFloat64(low)) FROM global_markets.delayed_stocks_minute_aggs
WHERE ticker = 'SPCX'
AND window_start >= toDateTime('2026-06-12 00:00:00') AND window_start < toDateTime('2026-07-01 00:00:00')
) AS lo
SELECT
round(issue_px, 2) AS issue_price_usd,
round(toFloat64(argMin(open, window_start)), 2) AS opening_cross_price,
round((toFloat64(argMin(open, window_start)) / issue_px - 1) * 100, 1) AS open_pop_vs_issue_pct,
closes.1 AS peak_close_date,
round(closes.2, 2) AS peak_close,
round(closes.3, 2) AS final_close,
round((closes.3 / issue_px - 1) * 100, 1) AS final_vs_issue_pct,
round((1 - closes.3 / closes.2) * 100, 1) AS final_below_peak_pct,
round(hi, 2) AS month_high,
formatDateTime(toTimeZone(minIf(window_start, toFloat64(high) >= hi - 0.011), 'America/New_York'), '%Y-%m-%d %H:%i') AS month_high_first_bar_et,
countIf(toFloat64(high) >= hi - 0.011) AS bars_within_cent_of_high,
argMinIf(transactions, window_start, toFloat64(high) >= hi - 0.011) AS high_minute_trades,
round(lo, 2) AS month_low_extended,
formatDateTime(toTimeZone(argMin(window_start, toFloat64(low)), 'America/New_York'), '%Y-%m-%d %H:%i') AS month_low_bar_et,
countIf(toFloat64(low) <= lo + 0.011) AS bars_within_cent_of_low,
argMin(transactions, toFloat64(low)) AS low_minute_trades,
round(minIf(toFloat64(low), (toHour(window_start) * 60 + toMinute(window_start)) BETWEEN 810 AND 1199), 2) AS month_low_regular_hours,
round(minIf(toFloat64(low), (toHour(window_start) * 60 + toMinute(window_start)) BETWEEN 810 AND 1199) - lo, 2) AS rth_minus_extended_low,
round(toFloat64(sum(volume)) / 1e9, 2) AS month_shares_bn,
uniqExact(toDate(toTimeZone(window_start, 'America/New_York'))) AS sessions,
may_bars AS may_2026_bars,
spy_jun19 AS spy_bars_june19
FROM global_markets.delayed_stocks_minute_aggs
WHERE ticker = 'SPCX'
AND window_start >= toDateTime('2026-06-12 00:00:00') AND window_start < toDateTime('2026-07-01 00:00:00')One ticker, two companies
SPCX is a reused symbol, so the verification receipts come first. Until April 2026 the ticker traded as a thin fund — 13 minute bars in its final active month, between $21.92 and $23.64. In May 2026 it printed nothing at all (0 bars). On June 12 it was reassigned to Space Exploration Technologies Corp.:
The exact SQL behind every number
WITH
(
SELECT (toString(listing_date), toFloat64(final_issue_price), round(toFloat64(total_offer_size) / 1e9, 1),
primary_exchange, issuer_name, security_description, toFloat64(max_shares_offered))
FROM global_markets.stocks_ipos
WHERE ticker = 'SPCX'
ORDER BY listing_date DESC LIMIT 1
) AS ipo,
(SELECT count() FROM global_markets.stocks_balance_sheets WHERE cik = '0001181412' OR has(tickers, 'SPCX')) AS bs_rows,
(SELECT count() FROM global_markets.stocks_cash_flow_statements WHERE cik = '0001181412' OR has(tickers, 'SPCX')) AS cf_rows,
(SELECT count() FROM global_markets.stocks_income_statements WHERE cik = '0001181412' OR has(tickers, 'SPCX')) AS is_rows
SELECT
ipo.1 AS listing_date,
ipo.5 AS issuer,
round(ipo.2, 2) AS final_issue_price_usd,
ipo.3 AS offer_size_busd,
round(ipo.7 / 1e6, 1) AS max_shares_offered_m,
ipo.4 AS listing_exchange,
ipo.6 AS security,
bs_rows + cf_rows + is_rows AS fundamentals_rowsThe exact SQL behind every number
SELECT
toStartOfMonth(window_start) AS month,
count() AS minute_bars,
round(min(toFloat64(low)), 2) AS low_usd,
round(max(toFloat64(high)), 2) AS high_usd,
round(toFloat64(sum(volume)) / 1e6, 2) AS shares_m
FROM global_markets.delayed_stocks_minute_aggs
WHERE ticker = 'SPCX'
AND window_start >= toDateTime('2025-06-01 00:00:00') AND window_start < toDateTime('2026-07-01 00:00:00')
GROUP BY month
ORDER BY monthAn unwindowed "SPCX history" query splices two unrelated companies together — so every window here starts June 12, 2026. The news feed shows the same cliff (0 SPCX-tagged articles in the prior twelve months), as does short interest: a roughly 2404x jump across the gap.
The paper trail came first
The exact SQL behind every number
SELECT
form_type,
uniqExact(accession_number) AS filings,
toString(min(filing_date)) AS first_filed,
toString(max(filing_date)) AS last_filed
FROM global_markets.stocks_sec_edgar_index
WHERE cik = '0001181412'
AND filing_date >= toDate('2026-01-01') AND filing_date <= toDate('2026-06-30')
GROUP BY form_type
ORDER BY min(filing_date), form_typeRead top to bottom, the IPO assembles itself: a confidential draft amendment (DRS/A) on 2026-05-07, the public S-1 on 2026-05-20, 2 amendments to it, then 7 FWP free-writing prospectuses — roadshow paper — between 2026-06-04 and 2026-06-11. Exchange registration and certification landed 2026-06-10; the effectiveness notice and the first of 10 insider Form 3s on 2026-06-11; the final 424B4 prospectus and an S-8 on listing day itself. Then the cadence switched to 8-Ks:
The exact SQL behind every number
SELECT
toString(filing_date) AS filed,
form_type,
replaceAll(substring(items_text, 1, 170), '\n', ' · ') AS opening_lines
FROM global_markets.stocks_8k_text
WHERE cik = '0001181412'
AND filing_date >= toDate('2026-06-01') AND filing_date <= toDate('2026-06-30')
ORDER BY filing_date6 of them in under two weeks: unregistered share sales at the IPO closing (Item 3.02); a material agreement with X67 Inc., a wholly owned subsidiary (1.01); board and officer changes (5.02); a Regulation FD notice (7.01); and Item 8.01 notices on a senior unsecured notes offering that commenced June 22, per the 8-K filed 2026-06-23. A June 23 headline sized it: "SpaceX's Fundraising Is Not Over With a $20 Billion New Bond Offering". The offering window and the stock's month lows sit on the same calendar days; this data says nothing more than that.
Listing day: an open with no 9:30
An IPO does not open with the market. Nasdaq began publishing SPCX quotes at 09:50:01 ET — locked, indicative bid-equals-ask pairs walking the book toward a clearing price — and for nearly two hours there were no trades at all. SpaceX's first public print was the opening cross itself: 58.21 million shares at $150, stamped 11:46:45 ET under condition codes 17, 9 and 41 (market-center opening print, cross, trade-through exempt). The stock ran to 176.52, held a 149.34 low, and went out on a 7.85 million-share closing cross at $160.95 — 19.2% over issue. Totals: 513.5 million shares, $84.1 billion, 8.57 million prints, in a regular session a little over four hours long.
The exact SQL behind every number
WITH
(
SELECT toFloat64(final_issue_price)
FROM global_markets.stocks_ipos
WHERE ticker = 'SPCX'
ORDER BY listing_date DESC LIMIT 1
) AS issue_px,
(
SELECT (formatDateTime(toTimeZone(min(sip_timestamp), 'America/New_York'), '%H:%i:%S'), round(count() / 1e6, 2))
FROM global_markets.cache_stocks_quotes
WHERE ticker = 'SPCX'
AND sip_timestamp >= toDateTime64('2026-06-12 00:00:00', 9) AND sip_timestamp < toDateTime64('2026-06-13 00:00:00', 9)
) AS q,
(
SELECT (round(toFloat64(sum(volume)) / 1e6, 1), round(sum(toFloat64(close) * toFloat64(volume)) / 1e9, 1),
round(max(toFloat64(high)), 2), round(min(toFloat64(low)), 2))
FROM global_markets.delayed_stocks_minute_aggs
WHERE ticker = 'SPCX'
AND window_start >= toDateTime('2026-06-12 00:00:00') AND window_start < toDateTime('2026-06-13 00:00:00')
) AS bars
SELECT
q.1 AS first_quote_et,
q.2 AS day_quote_updates_m,
formatDateTime(toTimeZone(minIf(sip_timestamp, has(conditions, 17)), 'America/New_York'), '%H:%i:%S') AS opening_cross_et,
round(toFloat64(maxIf(size, has(conditions, 17))) / 1e6, 2) AS opening_cross_shares_m,
round(toFloat64(argMaxIf(price, size, has(conditions, 17))), 2) AS opening_cross_price,
formatDateTime(toTimeZone(minIf(sip_timestamp, has(conditions, 8)), 'America/New_York'), '%H:%i:%S') AS closing_cross_et,
round(toFloat64(maxIf(size, has(conditions, 8))) / 1e6, 2) AS closing_cross_shares_m,
round(toFloat64(argMaxIf(price, size, has(conditions, 8))), 2) AS closing_cross_price,
round((toFloat64(argMaxIf(price, size, has(conditions, 8))) / issue_px - 1) * 100, 1) AS close_vs_issue_pct,
round(count() / 1e6, 2) AS day_prints_m,
bars.1 AS day_shares_m,
bars.2 AS day_dollar_bn,
bars.3 AS day_high,
bars.4 AS day_low
FROM global_markets.stocks_trades
WHERE ticker = 'SPCX'
AND sip_timestamp >= toDateTime64('2026-06-12 00:00:00', 9) AND sip_timestamp < toDateTime64('2026-06-13 00:00:00', 9)The quote stream tells the price-discovery half. Before the cross, the only NBBO updates are the locked indicatives (18 in the 09:30 half hour, spread zero by construction). Then quoting flooded in: 445211 updates in the 11:30 bucket alone, at a median bid-ask spread of 30 cents (18.6 bps). By the 13:00 bucket the median was 6 cents (3.5 bps) — a spread is not born tight; this one tightened within two hours.
The exact SQL behind every number
SELECT
formatDateTime(toStartOfInterval(toTimeZone(sip_timestamp, 'America/New_York'), INTERVAL 30 MINUTE), '%H:%i') AS et_bucket,
count() AS quote_updates,
round(quantileDeterministicIf(0.5)(toFloat64(ask_price) - toFloat64(bid_price), toUInt64(toUnixTimestamp64Micro(sip_timestamp)), bid_price > 0 AND ask_price >= bid_price) * 100, 1) AS med_spread_cents,
round(quantileDeterministicIf(0.5)((toFloat64(ask_price) - toFloat64(bid_price)) / ((toFloat64(ask_price) + toFloat64(bid_price)) / 2) * 10000, toUInt64(toUnixTimestamp64Micro(sip_timestamp)), bid_price > 0 AND ask_price >= bid_price), 2) AS med_spread_bps
FROM global_markets.cache_stocks_quotes
WHERE ticker = 'SPCX'
AND sip_timestamp >= toDateTime64('2026-06-12 13:30:00', 9) AND sip_timestamp < toDateTime64('2026-06-12 20:00:00', 9)
GROUP BY et_bucket
ORDER BY et_bucketSession by session
The exact SQL behind every number
SELECT
et_date,
close_usd,
round(if(prev_close = 0, NULL, (close_usd / prev_close - 1) * 100), 1) AS change_pct,
shares_m,
dollar_bn
FROM (
SELECT et_date, close_usd, shares_m, dollar_bn,
lagInFrame(close_usd) OVER (ORDER BY et_date ASC ROWS BETWEEN 1 PRECEDING AND CURRENT ROW) AS prev_close
FROM (
SELECT
toDate(toTimeZone(window_start, 'America/New_York')) AS et_date,
round(argMaxIf(toFloat64(close), window_start, (toHour(window_start) * 60 + toMinute(window_start)) BETWEEN 810 AND 1199), 2) AS close_usd,
round(toFloat64(sum(volume)) / 1e6, 1) AS shares_m,
round(sum(toFloat64(close) * toFloat64(volume)) / 1e9, 2) AS dollar_bn
FROM global_markets.delayed_stocks_minute_aggs
WHERE ticker = 'SPCX'
AND window_start >= toDateTime('2026-06-12 00:00:00') AND window_start < toDateTime('2026-07-01 00:00:00')
GROUP BY et_date
)
)
ORDER BY et_dateThe arc: 19.3% on the second session, a $201.99 peak close on 2026-06-16, then three straight declines — the sharpest a -16.4% move on 2026-06-22, the first session after the June 19 holiday and the day the notes offering commenced. The slide bottomed at $152.74 on 2026-06-26; the final two sessions closed 7.4% and 4.1% higher (2026-06-29 gets its own daily recap and tick-level deep-dive). Volume decayed faster than the price recovered: 513.5 million shares on day one, 75.8 million on 2026-06-30.
Both month extremes survive a lone-print cross-check — and live in different market phases. The $225.64 high printed at 2026-06-16 10:02 ET: 2 bars within a cent, 47699 trades in the first peak minute. The $146.88 low printed at 2026-06-23 04:11 ET with 2 bars within a cent and 14844 trades that minute. The regular-hours low is $147.11, $0.23 above it; any "June low" figure should say which one it means.
The fourth-biggest ticker on the tape
Rank every US-listed symbol by regular-hours dollar volume over June 12–30 — a full whole-market aggregation, not a candidate list — and the brand-new listing sits fourth: $344.6 billion, behind only MU ($585.4 billion), SPY and QQQ, ahead of NVDA ($253.1 billion), TSLA and AAPL. Every row had the same 12 sessions to work with.
The exact SQL behind every number
SELECT
ticker,
round(sum(toFloat64(volume) * toFloat64(close)) / 1e9, 1) AS regular_hours_dollar_bn,
round(100 * sum(toFloat64(volume) * toFloat64(close)) / max(sum(toFloat64(volume) * toFloat64(close))) OVER (), 1) AS pct_of_leader,
toUInt8(ticker = 'SPCX') AS is_spcx
FROM global_markets.delayed_stocks_minute_aggs
WHERE window_start >= toDateTime('2026-06-12 00:00:00') AND window_start < toDateTime('2026-07-01 00:00:00')
AND (toHour(window_start) * 60 + toMinute(window_start)) BETWEEN 810 AND 1199
GROUP BY ticker
ORDER BY regular_hours_dollar_bn DESC
LIMIT 12What the tape was made of
The exact SQL behind every number
WITH
(
SELECT (round(count() / 1e6, 2),
round(100.0 * countIf(bid_price > 0 AND ask_price > 0 AND ask_price > bid_price) / count(), 2),
countIf(bid_price > 0 AND ask_price > 0 AND ask_price = bid_price),
countIf(bid_price > 0 AND ask_price > 0 AND ask_price < bid_price),
countIf(bid_price <= 0 OR ask_price <= 0),
countIf(bid_price > 0 AND ask_price > 0 AND ask_price < bid_price AND sip_timestamp < toDateTime64('2026-06-13 00:00:00', 9)),
countIf(bid_price > 0 AND ask_price > 0 AND ask_price < bid_price AND sip_timestamp >= toDateTime64('2026-06-30 00:00:00', 9)))
FROM global_markets.cache_stocks_quotes
WHERE ticker = 'SPCX'
AND sip_timestamp >= toDateTime64('2026-06-12 00:00:00', 9) AND sip_timestamp < toDateTime64('2026-07-01 00:00:00', 9)
) AS quote_census
SELECT
round(count() / 1e6, 2) AS prints_m,
quantileDeterministic(0.5)(toFloat64(size), toUInt64(abs(sequence_number))) AS median_print_shares,
round(avg(toFloat64(size)), 1) AS avg_print_shares,
round(100.0 * countIf(size < 100) / count(), 1) AS odd_lot_pct_of_prints,
round(100.0 * countIf(toFloat64(size) != round(toFloat64(size))) / count(), 2) AS fractional_pct_of_prints,
quote_census.1 AS nbbo_updates_m,
quote_census.2 AS clean_two_sided_pct,
quote_census.3 AS locked_updates,
quote_census.4 AS crossed_updates,
quote_census.5 AS one_sided_or_empty_updates,
quote_census.6 AS crossed_first_session,
quote_census.7 AS crossed_final_session
FROM global_markets.stocks_trades
WHERE ticker = 'SPCX'
AND sip_timestamp >= toDateTime64('2026-06-12 00:00:00', 9) AND sip_timestamp < toDateTime64('2026-07-01 00:00:00', 9)The texture is small-print and quote-dense: 41.01 million prints at a median of 10 shares (average 64.2 — giant crosses drag the mean), 81.9% odd lots (under 100 shares), 8.73% fractional — consistent with retail apps slicing orders, with market makers on the other side. The quote half: 11.78 million NBBO updates, 99.32% clean two-sided; 46377 momentarily crossed (bid above ask — venues out of sync), decaying from 17730 on day one to 437 on June 30; 34118 locked; 116 one-sided or empty. Spread statistics below exclude crossed and one-sided quotes, with drop counts in-panel.
The spread seasons
The signature series of a new listing is its spread finding a level — measured per session as both the median across updates and the time-weighted average. Day one starts at the 11:46 cross; including the locked pre-open indicatives would flatter it.
The exact SQL behind every number
SELECT
session,
quote_updates,
invalid_dropped,
med_spread_cents,
tw_spread_cents,
med_spread_bps,
tw_spread_bps,
round(100 * (tw_spread_bps / min(tw_spread_bps) OVER () - 1), 0) AS pct_above_tightest_session
FROM (
SELECT
session,
count() AS quote_updates,
countIf(NOT valid) AS invalid_dropped,
round(quantileDeterministicIf(0.5)(spread, toUInt64(ts_us), valid) * 100, 1) AS med_spread_cents,
round(sumIf(spread * dt, valid AND dt > 0) / sumIf(dt, valid AND dt > 0) * 100, 1) AS tw_spread_cents,
round(quantileDeterministicIf(0.5)(spread / mid * 10000, toUInt64(ts_us), valid), 2) AS med_spread_bps,
round(sumIf(spread / mid * dt, valid AND dt > 0) / sumIf(dt, valid AND dt > 0) * 10000, 2) AS tw_spread_bps
FROM (
SELECT session, spread, mid, valid, ts_us,
greatest(if(next_us = 0, end_us, least(next_us, end_us)) - ts_us, 0) AS dt
FROM (
SELECT
toDate(toTimeZone(sip_timestamp, 'America/New_York')) AS session,
toFloat64(ask_price) - toFloat64(bid_price) AS spread,
(toFloat64(ask_price) + toFloat64(bid_price)) / 2 AS mid,
(bid_price > 0 AND ask_price > 0 AND ask_price >= bid_price) AS valid,
toUnixTimestamp64Micro(sip_timestamp) AS ts_us,
toUnixTimestamp64Micro(toDateTime64(concat(toString(toDate(toTimeZone(sip_timestamp, 'America/New_York'))), ' 20:00:00'), 6, 'UTC')) AS end_us,
leadInFrame(toUnixTimestamp64Micro(sip_timestamp)) OVER (PARTITION BY toDate(toTimeZone(sip_timestamp, 'America/New_York')) ORDER BY sip_timestamp ASC, sequence_number ASC ROWS BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING) AS next_us
FROM global_markets.cache_stocks_quotes
WHERE ticker = 'SPCX'
AND sip_timestamp >= toDateTime64('2026-06-12 15:46:00', 9)
AND sip_timestamp < toDateTime64('2026-07-01 00:00:00', 9)
AND (toHour(sip_timestamp) * 60 + toMinute(sip_timestamp)) BETWEEN 810 AND 1199
)
)
GROUP BY session
)
ORDER BY sessionTime-weighted, the spread went from 23.5 cents (7.64 bps) on day one to 7.9 cents (4.7 bps) on 2026-06-30 — roughly two-thirds tighter in dollars, far less in relative terms; the dollar and relative series diverge over a stretch in which the price traveled a $146.88–$225.64 range. The tightest session was 2026-06-22 at 2 bps, with re-widenings on 2026-06-17 (8.96 bps, the session after the price peak) and 2026-06-24 (7.38 bps), the latter coinciding with volume dropping to 71.7 million shares from 152.3 million. For scale, three anchors from June 30:
The exact SQL behind every number
SELECT
ticker,
count() AS quote_updates,
countIf(NOT valid) AS invalid_dropped,
round(quantileDeterministicIf(0.5)(spread, toUInt64(ts_us), valid) * 100, 1) AS med_spread_cents,
round(quantileDeterministicIf(0.5)(spread / mid * 10000, toUInt64(ts_us), valid), 2) AS med_spread_bps,
round(sumIf(spread / mid * dt, valid AND dt > 0) / sumIf(dt, valid AND dt > 0) * 10000, 2) AS tw_spread_bps
FROM (
SELECT ticker, spread, mid, valid, ts_us,
greatest(if(next_us = 0, end_us, least(next_us, end_us)) - ts_us, 0) AS dt
FROM (
SELECT
ticker,
toFloat64(ask_price) - toFloat64(bid_price) AS spread,
(toFloat64(ask_price) + toFloat64(bid_price)) / 2 AS mid,
(bid_price > 0 AND ask_price > 0 AND ask_price >= bid_price) AS valid,
toUnixTimestamp64Micro(sip_timestamp) AS ts_us,
toUnixTimestamp64Micro(toDateTime64('2026-06-30 20:00:00', 6, 'UTC')) AS end_us,
leadInFrame(toUnixTimestamp64Micro(sip_timestamp)) OVER (PARTITION BY ticker ORDER BY sip_timestamp ASC, sequence_number ASC ROWS BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING) AS next_us
FROM global_markets.cache_stocks_quotes
WHERE ticker IN ('SPCX', 'AAPL', 'NATH')
AND sip_timestamp >= toDateTime64('2026-06-30 13:30:00', 9)
AND sip_timestamp < toDateTime64('2026-06-30 20:00:00', 9)
)
)
GROUP BY ticker
ORDER BY tickerApple's median quoted spread: 3 cents (1.04 bps). SPCX: 6 cents (3.54 bps). Nathan's Famous, with 1036 quote updates all session: 30 cents (29.66 bps). Eighteen days in, SpaceX quoted a few times wider than a mega-cap, several times tighter than a thin name.
Options from day three
The exact SQL behind every number
WITH
(
SELECT (round(sum(toFloat64(price) * size) * 100 / 1e9, 2), round(sum(size) / 1e6, 1))
FROM global_markets.options_trades
WHERE startsWith(ticker, 'O:AAPL') AND length(ticker) = 21
AND sip_timestamp >= toDateTime64('2026-06-01 00:00:00', 9) AND sip_timestamp < toDateTime64('2026-07-01 00:00:00', 9)
) AS aapl,
(
SELECT (
concat('$', toString(intDiv(toUInt32OrZero(substring(ticker, 14, 8)), 1000)),
if(substring(ticker, 13, 1) = 'P', ' put', ' call'),
', expiry 20', substring(ticker, 7, 2), '-', substring(ticker, 9, 2), '-', substring(ticker, 11, 2)),
toUInt64(sum(size)), toUInt64(count()),
round(toFloat64(sum(toFloat64(price) * size)) / toFloat64(sum(size)), 2),
round(sum(toFloat64(price) * size) * 100 / 1e6, 1))
FROM global_markets.options_trades
WHERE startsWith(ticker, 'O:SPCX') AND length(ticker) = 21
AND sip_timestamp >= toDateTime64('2026-06-12 00:00:00', 9) AND sip_timestamp < toDateTime64('2026-07-01 00:00:00', 9)
GROUP BY ticker ORDER BY sum(size) DESC LIMIT 1
) AS busiest,
(
SELECT (
concat('$', toString(intDiv(toUInt32OrZero(substring(ticker, 14, 8)), 1000)),
if(substring(ticker, 13, 1) = 'P', ' put', ' call'),
', expiry 20', substring(ticker, 7, 2), '-', substring(ticker, 9, 2), '-', substring(ticker, 11, 2)),
round(toFloat64(sum(toFloat64(price) * size)) / toFloat64(sum(size)), 2),
round(sum(toFloat64(price) * size) * 100 / 1e6, 1))
FROM global_markets.options_trades
WHERE startsWith(ticker, 'O:SPCX') AND length(ticker) = 21
AND sip_timestamp >= toDateTime64('2026-06-12 00:00:00', 9) AND sip_timestamp < toDateTime64('2026-07-01 00:00:00', 9)
GROUP BY ticker ORDER BY sum(toFloat64(price) * size) DESC LIMIT 1
) AS premium_magnet,
(
SELECT max(pc)
FROM (
SELECT round(toFloat64(sumIf(size, substring(ticker, 13, 1) = 'P')) / toFloat64(sumIf(size, substring(ticker, 13, 1) = 'C')), 3) AS pc
FROM global_markets.options_trades
WHERE startsWith(ticker, 'O:SPCX') AND length(ticker) = 21
AND sip_timestamp >= toDateTime64('2026-06-12 00:00:00', 9) AND sip_timestamp < toDateTime64('2026-07-01 00:00:00', 9)
GROUP BY toDate(sip_timestamp)
)
) AS max_daily_pc
SELECT
formatDateTime(toTimeZone(min(sip_timestamp), 'America/New_York'), '%Y-%m-%d %H:%i:%S') AS first_print_et,
uniqExact(toDate(sip_timestamp)) AS option_sessions,
round(count() / 1e6, 2) AS prints_m,
uniqExact(ticker) AS distinct_contracts,
round(sum(size) / 1e6, 2) AS contracts_traded_m,
round(sum(toFloat64(price) * size) * 100 / 1e9, 2) AS premium_notional_busd,
round(toFloat64(sumIf(size, substring(ticker, 13, 1) = 'P')) / toFloat64(sumIf(size, substring(ticker, 13, 1) = 'C')), 2) AS month_put_call_ratio,
max_daily_pc AS max_session_put_call_ratio,
uniqExact(substring(ticker, 7, 6)) AS expiries_traded,
concat('20', substring(max(substring(ticker, 7, 6)), 1, 2), '-', substring(max(substring(ticker, 7, 6)), 3, 2), '-', substring(max(substring(ticker, 7, 6)), 5, 2)) AS longest_expiry,
round(100 * toFloat64(sumIf(size, substring(ticker, 7, 6) = '260618')) / toFloat64(sum(size)), 1) AS jun18_expiry_share_pct,
busiest.1 AS busiest_contract,
busiest.2 AS busiest_contract_volume,
busiest.3 AS busiest_contract_prints,
busiest.4 AS busiest_contract_avg_premium,
busiest.5 AS busiest_contract_notional_musd,
premium_magnet.1 AS top_premium_contract,
premium_magnet.2 AS top_premium_avg,
premium_magnet.3 AS top_premium_notional_musd,
aapl.1 AS aapl_full_june_notional_busd,
aapl.2 AS aapl_full_june_contracts_m,
round(round(sum(toFloat64(price) * size) * 100 / 1e9, 2) - aapl.1, 2) AS spcx_minus_aapl_notional_busd
FROM global_markets.options_trades
WHERE startsWith(ticker, 'O:SPCX') AND length(ticker) = 21
AND sip_timestamp >= toDateTime64('2026-06-12 00:00:00', 9) AND sip_timestamp < toDateTime64('2026-07-01 00:00:00', 9)Options listed at 2026-06-16 09:30:00 ET — the stock's third session. In 10 option sessions: 2.18 million prints, 10.4 million contracts across 3199 listings, $9.15 billion in premium (price times the standard 100-share multiplier) — $0.31 billion more than AAPL options collected in the ENTIRE month of June ($8.84 billion on 27 million contracts; ten sessions against a full month — a deliberate asymmetry the point survives). 22 expiries traded, from a weekly expiring Thursday June 18 (the market was closed that Friday) out to 2028-12-15 LEAPS; that first weekly alone took 26.7% of month volume. Busiest contract: the $175 put, expiry 2026-06-18 — 203765 contracts across 41648 prints at a $1.43 average premium. Premium magnet: the $225 call, expiry 2026-09-18 — $121.3 million at $40.12.
The exact SQL behind every number
SELECT
toDate(sip_timestamp) AS session,
count() AS prints,
toUInt64(sum(size)) AS contracts_traded,
toUInt64(sumIf(size, substring(ticker, 13, 1) = 'C')) AS call_contracts,
toUInt64(sumIf(size, substring(ticker, 13, 1) = 'P')) AS put_contracts,
round(toFloat64(sumIf(size, substring(ticker, 13, 1) = 'P')) / toFloat64(sumIf(size, substring(ticker, 13, 1) = 'C')), 2) AS put_call_ratio,
round(100 * toFloat64(sum(size)) / max(toFloat64(sum(size))) OVER (), 1) AS pct_of_busiest_session
FROM global_markets.options_trades
WHERE startsWith(ticker, 'O:SPCX') AND length(ticker) = 21
AND sip_timestamp >= toDateTime64('2026-06-12 00:00:00', 9) AND sip_timestamp < toDateTime64('2026-07-01 00:00:00', 9)
GROUP BY session
ORDER BY sessionCalls out-traded puts every single session: the daily put/call ratio peaked at 0.987 on 2026-06-17, near the price top, and bottomed at 0.46 on 2026-06-29, the session the stock closed 7.4% higher — put volume peaked with the price, not the trough. The busiest session was 2026-06-18, the first weekly's expiry day: 1844490 contracts.
The exact SQL behind every number
SELECT
concat('$', toString(toUInt32(bucket))) AS strike_bucket,
call_contracts,
put_contracts,
round(100.0 * put_contracts / (call_contracts + put_contracts), 1) AS put_share_pct,
round(100 * (call_contracts + put_contracts) / max(call_contracts + put_contracts) OVER (), 1) AS pct_of_biggest_bucket
FROM (
SELECT
least(floor(toFloat64(toUInt32OrZero(substring(ticker, 14, 8))) / 1000 / 25) * 25, 450) AS bucket,
toUInt64(sumIf(size, substring(ticker, 13, 1) = 'C')) AS call_contracts,
toUInt64(sumIf(size, substring(ticker, 13, 1) = 'P')) AS put_contracts
FROM global_markets.options_trades
WHERE startsWith(ticker, 'O:SPCX') AND length(ticker) = 21
AND sip_timestamp >= toDateTime64('2026-06-12 00:00:00', 9) AND sip_timestamp < toDateTime64('2026-07-01 00:00:00', 9)
GROUP BY bucket
)
ORDER BY toUInt32OrZero(substring(strike_bucket, 2))The strike map is a barbell around the price path. The $150 bucket took the most volume, split 55% puts — at-the-money two-way traffic. Below the trading range puts own the book (92.7% of the $125 bucket); above it calls (1.6% puts at $250), with 42228 call contracts at the $450 bucket, roughly double the month's high.
The exact SQL behind every number
SELECT
toDate(sip_timestamp) AS session,
count() AS nbbo_updates,
countIf(bid_price <= 0 OR ask_price < bid_price) AS dropped_bad_quotes,
round(avgIf(toFloat64(ask_price) - toFloat64(bid_price), bid_price > 0 AND ask_price >= bid_price) * 100, 1) AS avg_spread_cents,
round(quantileDeterministicIf(0.5)(toFloat64(ask_price) - toFloat64(bid_price), toUInt64(sequence_number), bid_price > 0 AND ask_price >= bid_price) * 100, 1) AS med_spread_cents,
round(100 * avgIf((toFloat64(ask_price) - toFloat64(bid_price)) / ((toFloat64(ask_price) + toFloat64(bid_price)) / 2), bid_price > 0 AND ask_price >= bid_price), 2) AS avg_spread_pct_of_mid
FROM global_markets.cache_options_quotes
WHERE ticker = 'O:SPCX260618P00175000'
AND sip_timestamp >= toDateTime64('2026-06-16 00:00:00', 9) AND sip_timestamp < toDateTime64('2026-06-19 00:00:00', 9)
GROUP BY session
ORDER BY sessionTrading cost was tight from the first hour: the busiest contract averaged a 10.3-cent NBBO spread on its first session (6.7% of mid; the median was 10 cents), the median tightening to 5 cents by expiry day (5.23% of mid, 93198 quote updates, 37 bad quotes dropped and counted). Nickel-to-dime spreads on the liquid center of a days-old book — the far wings cost more, and this panel does not speak for them.
The news switch and the shorts
The exact SQL behind every number
WITH
(
SELECT count()
FROM global_markets.stocks_news
WHERE has(tickers, 'SPCX')
AND published_utc >= toDateTime('2025-06-01 00:00:00')
AND published_utc < toDateTime('2026-06-01 00:00:00')
) AS prior_12mo,
(
SELECT (toString(d), n)
FROM (
SELECT toDate(toTimeZone(published_utc, 'America/New_York')) AS d, count() AS n
FROM global_markets.stocks_news
WHERE has(tickers, 'SPCX')
AND published_utc >= toDateTime('2026-06-01 00:00:00')
AND published_utc < toDateTime('2026-07-01 04:00:00')
GROUP BY d ORDER BY n DESC, d ASC LIMIT 1
)
) AS peak_day,
(
SELECT (JSONExtractString(any(publisher), 'name'), count())
FROM global_markets.stocks_news
WHERE has(tickers, 'SPCX')
AND published_utc >= toDateTime('2026-06-01 00:00:00')
AND published_utc < toDateTime('2026-07-01 04:00:00')
GROUP BY JSONExtractString(publisher, 'name') ORDER BY count() DESC LIMIT 1
) AS top_pub,
(
SELECT n
FROM (
SELECT toDate(toTimeZone(published_utc, 'America/New_York')) AS d, count() AS n
FROM global_markets.stocks_news
WHERE has(tickers, 'SPCX')
AND published_utc >= toDateTime('2026-06-01 00:00:00')
AND published_utc < toDateTime('2026-07-01 04:00:00')
GROUP BY d ORDER BY d ASC LIMIT 1
)
) AS first_day_n,
(
SELECT substring(title, 1, 90)
FROM global_markets.stocks_news
WHERE has(tickers, 'SPCX')
AND published_utc >= toDateTime('2026-06-22 04:00:00')
AND published_utc < toDateTime('2026-06-24 04:00:00')
AND title ILIKE '%bond%'
ORDER BY published_utc ASC LIMIT 1
) AS notes_headline
SELECT
prior_12mo AS prior_12_months_articles,
toString(min(toDate(toTimeZone(published_utc, 'America/New_York')))) AS first_tagged_day,
first_day_n AS first_day_articles,
peak_day.1 AS peak_day_date,
peak_day.2 AS peak_day_articles,
count() AS june_articles,
uniqExact(JSONExtractString(publisher, 'name')) AS publishers,
top_pub.1 AS top_publisher,
top_pub.2 AS top_publisher_articles,
round(100.0 * top_pub.2 / count(), 0) AS top_publisher_pct,
countIf(has(tickers, 'TSLA')) AS tsla_co_articles,
countIf(has(tickers, 'NVDA')) AS nvda_co_articles,
countIf(hasAny(tickers, ['GOOG', 'GOOGL', 'GOOGN', 'GOOGM'])) AS alphabet_co_articles,
countIf(has(tickers, 'RKLB')) AS rklb_co_articles,
countIf(has(tickers, 'ASTS')) AS asts_co_articles,
countIf(has(tickers, 'TSLA')) - countIf(has(tickers, 'RKLB')) AS tsla_minus_rklb,
notes_headline AS notes_offering_headline
FROM global_markets.stocks_news
WHERE has(tickers, 'SPCX')
AND published_utc >= toDateTime('2026-06-01 00:00:00')
AND published_utc < toDateTime('2026-07-01 04:00:00')News tagging is its own receipt: 0 SPCX-tagged articles in the twelve months before listing, then 14 on 2026-06-11 (pricing day), a 42-article peak on 2026-06-12, 347 for the month. Read those counts skeptically: 4 publishers, and The Motley Fool alone wrote 65% — one feed's attention, not the world's media. Co-tags show the framing: TSLA in 83 articles, NVDA in 59, Alphabet (share classes collapsed) in 57, while Rocket Lab (21) and AST SpaceMobile (15) trail far behind: this feed covered it as a mega-cap story, not a space-sector one.
The exact SQL behind every number
SELECT
date,
round(toFloat64(any(short_volume)) / 1e6, 2) AS short_shares_m,
round(toFloat64(any(total_volume)) / 1e6, 2) AS offexchange_total_m,
round(100 * toFloat64(any(short_volume)) / toFloat64(any(total_volume)), 1) AS short_pct_of_offexchange
FROM global_markets.stocks_short_volume
WHERE ticker = 'SPCX' AND date >= toDate('2026-06-01') AND date <= toDate('2026-06-30')
GROUP BY date
ORDER BY dateThe shorts showed up on day one — with a definition attached. Off-exchange short volume is the share of FINRA-reported (off-exchange) volume marked short; much of it is market makers selling short to fill customer buys — routine plumbing, and not short interest. SPCX's marked-short share started at 33.7% on listing day and climbed to 71% by 2026-06-30, while reported off-exchange volume fell from 131.53 million shares to 35.77 million. The co-movement is what this data can show; what it means is not in this data.
The exact SQL behind every number
SELECT
toString(maxIf(settlement_date, settlement_date >= toDate('2026-06-01'))) AS new_entity_settlement,
round(toFloat64(maxIf(short_interest, settlement_date >= toDate('2026-06-01'))) / 1e6, 2) AS shares_short_m,
round(toFloat64(maxIf(avg_daily_volume, settlement_date >= toDate('2026-06-01'))) / 1e6, 2) AS avg_daily_volume_m,
maxIf(days_to_cover, settlement_date >= toDate('2026-06-01')) AS reported_days_to_cover,
round(toFloat64(maxIf(short_interest, settlement_date >= toDate('2026-06-01'))) / toFloat64(maxIf(avg_daily_volume, settlement_date >= toDate('2026-06-01'))), 2) AS implied_days_to_cover,
countIf(settlement_date > toDate('2026-06-15')) AS settlements_published_after_june15,
toString(argMaxIf(settlement_date, settlement_date, settlement_date < toDate('2026-06-01'))) AS last_old_entity_settlement,
argMaxIf(short_interest, settlement_date, settlement_date < toDate('2026-06-01')) AS last_old_entity_short_interest,
round(toFloat64(maxIf(short_interest, settlement_date >= toDate('2026-06-01'))) / toFloat64(argMaxIf(short_interest, settlement_date, settlement_date < toDate('2026-06-01'))), 0) AS jump_multiple_vs_old_entity
FROM global_markets.stocks_short_interest
WHERE ticker = 'SPCX'Actual short interest — open positions as of a settlement date — printed for the first time on 2026-06-15: 23.34 million shares short against a 69.19 million-share average day. The vendor reports days-to-cover as 1 — a floor; the raw ratio is 0.34: shorts could cover in under one average day. The prior entity's final settlement (2026-03-31) showed 9711 shares — the symbol-reuse cliff again. The June 30 settlement was not yet published as of this writing (0 later settlements on file).
Data notes
Full data notes
- Entity boundary (the basis for verified_tickers). The stocks_ipos record (Space Exploration Technologies Corp., listed 2026-06-12 at $135 on XNAS), the May-2026 zero-bar gap, and the news-tag switch pin the June 12 reassignment. No pre-June-12 row is attributed to SpaceX; frontmatter verified_tickers: ["SPCX"] is a deliberate editorial assertion for June 12–30, 2026, on these receipts.
- Raw trade-tape sums double-count auction volume (official open/close re-reports); share and dollar totals come from minute aggregates, cross sizes from the cross prints (the June 29 deep-dive derives that correction).
- Day one is a partial session — quotes from 09:50:01 ET, first print 11:46:45 ET. Day-one high/low are minute-bar extremes; the month extremes carry within-a-cent corroboration counts in the scoreboard.
- EDGAR counting dedupes by accession_number and selects CIK 0001181412; the unrelated "Space Exploration I" Form D filer (CIK 0002130081) is excluded by construction.
- No fundamentals exist to publish: 0 SpaceX rows across the three financial-statement tables.
- The June 29 FINRA short-volume file is truncated market-wide (the source file ends mid-alphabet); SPCX sorts before the cutoff and its row is complete — the June 29 deep-dive carries the short-volume probe receipt.
- June 19 was a market-wide closure, observed not assumed: 0 SPY bars that day, so SPCX's June spans 12 sessions.
Methodology
- Timestamps are stored in UTC and filtered with raw UTC bounds; June 2026 is entirely EDT, so regular hours are 13:30–20:00 UTC (9:30 am–4:00 pm ET). toTimeZone appears only in SELECT lists.
- A session close is the last regular-hours minute bar; auction prices come from the cross prints (day one: $161.29 by bar, $160.95 by cross).
- Dollar volume is minute close times minute volume, summed — a close-weighted proxy for notional.
- Options expiry, type and strike are re-parsed from the OCC ticker (the table's expiration_date column is unreliable); premium notional assumes the 100-share multiplier.
- Per-update spread statistics weight each NBBO update equally; time-weighted statistics weight each quote by how long it stood. Medians use deterministic quantiles.
- Generation is batch-only through the gated read-only path; the public page never queries live, and the post regenerates cleanly only while June 2026 remains inside tick retention. Warehouse state as of July 3, 2026.
Every panel is one stored object — chart, table and SQL. Take any query further on the Strasmore terminal.