pop_spread
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-10-02, from what-is-gmp-in-an-ipo.
| band | listing_count | share_pct |
|---|---|---|
| opened more than 10% below offer | 72 | 5.9 |
| opened 0-10% below offer | 162 | 13.3 |
| opened 0-10% above offer | 378 | 31 |
| opened 10-30% above offer | 194 | 15.9 |
| opened 30-60% above offer | 139 | 11.4 |
| opened more than 60% above offer | 274 | 22.5 |
- Rows × columns
- 6 × 3
- Computed
- Completeness
- No missing values
- Source
- US exchange, SIP and OPRA market data
- Licence
- Strasmore terms · free, no signup
What each column holds
| Column | Type | Range | Notes |
|---|---|---|---|
band |
text | 6 distinct values | |
listing_count |
number | 72 to 378 | count |
share_pct |
number | 5.9 to 31 | percent |
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.
Run it yourself
This is the exact query behind the result above. Change a ticker, a date or a column and run it against the warehouse — no account, no key. The no-signup tier is smaller than the one this page was computed on; a query that reaches past it comes back saying which plan runs it.
WITH issues AS
(
SELECT
ticker,
min(listing_date) AS listing_dt,
max(toFloat64(final_issue_price)) AS offer_price
FROM global_markets.stocks_ipos
WHERE listing_date >= '2021-01-01'
AND listing_date < '2026-07-01'
AND final_issue_price > 0
AND issuer_name NOT ILIKE '%acquisition%'
AND ticker NOT IN ('SPCX')
GROUP BY ticker
),
debut AS
(
SELECT
i.offer_price AS offer_price,
argMin(toFloat64(d.open), d.date) AS first_open
FROM issues AS i
INNER JOIN global_markets.stocks_daily_aggs AS d ON d.ticker = i.ticker
WHERE d.date >= i.listing_dt
AND d.date < i.listing_dt + 7
GROUP BY i.ticker, i.offer_price
)
SELECT
band,
count() AS listing_count,
round(100 * count() / sum(count()) OVER (), 1) AS share_pct
FROM
(
SELECT
round(100 * (first_open / offer_price - 1), 2) AS pop_pct,
multiIf(pop_pct < -10, 1, pop_pct < 0, 2, pop_pct < 10, 3, pop_pct < 30, 4, pop_pct < 60, 5, 6) AS band_rank,
multiIf(pop_pct < -10, 'opened more than 10% below offer',
pop_pct < 0, 'opened 0-10% below offer',
pop_pct < 10, 'opened 0-10% above offer',
pop_pct < 30, 'opened 10-30% above offer',
pop_pct < 60, 'opened 30-60% above offer',
'opened more than 60% above offer') AS band
FROM debut
WHERE first_open > 0
)
GROUP BY band, band_rank
ORDER BY band_rank
Work with this data in your AI assistant
Opens ready to query, with this page's data. Free, no account.