SPCX: SpaceX Stock Price Decline From Peak
How far SpaceX stock (SPCX) sits below its June 16, 2026 peak, measured to the latest close: the session path, spreads, options flow, and SEC filings.
SpaceX stock (SPCX) closed at $139.31 on Aug 19, 2026, the latest complete session on file, 38.3% below the $225.64 peak it printed on Jun 16, 2026. That is $86.33 a share off the high, and it leaves the stock -7.1% against its $150 first regular-hours print and 3.2% against the $135 issue price the deal was sold at. Over the same window the S&P 500 ETF (SPY) moved 3.96%. Every figure here is a stored query result measured to the latest session on file and refreshed with the weekly batch; expand any panel for the exact SQL.
How far SPCX has fallen from its peak
The scoreboard row carries the whole arc: issue price $135, first regular-hours trade $150 (an 11:46 a.m. opening cross on June 12, 2026, the first-month deep dive carries the listing-day mechanics), the $225.64 peak on Jun 16, 2026, and the latest close of $139.31. The peak printed mid-morning inside regular hours and is traced by its neighboring bars (data notes). The decline is measured from that peak print to the most recent regular-hours close, so it moves with every session the warehouse adds.
| issue_price | ipo_open | peak_price | peak_label | peak_month | peak_day | latest_label | latest_close | drop_from_peak_usd | decline_from_peak_pct | peak_above_ipo_pct | vs_first_print_pct | vs_issue_pct | spy_period_pct | spy_minus_spcx_pp |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 135 | 150 | 225.64 | Jun 16, 2026 | 6 | 16 | Aug 19, 2026 | 139.31 | 86.33 | 38.3 | 50.4 | -7.1 | 3.2 | 3.96 | 11.1 |
The exact SQL behind every number
WITH
spcx_sessions AS (
SELECT
toDate(toTimeZone(window_start, 'America/New_York')) AS d,
argMax(toFloat64(close), window_start) AS c,
max(toFloat64(high)) AS hi
FROM global_markets.delayed_stocks_minute_aggs
WHERE ticker = 'SPCX'
AND window_start >= '2026-06-12 00:00:00' AND window_start < now()
AND (toHour(toTimeZone(window_start, 'America/New_York')) * 60 + toMinute(toTimeZone(window_start, 'America/New_York'))) BETWEEN 570 AND 959
GROUP BY d
HAVING count() >= 150
),
latest_row AS (
SELECT max(d) AS latest_d, argMax(c, d) AS latest_c
FROM spcx_sessions
),
peak_row AS (
SELECT max(hi) AS peak_hi, argMax(d, (hi, -toInt32(d))) AS peak_d
FROM spcx_sessions
),
first_print AS (
SELECT round(toFloat64(argMin(open, window_start)), 2) AS ipo_open_px
FROM global_markets.delayed_stocks_minute_aggs
WHERE ticker = 'SPCX'
AND window_start >= '2026-06-12 00:00:00' AND window_start < '2026-06-13 00:00:00'
AND (toHour(toTimeZone(window_start, 'America/New_York')) * 60 + toMinute(toTimeZone(window_start, 'America/New_York'))) BETWEEN 570 AND 959
),
issue_row AS (
SELECT toFloat64(final_issue_price) AS issue_px
FROM global_markets.stocks_ipos
WHERE ticker = 'SPCX'
ORDER BY listing_date DESC LIMIT 1
),
spy_ret AS (
SELECT round((argMax(toFloat64(close), window_start) / argMin(toFloat64(open), window_start) - 1) * 100, 2) AS spy_pct
FROM global_markets.delayed_stocks_minute_aggs
WHERE ticker = 'SPY'
AND window_start >= '2026-06-12 00:00:00' AND window_start < now()
AND (toHour(toTimeZone(window_start, 'America/New_York')) * 60 + toMinute(toTimeZone(window_start, 'America/New_York'))) BETWEEN 570 AND 959
)
SELECT
toString(round(ip.issue_px, 2)) AS issue_price,
fp.ipo_open_px AS ipo_open,
round(pk.peak_hi, 2) AS peak_price,
formatDateTime(pk.peak_d, '%b %e, %Y') AS peak_label,
toMonth(pk.peak_d) AS peak_month,
toDayOfMonth(pk.peak_d) AS peak_day,
formatDateTime(lt.latest_d, '%b %e, %Y') AS latest_label,
round(lt.latest_c, 2) AS latest_close,
round(pk.peak_hi - lt.latest_c, 2) AS drop_from_peak_usd,
round((pk.peak_hi - lt.latest_c) / pk.peak_hi * 100, 1) AS decline_from_peak_pct,
round((pk.peak_hi - fp.ipo_open_px) / fp.ipo_open_px * 100, 1) AS peak_above_ipo_pct,
round((lt.latest_c / fp.ipo_open_px - 1) * 100, 1) AS vs_first_print_pct,
round((lt.latest_c / ip.issue_px - 1) * 100, 1) AS vs_issue_pct,
sr.spy_pct AS spy_period_pct,
round(sr.spy_pct - (lt.latest_c / fp.ipo_open_px - 1) * 100, 1) AS spy_minus_spcx_pp
FROM peak_row pk, first_print fp, issue_row ip, latest_row lt, spy_ret srSession by session: the descent
SPCX has traded 47 complete regular-hours sessions since listing. It opened its first session at $150, printed the $225.64 peak two sessions later on Jun 16, and closed at $139.31 on Aug 19, off a $139.16 low. Volume carries its own line: 495.6 million shares on day one, 274.5 million on the peak session, 1.3 million on the latest one. The first regular-hours close below the first public print came on Jul 7, 2026, session 16 of the stock's life, and the Nasdaq-100 index-add trade measures the record closing cross that preceded it.
| session_date | session_label | rth_open | rth_close | rth_low | rth_high | vol_m |
|---|---|---|---|---|---|---|
| 2026-06-12 | Jun 12 | 150 | 161.29 | 149.34 | 176.52 | 495.6 |
| 2026-06-15 | Jun 15 | 171.74 | 192.42 | 168.35 | 193 | 219.6 |
| 2026-06-16 | Jun 16 | 200.51 | 201.99 | 195.13 | 225.64 | 274.5 |
| 2026-06-17 | Jun 17 | 209.84 | 192.2 | 187.01 | 213.8 | 179.3 |
| 2026-06-18 | Jun 18 | 188.39 | 184.97 | 172.11 | 190 | 189.3 |
| 2026-06-22 | Jun 22 | 176.04 | 154.59 | 154 | 176.75 | 150.7 |
| 2026-06-23 | Jun 23 | 151.06 | 156.06 | 147.11 | 165.5 | 132.1 |
| 2026-06-24 | Jun 24 | 154.2 | 154.46 | 150.72 | 159.86 | 65 |
| 2026-06-25 | Jun 25 | 156.62 | 153.01 | 150 | 160.65 | 52.4 |
| 2026-06-26 | Jun 26 | 150.62 | 152.74 | 148.51 | 158.4 | 66.6 |
| 2026-06-29 | Jun 29 | 157.35 | 164 | 151.74 | 166.17 | 67.9 |
| 2026-06-30 | Jun 30 | 163.38 | 170.72 | 161.64 | 172.4 | 71.4 |
| 2026-07-01 | Jul 1 | 171.56 | 157.69 | 155 | 171.74 | 89.8 |
| 2026-07-02 | Jul 2 | 159.72 | 161.86 | 155.88 | 162.16 | 50.7 |
| 2026-07-06 | Jul 6 | 165.95 | 160.4 | 155.04 | 167.9 | 75.8 |
| 2026-07-07 | Jul 7 | 158.92 | 149.58 | 148.86 | 159.3 | 66.2 |
| 2026-07-08 | Jul 8 | 152.55 | 148.33 | 145.2 | 152.93 | 52.3 |
| 2026-07-09 | Jul 9 | 150.44 | 152.12 | 147.59 | 153.5 | 39.8 |
| 2026-07-10 | Jul 10 | 150.12 | 145.4 | 145.07 | 150.57 | 38.8 |
| 2026-07-13 | Jul 13 | 144.7 | 139.19 | 136.78 | 144.92 | 65.2 |
The exact SQL behind every number
SELECT
toDate(toTimeZone(window_start, 'America/New_York')) AS session_date,
formatDateTime(toDate(toTimeZone(window_start, 'America/New_York')), '%b %e') AS session_label,
round(toFloat64(argMin(open, window_start)), 2) AS rth_open,
round(toFloat64(argMax(close, window_start)), 2) AS rth_close,
round(toFloat64(min(low)), 2) AS rth_low,
round(toFloat64(max(high)), 2) AS rth_high,
round(toFloat64(sum(volume)) / 1e6, 1) AS vol_m
FROM global_markets.delayed_stocks_minute_aggs
WHERE ticker = 'SPCX'
AND window_start >= '2026-06-12 00:00:00' AND window_start < now()
AND (toHour(toTimeZone(window_start, 'America/New_York')) * 60 + toMinute(toTimeZone(window_start, 'America/New_York'))) BETWEEN 570 AND 959
GROUP BY session_date, session_label
HAVING count() >= 150
ORDER BY session_dateInside the latest session
The panel below traces the most recent complete session bucket by bucket, from the opening bell to the close. The opening half hour turned over 0.12 million shares and left the stock at $139.68. The closing half hour turned over 0.24 million and finished at $139.31, against a session low of $139.16.
| et_time | close_px | bucket_low | vol_m |
|---|---|---|---|
| 09:30 | 139.68 | 139.16 | 0.12 |
| 10:00 | 139.89 | 139.55 | 0.29 |
| 10:30 | 139.7 | 139.7 | 0.13 |
| 11:00 | 139.52 | 139.41 | 0.12 |
| 11:30 | 139.39 | 139.32 | 0.13 |
| 12:00 | 139.52 | 139.34 | 0.24 |
| 12:30 | 139.31 | 139.22 | 0.24 |
The exact SQL behind every number
WITH latest_session AS (
SELECT max(d) AS latest_d
FROM (
SELECT toDate(toTimeZone(window_start, 'America/New_York')) AS d
FROM global_markets.delayed_stocks_minute_aggs
WHERE ticker = 'SPCX'
AND window_start >= '2026-06-12 00:00:00' AND window_start < now()
AND (toHour(toTimeZone(window_start, 'America/New_York')) * 60 + toMinute(toTimeZone(window_start, 'America/New_York'))) BETWEEN 570 AND 959
GROUP BY d
HAVING count() >= 150
)
)
SELECT
formatDateTime(toTimeZone(toStartOfInterval(window_start, INTERVAL 30 MINUTE), 'America/New_York'), '%H:%i') AS et_time,
round(toFloat64(argMax(close, window_start)), 2) AS close_px,
round(toFloat64(min(low)), 2) AS bucket_low,
round(toFloat64(sum(volume)) / 1e6, 2) AS vol_m
FROM global_markets.delayed_stocks_minute_aggs
WHERE ticker = 'SPCX'
AND window_start >= '2026-06-12 00:00:00' AND window_start < now()
AND toDate(toTimeZone(window_start, 'America/New_York')) = (SELECT latest_d FROM latest_session)
AND (toHour(toTimeZone(window_start, 'America/New_York')) * 60 + toMinute(toTimeZone(window_start, 'America/New_York'))) BETWEEN 570 AND 959
GROUP BY et_time
ORDER BY et_timeThe bid-ask spread, listing week and now
The bid-ask spread, the toll every marketable order pays, averaged 10.74 bps of the midpoint on listing day, 7.14 bps on the peak session, and 2.96 bps on Aug 18. Depth at the touch averaged 9506 shares on day one against 334 shares on the latest session in the panel. The quote tape is sampled over two windows, the four weeks from listing and the trailing three, so the comparison stays cheap enough to re-run every week.
| session_date | session_label | avg_spread_bps | avg_depth | dropped_invalid |
|---|---|---|---|---|
| 2026-06-12 | Jun 12 | 10.74 | 9506 | 24988 |
| 2026-06-15 | Jun 15 | 5.19 | 2367 | 8411 |
| 2026-06-16 | Jun 16 | 7.14 | 1478 | 7679 |
| 2026-06-17 | Jun 17 | 8 | 1079 | 4348 |
| 2026-06-18 | Jun 18 | 3.97 | 861 | 10114 |
| 2026-06-22 | Jun 22 | 2.53 | 5530 | 3898 |
| 2026-06-23 | Jun 23 | 3.44 | 4657 | 4050 |
| 2026-06-24 | Jun 24 | 6.55 | 241 | 1970 |
| 2026-06-25 | Jun 25 | 5.63 | 240 | 1335 |
| 2026-06-26 | Jun 26 | 4.34 | 825 | 2960 |
| 2026-06-29 | Jun 29 | 4.54 | 331 | 2280 |
| 2026-06-30 | Jun 30 | 4.41 | 320 | 1227 |
| 2026-07-01 | Jul 1 | 3.42 | 312 | 3839 |
| 2026-07-02 | Jul 2 | 4.5 | 319 | 1411 |
| 2026-07-06 | Jul 6 | 3.82 | 384 | 2449 |
| 2026-07-07 | Jul 7 | 4.18 | 3265 | 3394 |
| 2026-07-08 | Jul 8 | 4.81 | 456 | 2013 |
| 2026-07-09 | Jul 9 | 4.72 | 328 | 1485 |
| 2026-07-10 | Jul 10 | 3.6 | 685 | 3692 |
| 2026-07-30 | Jul 30 | 4.68 | 289 | 2355 |
The exact SQL behind every number
SELECT
toDate(toTimeZone(sip_timestamp, 'America/New_York')) AS session_date,
formatDateTime(toDate(toTimeZone(sip_timestamp, 'America/New_York')), '%b %e') AS session_label,
round(avgIf((toFloat64(ask_price) - toFloat64(bid_price)) / ((toFloat64(ask_price) + toFloat64(bid_price)) / 2) * 10000, bid_price > 0 AND ask_price > bid_price), 2) AS avg_spread_bps,
round(avgIf((toFloat64(ask_size) + toFloat64(bid_size)) / 2, bid_price > 0 AND ask_price > bid_price), 0) AS avg_depth,
countIf(NOT (bid_price > 0 AND ask_price > bid_price)) AS dropped_invalid
FROM global_markets.cache_stocks_quotes
WHERE ticker = 'SPCX'
AND sip_timestamp < now()
AND ((sip_timestamp >= '2026-06-12 00:00:00' AND sip_timestamp < '2026-07-11 00:00:00')
OR sip_timestamp >= now() - INTERVAL 21 DAY)
AND (toHour(toTimeZone(sip_timestamp, 'America/New_York')) * 60 + toMinute(toTimeZone(sip_timestamp, 'America/New_York'))) BETWEEN 570 AND 959
GROUP BY session_date, session_label
HAVING countIf(bid_price > 0 AND ask_price > bid_price) > 0
ORDER BY session_dateOptions: what is trading now
On Aug 19, 2026, the latest session with SPCX option prints on file, the busiest contract was the 145-strike call expiring Aug 21, 2026, at 29458 contracts, followed by the 140-strike call at 25976. SPCX lists weekly and monthly expiries rather than daily ones, so most sessions carry no same-day 0DTE contract at all. Across the trailing three weeks the put/call volume ratio measured 0.49 on Jul 30 and 0.61 on Aug 19. A day's volume leaders do not by themselves locate the strike where option holders would collect the least at expiry, which is what max pain measures, and that calculation reads open interest across the whole chain rather than a single session's prints.
| label | expiry_label | session_label | volume | notional_m |
|---|---|---|---|---|
| 145-strike call | Aug 21, 2026 | Aug 19, 2026 | 29458 | 0.04 |
| 140-strike call | Aug 21, 2026 | Aug 19, 2026 | 25976 | 0.08 |
| 140-strike put | Aug 21, 2026 | Aug 19, 2026 | 25583 | 0.1 |
| 150-strike call | Aug 21, 2026 | Aug 19, 2026 | 24796 | 0.01 |
| 160-strike call | Aug 21, 2026 | Aug 19, 2026 | 24700 | 0 |
| 135-strike put | Aug 21, 2026 | Aug 19, 2026 | 18705 | 0.03 |
| 140-strike call | Aug 28, 2026 | Aug 19, 2026 | 12981 | 0.07 |
| 155-strike call | Aug 21, 2026 | Aug 19, 2026 | 12486 | 0 |
| 130-strike put | Aug 21, 2026 | Aug 19, 2026 | 10512 | 0.01 |
| 138-strike put | Aug 21, 2026 | Aug 19, 2026 | 10230 | 0.03 |
The exact SQL behind every number
WITH latest_opt_session AS (
SELECT max(toDate(toTimeZone(sip_timestamp, 'America/New_York'))) AS d
FROM global_markets.options_trades
WHERE ticker LIKE 'O:SPCX%'
AND length(ticker) = 21
AND sip_timestamp >= now() - INTERVAL 8 DAY AND sip_timestamp < now()
)
SELECT
concat(toString(toUInt32OrZero(substring(ticker, 14, 8)) / 1000), '-strike ', if(substring(ticker, 13, 1) = 'C', 'call', 'put')) AS label,
formatDateTime(toDate(concat('20', substring(ticker, 7, 2), '-', substring(ticker, 9, 2), '-', substring(ticker, 11, 2))), '%b %e, %Y') AS expiry_label,
formatDateTime(max(toDate(toTimeZone(sip_timestamp, 'America/New_York'))), '%b %e, %Y') AS session_label,
sum(size) AS volume,
round(sum(toFloat64(size) * toFloat64(price)) / 1e6, 2) AS notional_m
FROM global_markets.options_trades
WHERE ticker LIKE 'O:SPCX%'
AND length(ticker) = 21
AND sip_timestamp >= now() - INTERVAL 8 DAY AND sip_timestamp < now()
AND toDate(toTimeZone(sip_timestamp, 'America/New_York')) = (SELECT d FROM latest_opt_session)
GROUP BY label, expiry_label
ORDER BY volume DESC
LIMIT 10| session_date | session_label | pc_ratio | call_vol | put_vol |
|---|---|---|---|---|
| 2026-07-30 | Jul 30 | 0.49 | 446237 | 220417 |
| 2026-07-31 | Jul 31 | 0.58 | 693500 | 399224 |
| 2026-08-03 | Aug 3 | 0.67 | 469201 | 313268 |
| 2026-08-04 | Aug 4 | 0.87 | 791314 | 689843 |
| 2026-08-05 | Aug 5 | 1.16 | 973068 | 1130348 |
| 2026-08-06 | Aug 6 | 0.98 | 844272 | 827484 |
| 2026-08-07 | Aug 7 | 0.71 | 1671039 | 1191298 |
| 2026-08-10 | Aug 10 | 0.73 | 680522 | 494674 |
| 2026-08-11 | Aug 11 | 0.84 | 463593 | 390503 |
| 2026-08-12 | Aug 12 | 0.72 | 1007840 | 722266 |
| 2026-08-13 | Aug 13 | 0.82 | 667160 | 547380 |
| 2026-08-14 | Aug 14 | 0.82 | 728039 | 595505 |
| 2026-08-17 | Aug 17 | 0.78 | 611684 | 475398 |
| 2026-08-18 | Aug 18 | 0.75 | 405459 | 305787 |
| 2026-08-19 | Aug 19 | 0.61 | 404640 | 246774 |
The exact SQL behind every number
SELECT
toDate(toTimeZone(sip_timestamp, 'America/New_York')) AS session_date,
formatDateTime(toDate(toTimeZone(sip_timestamp, 'America/New_York')), '%b %e') AS session_label,
round(sumIf(size, substring(ticker, 13, 1) = 'P') / sumIf(size, substring(ticker, 13, 1) = 'C'), 2) AS pc_ratio,
sumIf(size, substring(ticker, 13, 1) = 'C') AS call_vol,
sumIf(size, substring(ticker, 13, 1) = 'P') AS put_vol
FROM global_markets.options_trades
WHERE ticker LIKE 'O:SPCX%'
AND length(ticker) = 21
AND sip_timestamp >= now() - INTERVAL 21 DAY AND sip_timestamp < now()
GROUP BY session_date, session_label
HAVING sumIf(size, substring(ticker, 13, 1) = 'C') > 0
ORDER BY session_dateThe options quote feed stays wide
The stock's touch and its option chain do not quote on the same scale. The average quoted spread across SPCX contracts measured 1046.98 bps on Aug 12 and 1060.92 bps on Aug 17, against the stock's 2.96 bps on its own latest session. Average size at the best quote ran 237 contracts and 229 contracts on those two sessions. This panel stops short of the stock panels on purpose: cache_options_quotes carries the warehouse's longest ingest lag, so its most recent session sits a day or two behind the tape.
| session_date | session_label | opt_spread_bps | avg_size | dropped_invalid | quotes |
|---|---|---|---|---|---|
| 2026-08-12 | Aug 12 | 1046.98 | 237 | 8095 | 110746231 |
| 2026-08-13 | Aug 13 | 1030.32 | 221 | 6809 | 119772601 |
| 2026-08-14 | Aug 14 | 1209.45 | 219 | 8130 | 103707347 |
| 2026-08-17 | Aug 17 | 1060.92 | 229 | 7245 | 110492463 |
The exact SQL behind every number
SELECT
toDate(toTimeZone(sip_timestamp, 'America/New_York')) AS session_date,
formatDateTime(toDate(toTimeZone(sip_timestamp, 'America/New_York')), '%b %e') AS session_label,
round(avgIf((toFloat64(ask_price) - toFloat64(bid_price)) / ((toFloat64(ask_price) + toFloat64(bid_price)) / 2) * 10000, bid_price > 0 AND ask_price > bid_price), 2) AS opt_spread_bps,
round(avgIf((toFloat64(ask_size) + toFloat64(bid_size)) / 2, bid_price > 0 AND ask_price > bid_price), 0) AS avg_size,
countIf(NOT (bid_price > 0 AND ask_price > bid_price)) AS dropped_invalid,
count() AS quotes
FROM global_markets.cache_options_quotes
WHERE ticker LIKE 'O:SPCX%'
AND sip_timestamp >= now() - INTERVAL 8 DAY AND sip_timestamp < now()
AND (toHour(toTimeZone(sip_timestamp, 'America/New_York')) * 60 + toMinute(toTimeZone(sip_timestamp, 'America/New_York'))) BETWEEN 570 AND 959
GROUP BY session_date, session_label
HAVING countIf(bid_price > 0 AND ask_price > bid_price) > 0
ORDER BY session_dateSPCX against the market
Over the window from the listing to the latest close, SPY moved 3.96% while SPCX moved -7.1% from its first public print, a gap of 11.1 percentage points. The panel below carries the same measurement session by session: on Aug 19 SPY printed 0.14% open-to-close and SPCX 0.09%.
| session_date | session_label | spy_pct | spcx_pct |
|---|---|---|---|
| 2026-07-30 | Jul 30 | 0.77 | -2.5 |
| 2026-07-31 | Jul 31 | 0.29 | -4.12 |
| 2026-08-03 | Aug 3 | 1.1 | 7.75 |
| 2026-08-04 | Aug 4 | 1.4 | 7.35 |
| 2026-08-05 | Aug 5 | -0.78 | -3.63 |
| 2026-08-06 | Aug 6 | -0.22 | 7.31 |
| 2026-08-07 | Aug 7 | 0.28 | 15.78 |
| 2026-08-10 | Aug 10 | 0.06 | 2.81 |
| 2026-08-11 | Aug 11 | -0.53 | -3.82 |
| 2026-08-12 | Aug 12 | -0.28 | 8.26 |
| 2026-08-13 | Aug 13 | 0.38 | -1.74 |
| 2026-08-14 | Aug 14 | -0.29 | -2.14 |
| 2026-08-17 | Aug 17 | -0.45 | 4.5 |
| 2026-08-18 | Aug 18 | -0.17 | 1.85 |
| 2026-08-19 | Aug 19 | 0.14 | 0.09 |
The exact SQL behind every number
SELECT
a.session_date AS session_date,
a.session_label AS session_label,
round(a.spy_pct, 2) AS spy_pct,
round(b.spcx_pct, 2) AS spcx_pct
FROM (
SELECT
toDate(toTimeZone(window_start, 'America/New_York')) AS session_date,
formatDateTime(toDate(toTimeZone(window_start, 'America/New_York')), '%b %e') AS session_label,
(argMax(toFloat64(close), window_start) / argMin(toFloat64(open), window_start) - 1) * 100 AS spy_pct
FROM global_markets.delayed_stocks_minute_aggs
WHERE ticker = 'SPY'
AND window_start >= now() - INTERVAL 21 DAY AND window_start < now()
AND (toHour(toTimeZone(window_start, 'America/New_York')) * 60 + toMinute(toTimeZone(window_start, 'America/New_York'))) BETWEEN 570 AND 959
GROUP BY session_date, session_label
HAVING count() >= 150
) a
INNER JOIN (
SELECT
toDate(toTimeZone(window_start, 'America/New_York')) AS session_date,
(argMax(toFloat64(close), window_start) / argMin(toFloat64(open), window_start) - 1) * 100 AS spcx_pct
FROM global_markets.delayed_stocks_minute_aggs
WHERE ticker = 'SPCX'
AND window_start >= '2026-06-12 00:00:00'
AND window_start >= now() - INTERVAL 21 DAY AND window_start < now()
AND (toHour(toTimeZone(window_start, 'America/New_York')) * 60 + toMinute(toTimeZone(window_start, 'America/New_York'))) BETWEEN 570 AND 959
GROUP BY session_date
HAVING count() >= 150
) b ON a.session_date = b.session_date
ORDER BY a.session_dateWhat the news feed shows
The headlines are countable. The vendor feed carries 627 SPCX-tagged articles from listing day to the latest reading, from 4 publishers, and The Motley Fool alone wrote 80.7% of them. The busiest coverage day was the listing itself, 42 articles on June 12, against 31 on the June 16 peak session, and no later day has come within 13 articles of the IPO-day count. The listing week ran 25.7 articles a day. The trailing week runs 3. 123 articles co-tag Tesla; 32 carry “Nasdaq” in the title. No dominant headline day appears anywhere in the decline.
| total_articles | publishers | top_publisher | top_publisher_share_pct | busiest_month | busiest_dom | ipo_day_articles | peak_session_articles | max_daily_after_peak | ipo_day_minus_max_after | first_week_avg | last7_avg | tsla_co_tagged | nasdaq_titled |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 627 | 4 | The Motley Fool | 80.7 | 6 | 12 | 42 | 31 | 29 | 13 | 25.7 | 3 | 123 | 32 |
The exact SQL behind every number
WITH daily_counts AS (
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-12 04:00:00') AND published_utc < now()
GROUP BY d
),
top_pub AS (
SELECT JSONExtractString(publisher, 'name') AS p, count() AS n
FROM global_markets.stocks_news
WHERE has(tickers, 'SPCX')
AND published_utc >= toDateTime('2026-06-12 04:00:00') AND published_utc < now()
GROUP BY p ORDER BY n DESC, p ASC LIMIT 1
)
SELECT
count() AS total_articles,
uniqExact(JSONExtractString(publisher, 'name')) AS publishers,
(SELECT p FROM top_pub) AS top_publisher,
round(100.0 * (SELECT n FROM top_pub) / count(), 1) AS top_publisher_share_pct,
(SELECT toMonth(argMax(d, (n, -toInt32(toDayOfYear(d))))) FROM daily_counts) AS busiest_month,
(SELECT toDayOfMonth(argMax(d, (n, -toInt32(toDayOfYear(d))))) FROM daily_counts) AS busiest_dom,
countIf(toDate(toTimeZone(published_utc, 'America/New_York')) = toDate('2026-06-12')) AS ipo_day_articles,
countIf(toDate(toTimeZone(published_utc, 'America/New_York')) = toDate('2026-06-16')) AS peak_session_articles,
(SELECT max(n) FROM daily_counts WHERE d > toDate('2026-06-16')) AS max_daily_after_peak,
countIf(toDate(toTimeZone(published_utc, 'America/New_York')) = toDate('2026-06-12')) - (SELECT max(n) FROM daily_counts WHERE d > toDate('2026-06-16')) AS ipo_day_minus_max_after,
(SELECT round(sum(n) / 7, 1) FROM daily_counts WHERE d <= toDate('2026-06-18')) AS first_week_avg,
(SELECT round(sum(n) / 7, 1) FROM daily_counts WHERE d > today() - 7) AS last7_avg,
countIf(has(tickers, 'TSLA')) AS tsla_co_tagged,
countIf(positionCaseInsensitive(title, 'nasdaq') > 0) AS nasdaq_titled
FROM global_markets.stocks_news
WHERE has(tickers, 'SPCX')
AND published_utc >= toDateTime('2026-06-12 04:00:00') AND published_utc < now()Insider filings and the EDGAR record
Form 4 is the document a corporate insider files within two business days of buying or selling company stock. From the June 12 listing to the latest reading the EDGAR filing index shows 19 SPCX filings: 8 8-K current reports, 1 Form 3 initial ownership statement, 1 Form 4, and 9 other documents. The earliest Form 4 is dated Jun 17, 2026, the calendar day after the peak. The index records form type and date, nothing about the direction or size of a transaction. Since the peak the record carries 15 filings of any kind, the most recent dated Aug 14, 2026, 6 days before this reading.
| total_filings | form4_filings | form3_filings | eightk_filings | other_filings | first_form4_label | first_form4_month | first_form4_dom | last_filing_label | days_since_last_filing | filings_since_peak |
|---|---|---|---|---|---|---|---|---|---|---|
| 19 | 1 | 1 | 8 | 9 | Jun 17, 2026 | 6 | 17 | Aug 14, 2026 | 6 | 15 |
The exact SQL behind every number
SELECT
count() AS total_filings,
countIf(form_type = '4') AS form4_filings,
countIf(form_type = '3') AS form3_filings,
countIf(form_type = '8-K') AS eightk_filings,
countIf(form_type NOT IN ('4', '3', '8-K')) AS other_filings,
formatDateTime(minIf(filing_date, form_type = '4'), '%b %e, %Y') AS first_form4_label,
toMonth(minIf(filing_date, form_type = '4')) AS first_form4_month,
toDayOfMonth(minIf(filing_date, form_type = '4')) AS first_form4_dom,
formatDateTime(max(filing_date), '%b %e, %Y') AS last_filing_label,
toInt32(today() - max(filing_date)) AS days_since_last_filing,
countIf(filing_date > toDate('2026-06-16')) AS filings_since_peak
FROM global_markets.stocks_sec_edgar_index
WHERE ticker = 'SPCX'
AND filing_date >= toDate('2026-06-12') AND filing_date <= today()How fast do IPO round trips usually happen?
SPCX took 16 sessions to close below its first public print. The panel below runs the identical measurement on four high-profile recent US IPOs, CoreWeave, Klarna, Medline, and Cerebras: take each stock's first regular-hours print, then count sessions until a regular-hours close lands below it, over each stock's first 26 calendar days. Klarna opened 30% above its issue price and closed below its first print in its debut session; Cerebras opened 89.2% above issue and did the same; CoreWeave opened 2.5% below issue and broke on session 2. Medline never broke inside its 16-session window. SPCX's hold was the longest of the four that broke, and the 50.4% detour in the middle set this one apart. The H1 2026 IPO market review has the market-wide aftermarket numbers.
| ticker | listed | issue_price | first_rth_open | open_vs_issue_pct | open_vs_issue_pct_abs | sessions_in_window | closes_below_first_print | first_break | break_label | break_session_n |
|---|---|---|---|---|---|---|---|---|---|---|
| CRWV | 2025-03-28 | 40 | 39 | -2.5 | 2.5 | 17 | 3 | 2 | Mar 31, 2025 | 2 |
| KLAR | 2025-09-10 | 40 | 52 | 30 | 30 | 18 | 18 | 1 | Sep 10, 2025 | 1 |
| MDLN | 2025-12-17 | 29 | 35 | 20.7 | 20.7 | 16 | 0 | never in window | never in window | 0 |
| CBRS | 2026-05-14 | 185 | 350 | 89.2 | 89.2 | 17 | 17 | 1 | May 14, 2026 | 1 |
| SPCX | 2026-06-12 | 135 | 150 | 11.1 | 11.1 | 16 | 1 | 16 | Jul 7, 2026 | 16 |
The exact SQL behind every number
WITH daily AS (
SELECT ticker,
toDate(toTimeZone(window_start, 'America/New_York')) AS session_date,
argMin(toFloat64(open), window_start) AS rth_open,
argMax(toFloat64(close), window_start) AS rth_close
FROM global_markets.delayed_stocks_minute_aggs
WHERE ((ticker = 'CRWV' AND window_start >= '2025-03-28 00:00:00' AND window_start < '2025-04-23 00:00:00')
OR (ticker = 'KLAR' AND window_start >= '2025-09-10 00:00:00' AND window_start < '2025-10-06 00:00:00')
OR (ticker = 'MDLN' AND window_start >= '2025-12-17 00:00:00' AND window_start < '2026-01-12 00:00:00')
OR (ticker = 'CBRS' AND window_start >= '2026-05-14 00:00:00' AND window_start < '2026-06-09 00:00:00')
OR (ticker = 'SPCX' AND window_start >= '2026-06-12 00:00:00' AND window_start < '2026-07-08 00:00:00'))
AND (toHour(window_start) * 60 + toMinute(window_start)) BETWEEN 810 AND 1199
GROUP BY ticker, session_date
),
w AS (
SELECT ticker, session_date, rth_close,
row_number() OVER (PARTITION BY ticker ORDER BY session_date) AS rn,
first_value(rth_open) OVER (PARTITION BY ticker ORDER BY session_date) AS d1_open
FROM daily
),
agg AS (
SELECT ticker,
min(session_date) AS first_session,
any(d1_open) AS day1_open,
count() AS sessions_in_window,
countIf(rth_close < d1_open) AS closes_below,
minIf(toInt32(rn), rth_close < d1_open) AS break_rn,
minIf(session_date, rth_close < d1_open) AS break_d
FROM w GROUP BY ticker
)
SELECT a.ticker AS ticker,
toString(a.first_session) AS listed,
round(l.issue_px, 2) AS issue_price,
round(a.day1_open, 2) AS first_rth_open,
round((a.day1_open / l.issue_px - 1) * 100, 1) AS open_vs_issue_pct,
round(abs((a.day1_open / l.issue_px - 1) * 100), 1) AS open_vs_issue_pct_abs,
a.sessions_in_window AS sessions_in_window,
a.closes_below AS closes_below_first_print,
if(a.closes_below > 0, toString(a.break_rn), 'never in window') AS first_break,
if(a.closes_below > 0, formatDateTime(a.break_d, '%b %e, %Y'), 'never in window') AS break_label,
a.break_rn AS break_session_n
FROM agg a
INNER JOIN (
SELECT ticker, min(listing_date) AS ld, argMin(toFloat64(final_issue_price), listing_date) AS issue_px
FROM global_markets.stocks_ipos
WHERE ticker IN ('SPCX', 'CBRS', 'MDLN', 'CRWV', 'KLAR') AND listing_date >= '2025-01-01' AND ipo_status = 'history'
GROUP BY ticker
) l ON a.ticker = l.ticker
ORDER BY a.first_sessionFAQ
How far has SpaceX stock fallen from its peak?
SPCX peaked at $225.64 on Jun 16, 2026 and closed at $139.31 on Aug 19, 2026, a 38.3% decline from the peak print to that close, or $86.33 a share. This page re-measures that gap to the latest complete session every week.
Is SPCX trading below its IPO price?
Measured to the latest close, SPCX sits -7.1% against the $150 first regular-hours print and 3.2% against the $135 issue price the deal was sold at. The first regular-hours close below the first print came on Jul 7, 2026. Intraday prints below that line came earlier, in the debut session itself (June 12 low $149.34) and again on Jun 23 (session low $147.11).
Was the SPCX decline a market-wide move?
No. Over the same window SPY moved 3.96% while SPCX moved -7.1% from its first print, a gap of 11.1 percentage points. Session by session, on Aug 19 SPY printed 0.14% open-to-close and SPCX 0.09%.
Did SpaceX insiders sell during the stock's decline?
The SEC filing index shows 1 SPCX Form 4 filings, the insider-transaction form, since the June 12 listing, the earliest dated Jun 17, 2026. The index does not carry a transaction's direction, so nothing here says what that filing was. Since the peak the record carries 15 SPCX filings of any kind.
How long do IPO stocks stay above their first trading price?
Often not long. Measured identically across four high-profile 2025–26 listings, Klarna and Cerebras closed below their first regular-hours print in their debut session and CoreWeave on session 2, while SPCX held until session 16 and Medline had not broken within its first 16 sessions.
Data notes
- Entity verification (reused symbol): the SPCX symbol previously identified an unrelated company whose tape ran through April 2026; nothing before the June 12, 2026 listing is attributed to SpaceX, and every panel on this page is floored at that date. The scoreboard's issue-price receipt reads the
stocks_iposrecord (Space Exploration Technologies Corp., listed 2026-06-12); the first-month deep dive carries the full verification receipts. - "Latest complete session" means the most recent New York session carrying at least 150 regular-hours minute bars. That admits a scheduled half session and keeps a partially ingested day out of the current-state figures. The warehouse runs roughly one session behind the live tape, so the latest reading is normally the prior session.
- The peak passed the lone-print cross-check: the peak high printed across two consecutive minutes (10:02–10:03 a.m. ET on the peak session) with neighboring bars within about two dollars, a traced extreme rather than a stray print. A new high would break this page's peak-date bound and hold it for review.
- Quote panels exclude one-sided, crossed, or locked records and count what they drop in a
dropped_invalidcolumn of the same panel. The stock-quote panel samples two windows (the four weeks from listing, and the trailing three), so its scan cost stays flat as the page ages. - Volumes are minute-bar sums over regular hours only; extended-hours prints, including the pre-market June 23 low noted in the first-month post, sit outside every panel here.
- News counts are one vendor's feed, bucketed by New York calendar day; The Motley Fool wrote 80.7% of the tagged articles, so the counts measure feed attention, not importance.
- The EDGAR index carries form type, date, and URL only. Nothing here asserts the direction of any Form 4.
- The round-trip comparison scans each stock's first 26 calendar days and is pinned to explicit date literals, so it reproduces at any later date; "never in window" means exactly that.
Methodology
- This is a ROLLING post. Every current-state panel is bounded at the execution moment and re-measured on the weekly batch, and the page carries its "Data as of" stamp. The historical comparison panel uses explicit date literals and reproduces the same figures at any later date.
- Timestamps are stored in UTC and converted to New York time inside the queries; the regular session is selected on the ET clock (9:30 a.m. to 3:59 p.m. minute bars), so the window stays correct across the daylight-saving change. "Close" means the last regular-session minute bar; prices come from the delayed consolidated view.
- Decimal columns are cast to 64-bit floats before ratio arithmetic. Option expiry, type, and strike are parsed from the OCC ticker (positions 7/13/14 for this four-character root;
length(ticker) = 21pins the root exactly, so look-alike roots cannot leak in).
This post is the third in the SPCX series, following the first-month deep dive and the Nasdaq-100 index-add trade. Every figure is a stored query result, run the SQL yourself on the Strasmore terminal.