Strasmore Research
Deep Dives · Matt ConnorBy Matt Connor · · Updated 2026-08-20

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.

QueryThe arc on one row: issue price, first print, June peak, and the latest close
issue_priceipo_openpeak_pricepeak_labelpeak_monthpeak_daylatest_labellatest_closedrop_from_peak_usddecline_from_peak_pctpeak_above_ipo_pctvs_first_print_pctvs_issue_pctspy_period_pctspy_minus_spcx_pp
135150225.64Jun 16, 2026616Aug 19, 2026139.3186.3338.350.4-7.13.23.9611.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 sr
Run this yourself

Session 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.

QueryRegular-hours session scoreboard: open, close, low, high, volume for every SPCX session since listing
47 rows (showing 20)
session_datesession_labelrth_openrth_closerth_lowrth_highvol_m
2026-06-12Jun 12150161.29149.34176.52495.6
2026-06-15Jun 15171.74192.42168.35193219.6
2026-06-16Jun 16200.51201.99195.13225.64274.5
2026-06-17Jun 17209.84192.2187.01213.8179.3
2026-06-18Jun 18188.39184.97172.11190189.3
2026-06-22Jun 22176.04154.59154176.75150.7
2026-06-23Jun 23151.06156.06147.11165.5132.1
2026-06-24Jun 24154.2154.46150.72159.8665
2026-06-25Jun 25156.62153.01150160.6552.4
2026-06-26Jun 26150.62152.74148.51158.466.6
2026-06-29Jun 29157.35164151.74166.1767.9
2026-06-30Jun 30163.38170.72161.64172.471.4
2026-07-01Jul 1171.56157.69155171.7489.8
2026-07-02Jul 2159.72161.86155.88162.1650.7
2026-07-06Jul 6165.95160.4155.04167.975.8
2026-07-07Jul 7158.92149.58148.86159.366.2
2026-07-08Jul 8152.55148.33145.2152.9352.3
2026-07-09Jul 9150.44152.12147.59153.539.8
2026-07-10Jul 10150.12145.4145.07150.5738.8
2026-07-13Jul 13144.7139.19136.78144.9265.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_date
Run this yourself

Inside 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.

QueryLatest complete session, half-hour path: closes, lows, and volume
et_timeclose_pxbucket_lowvol_m
09:30139.68139.160.12
10:00139.89139.550.29
10:30139.7139.70.13
11:00139.52139.410.12
11:30139.39139.320.13
12:00139.52139.340.24
12:30139.31139.220.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_time
Run this yourself

The 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.

QueryStock quote spread and depth by session: the four weeks from listing and the trailing three
33 rows (showing 20)
session_datesession_labelavg_spread_bpsavg_depthdropped_invalid
2026-06-12Jun 1210.74950624988
2026-06-15Jun 155.1923678411
2026-06-16Jun 167.1414787679
2026-06-17Jun 17810794348
2026-06-18Jun 183.9786110114
2026-06-22Jun 222.5355303898
2026-06-23Jun 233.4446574050
2026-06-24Jun 246.552411970
2026-06-25Jun 255.632401335
2026-06-26Jun 264.348252960
2026-06-29Jun 294.543312280
2026-06-30Jun 304.413201227
2026-07-01Jul 13.423123839
2026-07-02Jul 24.53191411
2026-07-06Jul 63.823842449
2026-07-07Jul 74.1832653394
2026-07-08Jul 84.814562013
2026-07-09Jul 94.723281485
2026-07-10Jul 103.66853692
2026-07-30Jul 304.682892355
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_date
Run this yourself

Options: 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.

QueryLatest session on file: the busiest SPCX option contracts by volume
labelexpiry_labelsession_labelvolumenotional_m
145-strike callAug 21, 2026Aug 19, 2026294580.04
140-strike callAug 21, 2026Aug 19, 2026259760.08
140-strike putAug 21, 2026Aug 19, 2026255830.1
150-strike callAug 21, 2026Aug 19, 2026247960.01
160-strike callAug 21, 2026Aug 19, 2026247000
135-strike putAug 21, 2026Aug 19, 2026187050.03
140-strike callAug 28, 2026Aug 19, 2026129810.07
155-strike callAug 21, 2026Aug 19, 2026124860
130-strike putAug 21, 2026Aug 19, 2026105120.01
138-strike putAug 21, 2026Aug 19, 2026102300.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
Run this yourself
QueryPut/call volume ratio by session, trailing three weeks
session_datesession_labelpc_ratiocall_volput_vol
2026-07-30Jul 300.49446237220417
2026-07-31Jul 310.58693500399224
2026-08-03Aug 30.67469201313268
2026-08-04Aug 40.87791314689843
2026-08-05Aug 51.169730681130348
2026-08-06Aug 60.98844272827484
2026-08-07Aug 70.7116710391191298
2026-08-10Aug 100.73680522494674
2026-08-11Aug 110.84463593390503
2026-08-12Aug 120.721007840722266
2026-08-13Aug 130.82667160547380
2026-08-14Aug 140.82728039595505
2026-08-17Aug 170.78611684475398
2026-08-18Aug 180.75405459305787
2026-08-19Aug 190.61404640246774
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_date
Run this yourself

The 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.

QueryOptions quote spread and size at the touch, the sessions on file in the past week and a half
session_datesession_labelopt_spread_bpsavg_sizedropped_invalidquotes
2026-08-12Aug 121046.982378095110746231
2026-08-13Aug 131030.322216809119772601
2026-08-14Aug 141209.452198130103707347
2026-08-17Aug 171060.922297245110492463
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_date
Run this yourself

SPCX 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%.

QuerySPY vs SPCX open-to-close, regular hours, trailing three weeks
session_datesession_labelspy_pctspcx_pct
2026-07-30Jul 300.77-2.5
2026-07-31Jul 310.29-4.12
2026-08-03Aug 31.17.75
2026-08-04Aug 41.47.35
2026-08-05Aug 5-0.78-3.63
2026-08-06Aug 6-0.227.31
2026-08-07Aug 70.2815.78
2026-08-10Aug 100.062.81
2026-08-11Aug 11-0.53-3.82
2026-08-12Aug 12-0.288.26
2026-08-13Aug 130.38-1.74
2026-08-14Aug 14-0.29-2.14
2026-08-17Aug 17-0.454.5
2026-08-18Aug 18-0.171.85
2026-08-19Aug 190.140.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_date
Run this yourself

What 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.

QueryNews-feed attention from listing day to the latest reading: counts, concentration, and the trailing week
total_articlespublisherstop_publishertop_publisher_share_pctbusiest_monthbusiest_domipo_day_articlespeak_session_articlesmax_daily_after_peakipo_day_minus_max_afterfirst_week_avglast7_avgtsla_co_taggednasdaq_titled
6274The Motley Fool80.76124231291325.7312332
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()
Run this yourself

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.

QueryEvery SPCX filing in the EDGAR index since the June 12 listing, on one row
total_filingsform4_filingsform3_filingseightk_filingsother_filingsfirst_form4_labelfirst_form4_monthfirst_form4_domlast_filing_labeldays_since_last_filingfilings_since_peak
191189Jun 17, 2026617Aug 14, 2026615
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()
Run this yourself

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.

QuerySessions from listing to the first close below the first print: SPCX vs four recent IPOs
tickerlistedissue_pricefirst_rth_openopen_vs_issue_pctopen_vs_issue_pct_abssessions_in_windowcloses_below_first_printfirst_breakbreak_labelbreak_session_n
CRWV2025-03-284039-2.52.51732Mar 31, 20252
KLAR2025-09-104052303018181Sep 10, 20251
MDLN2025-12-17293520.720.7160never in windownever in window0
CBRS2026-05-1418535089.289.217171May 14, 20261
SPCX2026-06-1213515011.111.116116Jul 7, 202616
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_session
Run this yourself

FAQ

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_ipos record (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_invalid column 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) = 21 pins 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.