Strasmore Research
Deep dive investigation Matt ConnorBy Matt Connor · Updated 2026-10-01 · data as of October 1, 2026 · refreshed weekly

Upcoming IPO Lockup Expirations for Next 90 Days

See IPO lockup expirations for US listings wey dey come within next 90 days, with listing date, 180-day date, and latest close versus offer price.

Upcoming IPO lockup expirations na dates wey insiders and pre-IPO investors for newly listed company fit sell their shares for the first time. Lockup na contractual ban wey underwriters place on those holders when IPO happen, most times for 180 days. The calendar below list every priced US IPO wey conventional 180-day lockup go expire within the next 90 days, calculated from listing date, plus each stock latest close compared with the offer price. Dem calculate am on September 26, 2026, e get 63 names, and e dey regenerate during weekly refresh: any date wey don pass go comot, and the next one go move up. Full mechanics, including who the ban dey apply to, dey inside wetin IPO lockup expiration mean.

Upcoming IPO lockup expirations for the next 90 days

The nearest conventional date for now belong to KPETU (KPET Ultra Paceline Corp), wey list on Mar 31, and e 180th day na Sun, Sep 27, just 1 days from now. The farthest one na SIND on Wed, Dec 23, 88 days from now. Read the table from top to bottom like countdown: days_away column measure each date from the day dem compute the table, while unlock_180d na listing date plus 180 calendar days.

QueryIPO lockup calendar: US listings wey don price, and dia 180-day date go fall inside di next 90 days
63 rows (showing 20)
tickercompanylisted onlisted labelunlock 180dunlock labeldays awaycomputed on
KPETUKPET Ultra Paceline Corp2026-03-31Mar 312026-09-27Sun, Sep 271September 26, 2026
HMHHMH Holding Inc.2026-04-01Apr 12026-09-28Mon, Sep 282September 26, 2026
NHIVUNewHold Investment Corp IV2026-04-14Apr 142026-10-11Sun, Oct 1115September 26, 2026
ARXSArxis Inc.2026-04-16Apr 162026-10-13Tue, Oct 1317September 26, 2026
MAIRMadison Air Solutions Corp.2026-04-16Apr 162026-10-13Tue, Oct 1317September 26, 2026
ALMRAlamar Biosciences Inc.2026-04-17Apr 172026-10-14Wed, Oct 1418September 26, 2026
AVEXAEVEX Corp.2026-04-17Apr 172026-10-14Wed, Oct 1418September 26, 2026
KLRAKailera Therapeutics Inc.2026-04-17Apr 172026-10-14Wed, Oct 1418September 26, 2026
EMIEncore Medical Inc.2026-04-22Apr 222026-10-19Mon, Oct 1923September 26, 2026
NHPNational Healthcare Properties Inc.2026-04-22Apr 222026-10-19Mon, Oct 1923September 26, 2026
YSWYYesway Inc2026-04-22Apr 222026-10-19Mon, Oct 1923September 26, 2026
ELMTElmet Group Co. The2026-04-23Apr 232026-10-20Tue, Oct 2024September 26, 2026
XEX-Energy Inc.2026-04-24Apr 242026-10-21Wed, Oct 2125September 26, 2026
CXIIUChurchill Capital Corp XII2026-04-28Apr 282026-10-25Sun, Oct 2529September 26, 2026
PSUSPershing Square USA Ltd.2026-04-29Apr 292026-10-26Mon, Oct 2630September 26, 2026
AVLNAvalyn Pharma Inc.2026-04-30Apr 302026-10-27Tue, Oct 2731September 26, 2026
GCGRUGeneral Catalyst Global Resilience Merger Corp.2026-04-30Apr 302026-10-27Tue, Oct 2731September 26, 2026
SBMTSilver Bow Mining Corp.2026-04-30Apr 302026-10-27Tue, Oct 2731September 26, 2026
WENCUWest Enclave Merger Corp.2026-04-30Apr 302026-10-27Tue, Oct 2731September 26, 2026
COAGHemab Therapeutics Holdings Inc.2026-05-01May 12026-10-28Wed, Oct 2832September 26, 2026
The exact SQL behind every number
SELECT
    ticker,
    company,
    toString(listed_d)                                          AS listed_on,
    concat(formatDateTime(listed_d, '%b'), ' ',
           toString(toDayOfMonth(listed_d)))                    AS listed_label,
    toString(unlock_d)                                          AS unlock_180d,
    concat(formatDateTime(unlock_d, '%a, %b'), ' ',
           toString(toDayOfMonth(unlock_d)))                    AS unlock_label,
    dateDiff('day', today(), unlock_d)                          AS days_away,
    concat(monthName(today()), ' ',
           toString(toDayOfMonth(today())), ', ',
           toString(toYear(today())))                           AS computed_on
FROM
(
    SELECT
        ticker,
        argMax(issuer_name, _ingest_time)                       AS company,
        argMax(toDate(listing_date), _ingest_time)              AS listed_d,
        addDays(listed_d, 180)                                  AS unlock_d
    FROM global_markets.stocks_ipos
    WHERE ticker != ''
      AND ticker NOT IN ('SPCX')
      AND toDate(listing_date) BETWEEN today() - 180 AND today() - 90
      AND ipo_status NOT IN ('pending', 'postponed', 'withdrawn', 'rumor', 'direct_listing_process')
      AND positionCaseInsensitive(issuer_name, 'acquisition') = 0
      AND final_issue_price > 0
    GROUP BY ticker
)
ORDER BY unlock_d, ticker
Run am yourself

One rule for reading the date column: na convention, e no be the contract itself. Most US IPO underwriting agreements specify 180-day term, and na only term wey listing date fit produce by itself. Prospectus fit set another period, like 90 days or full year, or staggered schedule wey release part of the shares early. Listing record no contain those details. Methodology section below show how to check each row against prospectus; for the document itself, see how to find lockup expiration date. If the 180th day fall on weekend or market holiday, the shares go first trade on the next business day. Na why the label carry the weekday.

How these IPOs dey trade against their offer price?

Where stock dey trade compared with its offer price — the price wey IPO shares sell for — na the first thing most readers check on lockup calendar. E show the paper gain wey each holder class dey sit on. A pre-IPO investor wey pay fraction of the offer price fit still hold gain at almost any post-IPO level. The panel match every calendar name with its latest daily close and show the gap as percentage of offer price. The sign show whether the gap na positive or negative.

QueryLatest close versus IPO offer price for every name wey dey di calendar
55 rows (showing 20)
tickeroffer pricelast closevs offer pctpriced as of
COAG1834.7493September 25, 2026
ALMR1732.892.9September 25, 2026
ARXS2850.1279September 25, 2026
AVLN1828.0856September 25, 2026
PBLS2031.256September 25, 2026
ELMT1419.6440.3September 25, 2026
NHP1216.0333.6September 25, 2026
DPC3341.0324.3September 25, 2026
SPTX1821.5219.6September 25, 2026
LCLN2023.3716.9September 25, 2026
EROK18.521.5716.6September 25, 2026
SIND1213.9416.2September 25, 2026
ODTX1820.5113.9September 25, 2026
SSMR13.515.3513.7September 25, 2026
CBRS185206.7511.8September 25, 2026
CXIIU1011.1711.7September 25, 2026
RACC1010.929.2September 25, 2026
GCGRU1010.292.9September 25, 2026
NHIVU1010.242.4September 18, 2026
GHXIU1010.181.8September 25, 2026
The exact SQL behind every number
SELECT
    i.ticker                                                AS ticker,
    round(i.offer_px, 2)                                    AS offer_price,
    round(p.last_px, 2)                                     AS last_close,
    round((p.last_px / i.offer_px - 1) * 100, 1)            AS vs_offer_pct,
    concat(monthName(p.last_d), ' ',
           toString(toDayOfMonth(p.last_d)), ', ',
           toString(toYear(p.last_d)))                      AS priced_as_of
FROM
(
    SELECT
        ticker,
        argMax(toFloat64(final_issue_price), _ingest_time)  AS offer_px
    FROM global_markets.stocks_ipos
    WHERE ticker != ''
      AND ticker NOT IN ('SPCX')
      AND toDate(listing_date) BETWEEN today() - 180 AND today() - 90
      AND ipo_status NOT IN ('pending', 'postponed', 'withdrawn', 'rumor', 'direct_listing_process')
      AND positionCaseInsensitive(issuer_name, 'acquisition') = 0
      AND final_issue_price > 0
    GROUP BY ticker
) AS i
INNER JOIN
(
    SELECT
        ticker,
        toFloat64(argMax(close, date))                      AS last_px,
        max(date)                                           AS last_d
    FROM global_markets.stocks_daily_aggs
    WHERE date >= today() - 10
      AND close > 0
    GROUP BY ticker
) AS p ON p.ticker = i.ticker
ORDER BY vs_offer_pct DESC, ticker
Run am yourself

As of September 25, 2026, the top row dey trade 93% against its offer price, while the bottom row dey trade -81.8%, across 55 names wey print close within the last ten sessions. If name dey for calendar but e no dey here, e no get close on record for that period. Offer price na final issue price from IPO record, without adjustment for any later corporate action.

How many lockups dey pipeline?

Listings for each month dey enter lockup calendar roughly six months later. The panel count priced US listings by listing month over the last year. E exclude SPACs and direct listings with the same filter wey calendar use. The three months wey dey about six months behind na the ones wey dey fill the table above. The latest months show wetin calendar go hold six months from now.

QueryUS IPO listings wey don price by month, trailing year (di lockup pipeline)
monthmonth labelIPO count
2025-09Sep 20253
2025-10Oct 202530
2025-11Nov 202513
2025-12Dec 202517
2026-01Jan 202613
2026-02Feb 202618
2026-03Mar 20267
2026-04Apr 202618
2026-05May 202621
2026-06Jun 202623
2026-07Jul 202615
2026-08Aug 202611
2026-09Sep 20264
The exact SQL behind every number
SELECT
    formatDateTime(listing_month, '%Y-%m')                  AS month,
    formatDateTime(listing_month, '%b %Y')                  AS month_label,
    count()                                                 AS ipo_count
FROM
(
    SELECT
        ticker,
        toStartOfMonth(argMax(toDate(listing_date), _ingest_time)) AS listing_month
    FROM global_markets.stocks_ipos
    WHERE ticker != ''
      AND ticker NOT IN ('SPCX')
      AND toDate(listing_date) BETWEEN today() - 365 AND today()
      AND ipo_status NOT IN ('pending', 'postponed', 'withdrawn', 'rumor', 'direct_listing_process')
      AND positionCaseInsensitive(issuer_name, 'acquisition') = 0
      AND final_issue_price > 0
    GROUP BY ticker
)
GROUP BY listing_month
ORDER BY listing_month
Run am yourself

The series run from Sep 2025 (3 listings) reach Sep 2026 (4 so far). The end months short because of the trailing-year window. Lockups cluster the same way listings dey cluster: heavy listing month become heavy expiration month two quarters later. So row count for calendar fit change from one refresh to the next. The first-half 2026 IPO market review cover listing side in detail and use the same IPO record.

Lockup fit end early?

Yes, and listing date alone no fit show am. Two paths dey. Prospectus fit contain early-release provision, commonly release after the first post-IPO earnings report if stock close above stated multiple of offer price for a fixed number of days. Separately, underwriters fit waive lockup for some or all holders anytime. Dem often do am together with follow-on offering where the sellers na the same holders wey lockup bind. Either path go show for issuer filings, usually 8-K. 8-K na current report wey company file with SEC when material event happen. The panel below scan 8-K filings from issuers wey list within the last two years for lock-up mention.

Query8-K filings from recent IPO issuers wey mention lock-up, last 180 days
25 rows (showing 20)
tickerfiled onfiled labelform typelockup mentionsfiling URL
ELMT2026-09-24Sep 248-K1https://www.sec.gov/Archives/edgar/data/2101698/0001213900-26-102840.txt
GRDN2026-09-10Sep 108-K7https://www.sec.gov/Archives/edgar/data/1802255/0001193125-26-387858.txt
NTHI2026-09-10Sep 108-K3https://www.sec.gov/Archives/edgar/data/1979414/0001829126-26-009977.txt
SWMR2026-09-10Sep 108-K7https://www.sec.gov/Archives/edgar/data/2092574/0001104659-26-106499.txt
MAIR2026-08-25Aug 258-K6https://www.sec.gov/Archives/edgar/data/2098430/0001628280-26-058764.txt
ROC2026-08-19Aug 198-K14https://www.sec.gov/Archives/edgar/data/2077709/0001213900-26-091418.txt
HAWK2026-08-13Aug 138-K10https://www.sec.gov/Archives/edgar/data/1750704/0001750704-26-000018.txt
ATHR2026-08-11Aug 118-K9https://www.sec.gov/Archives/edgar/data/2026353/0001493152-26-037023.txt
RACC2026-07-27Jul 278-K8https://www.sec.gov/Archives/edgar/data/2118032/0001193125-26-316954.txt
ATHR2026-07-21Jul 218-K9https://www.sec.gov/Archives/edgar/data/2026353/0001493152-26-034007.txt
JUNS2026-07-21Jul 218-K1https://www.sec.gov/Archives/edgar/data/1679628/0001493152-26-034077.txt
CSQR2026-07-17Jul 178-K1https://www.sec.gov/Archives/edgar/data/2105398/0001104659-26-084616.txt
CRCL2026-07-02Jul 28-K1https://www.sec.gov/Archives/edgar/data/1876042/0001876042-26-000205.txt
XE2026-06-04Jun 48-K5https://www.sec.gov/Archives/edgar/data/2088896/0001193125-26-256369.txt
ARXS2026-06-02Jun 28-K6https://www.sec.gov/Archives/edgar/data/2093536/0001193125-26-252459.txt
WGRX2026-05-29May 298-K10https://www.sec.gov/Archives/edgar/data/2030763/0001493152-26-026452.txt
FJET2026-05-22May 228-K4https://www.sec.gov/Archives/edgar/data/1947016/0001062993-26-002837.txt
JUNS2026-05-20May 208-K1https://www.sec.gov/Archives/edgar/data/1679628/0001493152-26-024547.txt
EROK2026-05-19May 198-K5https://www.sec.gov/Archives/edgar/data/2104882/0001193125-26-231118.txt
CAEP2026-05-11May 118-K2https://www.sec.gov/Archives/edgar/data/2034268/0001213900-26-054575.txt
The exact SQL behind every number
SELECT
    k.ticker                                                   AS ticker,
    toString(toDate(k.filing_date))                            AS filed_on,
    concat(formatDateTime(toDate(k.filing_date), '%b'), ' ',
           toString(toDayOfMonth(toDate(k.filing_date))))      AS filed_label,
    any(k.form_type)                                           AS form_type,
    max(countSubstringsCaseInsensitive(k.items_text, 'lock-up')
        + countSubstringsCaseInsensitive(k.items_text, 'lockup')) AS lockup_mentions,
    any(k.filing_url)                                          AS filing_url
FROM global_markets.stocks_8k_text AS k
WHERE k.ticker IN
(
    SELECT ticker
    FROM global_markets.stocks_ipos
    WHERE ticker != ''
      AND ticker NOT IN ('SPCX')
      AND toDate(listing_date) BETWEEN today() - 730 AND today() - 30
      AND ipo_status NOT IN ('pending', 'postponed', 'withdrawn', 'rumor', 'direct_listing_process')
      AND positionCaseInsensitive(issuer_name, 'acquisition') = 0
      AND final_issue_price > 0
)
  AND toDate(k.filing_date) >= today() - 180
  AND (positionCaseInsensitive(k.items_text, 'lock-up') > 0
       OR positionCaseInsensitive(k.items_text, 'lockup') > 0)
GROUP BY k.ticker, k.accession_number, k.filing_date
ORDER BY k.filing_date DESC, k.ticker
LIMIT 25
Run am yourself

Matches for the last 180 days: 25, capped at 25. The newest one na from ELMT on Sep 24. Match na only a lead. Follow-on offering 8-K fit mention lock-up agreements for the new deal. Earnings 8-K fit simply repeat the schedule. Open the filing through the link in the table and read the paragraph. Early lockup releases and waivers explain the forms wey these arrangements take and who get authority to grant dem.

Wetin dey happen during the two weeks after lockup expires?

The question behind every lockup calendar na whether stock go fall once the shares become free. do stocks fall after lockup expiration track price path around past expiration dates from the same listing record and refresh on its own schedule. So the figures dey cited there, no be copied here. Wetin this page add na checklist for the two weeks after any date for table above:

  • Volume compared with the stock own average during sessions before the date. Freed float — shares wey dey available for trading — wey people actually dey sell go show as increase in shares traded, no matter wetin price do.
  • Form 4 filings. Section 16 insiders — officers and directors, plus any holder above 10% — must report open-market sales within two business days. This means first insider sales go appear on EDGAR within the same week.
  • Daily short volume ratio, meaning the share of each day volume wey dem mark as short sales. Traders wey borrow stock before the date get fresh supply to cover once the date pass.
  • Secondary offering filed on or just before the date. This na common sign of early release, and the 8-K panel above dey catch many of dem.

How dem compute each row?

You fit reproduce every row from the SQL under its panel. The steps be:

  1. Source. IPO listing record provide ticker, issuer name, listing date and final issue price. Latest close come from daily bars. Filings come from SEC EDGAR index and 8-K text feed.
  2. Filters. Na priced IPOs only. Dem exclude SPACs — any issuer wey get “acquisition” for its name — and direct listings. Neither follows 180-day convention. One reused symbol wey tag two companies for vendor feeds dey excluded inside SQL.
  3. Window. Listing date must fall between 180 and 90 days ago. Na exactly the set wey 180th day go fall between today and 90 days from now.
  4. Expiration. Listing date plus 180 calendar days, applied uniformly. Dem never read am from prospectus.
  5. Price versus offer. Latest daily close within the last ten sessions, divided by final issue price, minus one, shown as percentage.
  6. Refresh. Weekly. computed_on column show the date wey dem compute the table.

To verify row, open final prospectus — SEC form 424B4, or 424B1 for some deals — from receipts panel below and search for “lock-up”. Underwriting section state the length and any early-release condition. Shares Eligible for Future Sale section give the share counts. If prospectus set staggered schedule, note each tranche date separately. Calendar show one date per name and no fit split am.

Prospectus receipts for every calendar name

The panel match each calendar name with its final prospectus for EDGAR index, filed within two weeks of listing date. E find 54 filings for the 63 names inside calendar. If name no dey here, e either price under form type outside the two searched, or dem never attach its ticker to EDGAR record.

QueryFinal prospectus (424B4 / 424B1) wey dey file for each name for di calendar
54 rows (showing 20)
tickerform typefiled onprospectus URL
AADX424B42026-06-04https://www.sec.gov/Archives/edgar/data/2118195/0001193125-26-256356.txt
AIAI424B42026-05-14https://www.sec.gov/Archives/edgar/data/2096362/0001493152-26-022855.txt
ALMR424B42026-04-17https://www.sec.gov/Archives/edgar/data/2104204/0001193125-26-161647.txt
APURU424B42026-05-21https://www.sec.gov/Archives/edgar/data/2093524/0001213900-26-060082.txt
ARXS424B42026-04-16https://www.sec.gov/Archives/edgar/data/2093536/0001193125-26-159369.txt
AVEX424B42026-04-20https://www.sec.gov/Archives/edgar/data/2096300/0001193125-26-162601.txt
BXDC424B42026-05-15https://www.sec.gov/Archives/edgar/data/2100161/0001193125-26-225090.txt
CAES424B42026-06-17https://www.sec.gov/Archives/edgar/data/2087965/0001213900-26-069612.txt
CBRS424B42026-05-14https://www.sec.gov/Archives/edgar/data/2021728/0001628280-26-035214.txt
CGCFU424B42026-06-25https://www.sec.gov/Archives/edgar/data/2126043/0001185185-26-002653.txt
CNXU424B42026-05-11https://www.sec.gov/Archives/edgar/data/2066836/0001062993-26-002473.txt
COAG424B42026-05-01https://www.sec.gov/Archives/edgar/data/2114044/0001193125-26-201458.txt
CXIIU424B42026-04-28https://www.sec.gov/Archives/edgar/data/2114227/0001213900-26-048413.txt
DPC424B42026-06-26https://www.sec.gov/Archives/edgar/data/2107018/0001104659-26-077968.txt
ELMT424B42026-04-23https://www.sec.gov/Archives/edgar/data/2101698/0001213900-26-047144.txt
EROC424B42026-06-10https://www.sec.gov/Archives/edgar/data/2110029/0001193125-26-265898.txt
EROK424B42026-05-14https://www.sec.gov/Archives/edgar/data/2104882/0001193125-26-224302.txt
FCBM424B42026-06-18https://www.sec.gov/Archives/edgar/data/1531193/0001140361-26-025790.txt
FRBT424B42026-06-11https://www.sec.gov/Archives/edgar/data/1925062/0001628280-26-042580.txt
FRVO424B42026-05-14https://www.sec.gov/Archives/edgar/data/1853868/0001628280-26-034849.txt
The exact SQL behind every number
SELECT
    e.ticker                                   AS ticker,
    any(e.form_type)                           AS form_type,
    toString(toDate(e.filing_date))            AS filed_on,
    any(e.filing_url)                          AS prospectus_url
FROM global_markets.stocks_sec_edgar_index AS e
INNER JOIN
(
    SELECT
        ticker,
        argMax(toDate(listing_date), _ingest_time) AS listed_d
    FROM global_markets.stocks_ipos
    WHERE ticker != ''
      AND ticker NOT IN ('SPCX')
      AND toDate(listing_date) BETWEEN today() - 180 AND today() - 90
      AND ipo_status NOT IN ('pending', 'postponed', 'withdrawn', 'rumor', 'direct_listing_process')
      AND positionCaseInsensitive(issuer_name, 'acquisition') = 0
      AND final_issue_price > 0
    GROUP BY ticker
) AS i ON i.ticker = e.ticker
WHERE e.form_type IN ('424B4', '424B1')
  AND toDate(e.filing_date) >= today() - 200
  AND toDate(e.filing_date) BETWEEN addDays(i.listed_d, -14) AND addDays(i.listed_d, 14)
GROUP BY e.ticker, e.accession_number, e.filing_date
ORDER BY e.ticker, e.filing_date
Run am yourself

FAQ

How long IPO lockup period dey last?

Most US IPO lockups last 180 days from the date of final prospectus. Underwriting agreement set the period, no be any rule. Shorter and longer periods dey happen. Some agreements release part of the shares early through staggered schedule or after company first earnings report.

How I fit find exact lockup expiration date for stock?

Open final prospectus — SEC form 424B4 — on EDGAR and search for “lock-up”. Underwriting section state the length and any early-release condition. Count from prospectus date, because e fit differ from first trading day by one or two days.

Insiders fit sell before lockup expires?

No, not on open market, unless underwriters release dem early. Lock-up agreements get narrow exceptions, including gifts, transfers to family trusts, shares withheld to cover taxes on vesting equity, and transfers in tender offer or merger. These exceptions no put the stock on exchange.

Stocks always dey fall when lockup expires?

No. Expiration remove restriction on supply. Whether holders sell into the market, and how much dem sell, depend on the stock. Companion post on whether stocks fall after lockup expiration measure price path around past dates.

Wetin happen if lockup expiration fall on weekend?

Agreement still end on that calendar date. The first session wey freed shares fit trade na the next business day. Calendar label the weekday for this reason.


Every panel here come with the exact SQL beneath am. To check one name, or pull calendar for another window, ask the question in plain English on the Strasmore terminal.

#ipo lockup#lockup expiration#lockup calendar#upcoming lockups#insider selling