STRASMORE/EXPLORE 2,170 QUERIES

SPY options median spread by expiration date, near-the-money strikes only

Answered against 22 years of US equities and 12 years of US options data and published with the query that produced it. This result is stored as of 2026-08-14, from How Much Does It Cost to Trade Options?.

as of ranking 25×4read in context →
SPY options median spread by expiration date, near-the-money strikes only — 25 rows by 4 columns, computed from US exchange, SIP and OPRA data.
expiry_codequote_updates_millionsmedian_spread_bpsmedian_width_cents
26070216.8113.642
26070611104.713
26070710.8144.583
26070812.7130.723
26070912.3118.343
26071014.7106.193
26071313.496.153
26071413.282.993
26071512.477.223
2607162.380.324
26071714.471.513
2607241365.494
26073112.554.274
2608077.150.255
2608145.347.016
26082111.345.186
26083110.243.966
26091812.230.075
2609307.135.47
2610162.634.127
2610303.639.569
2611201.935.8910
2611304.839.3110
2612182.330.499
2612311.737.1611
Rows × columns
25 × 4
Computed
Completeness
No missing values
Source
US exchange, SIP and OPRA market data
Licence
Strasmore terms · free, no signup
Formats
JSON · CSV · the SQL below

What each column holds

Column definitions for SPY options median spread by expiration date, near-the-money strikes only, derived from the stored result.
ColumnTypeRangeNotes
expiry_code text 25 distinct values (260702, 260706, 260707…)
quote_updates_millions number 1.7 to 16.8
median_spread_bps number 30.07 to 144.58
median_width_cents number 2 to 11

Computed from Strasmore's warehouse of US exchange, SIP and OPRA market data. Equity prices are delayed; options greeks and implied volatility are end-of-day. This result is stored, not recomputed on load — it is exactly the numbers that were returned on , and the query below is what returned them.

the exact SQL behind every number
WITH opts AS (
    SELECT
        toFloat64(ask_price) - toFloat64(bid_price) AS width,
        (toFloat64(ask_price) + toFloat64(bid_price)) / 2 AS mid,
        substring(ticker, -15, 6) AS expiry_code,
        toUInt32OrZero(substring(ticker, -8)) / 1000 AS strike,
        cityHash64(ticker, sip_timestamp) AS det
    FROM global_markets.cache_options_quotes
    WHERE sip_timestamp >= '2026-07-02 13:30:00' AND sip_timestamp < '2026-07-02 20:00:00'
      AND ticker >= 'O:SPY26' AND ticker < 'O:SPY27'
      AND bid_price > 0 AND ask_price > 0 AND ask_price > bid_price
      AND strike BETWEEN 730 AND 760
)
SELECT
    expiry_code,
    round(count() / 1e6, 1) AS quote_updates_millions,
    round(quantileDeterministic(0.5)(width / mid * 10000, det), 2) AS median_spread_bps,
    round(quantileDeterministic(0.5)(width * 100, det), 2) AS median_width_cents
FROM opts
GROUP BY expiry_code
HAVING count() >= 1000000
ORDER BY expiry_code ASC

Run your own version of this

The same 22 years of US equities and 12 years of options data are queryable in SQL or plain English. A free account runs 100 queries a day and takes no card.

More from this analysisHow Much Does It Cost to Trade Options?
Options bid-ask spreads by product: median basis points, July 2, 2026 regular hours ranking 5×4 Options trade size distribution on July 2, 2026 (whole-tape contracts per print) scalar 1×4 SPY options vs. SPY stock on one session: quote count, trade count, and median quoted spread scalar 1×10 SPY options quoted-spread distribution: percentiles in basis points scalar 1×6 SPY options quote quality: valid, one-sided, and locked/crossed records scalar 1×7 AAPL trades by venue, latest session: off-exchange first ranking 19×4 See all 2,170 queries →