Any US stock or ETF's full daily price, dividend and split history in one Excel file, $5 per ticker, one payment, no subscription.Pick a ticker
Strasmore Research
Deep Dives Matt ConnorBy Matt Connor · Updated 2026-11-01 · data as of November 1, 2026 · refreshed weekly

Upcoming IPO Lockup Expirations: Next 90 Days

A refreshed calendar of upcoming IPO lockup expirations for US listings in the next 90 days: listing date, 180-day date, and each close versus offer price.

Upcoming IPO lockup expirations are the dates on which a newly listed company's insiders and pre-IPO investors become free to sell shares for the first time. A lockup is the contractual ban on selling that the underwriters place on those holders at the IPO, most often for 180 days. The calendar below lists every priced US IPO whose conventional 180-day lockup lands inside the next 90 days, computed from the listing date, with each stock's latest close set against its offer price. It was computed on November 1, 2026, holds 56 names, and regenerates on the weekly refresh: a date that passes drops off and the next one moves up. The full mechanics, including whom the ban binds, are in what an IPO lockup expiration is.

Upcoming IPO lockup expirations in the next 90 days

The soonest conventional date in view belongs to REA (Rare Earths Americas Inc.), listed on May 6, whose 180th day is Mon, Nov 2, 1 days out. The farthest is XIIIU on Wed, Jan 27, 87 days out. Read the table top to bottom as a countdown: the days_away column measures each date from the day the table was computed, and unlock_180d is the listing date plus 180 calendar days.

QueryIPO lockup calendar: priced US listings whose 180-day date falls in the next 90 days
56 rows (showing 20)
tickercompanylisted_onlisted_labelunlock_180dunlock_labeldays_awaycomputed_on
REARare Earths Americas Inc.2026-05-06May 62026-11-02Mon, Nov 21November 1, 2026
HAWKHawkEye 360 Inc.2026-05-07May 72026-11-03Tue, Nov 32November 1, 2026
SUJASuja Life Inc.2026-05-07May 72026-11-03Tue, Nov 32November 1, 2026
MOBIMobia Medical Inc.2026-05-08May 82026-11-04Wed, Nov 43November 1, 2026
ODTXOdyssey Therapeutics Inc2026-05-08May 82026-11-04Wed, Nov 43November 1, 2026
AIAIAIAI Holdings Corp2026-05-11May 112026-11-07Sat, Nov 76November 1, 2026
FRVOFervo Energy Co.2026-05-13May 132026-11-09Mon, Nov 98November 1, 2026
GMRSGMR Solutions Inc.2026-05-13May 132026-11-09Mon, Nov 98November 1, 2026
MWCMicware Co. Ltd.2026-05-13May 132026-11-09Mon, Nov 98November 1, 2026
BXDCBlackstone Digital Infrastructure Trust Inc.2026-05-14May 142026-11-10Tue, Nov 109November 1, 2026
CBRSCerebras Systems Inc2026-05-14May 142026-11-10Tue, Nov 109November 1, 2026
EROKEagleRock Land LLC2026-05-14May 142026-11-10Tue, Nov 109November 1, 2026
APURUAperture AC2026-05-15May 152026-11-11Wed, Nov 1110November 1, 2026
ETSSUEnergy Transition Special Opportunities2026-05-15May 152026-11-11Wed, Nov 1110November 1, 2026
VIDAVIDA Global Inc.2026-05-15May 152026-11-11Wed, Nov 1110November 1, 2026
LCLNLincoln International Inc.2026-05-20May 202026-11-16Mon, Nov 1615November 1, 2026
RACCResearch Alliance Corp III2026-05-20May 202026-11-16Mon, Nov 1615November 1, 2026
CNXUConexeu Sciences Inc.2026-05-21May 212026-11-17Tue, Nov 1716November 1, 2026
AADXApplied Aerospace Defense Inc.2026-06-03Jun 32026-11-30Mon, Nov 3029November 1, 2026
LTGRULong Table Growth Corp2026-06-03Jun 32026-11-30Mon, Nov 3029November 1, 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 this yourself

One rule for reading the date column: it is the convention, not the contract. A 180-day term is what most US IPO underwriting agreements specify, and it is the only term a listing date can produce on its own. A prospectus can set a different length (90 days and a full year both occur) or a staggered schedule that frees a slice of the shares early, and none of that lives in the listing record. The methodology section below shows how to check a row against the prospectus; for the document itself, see how to find a lockup expiration date. When the 180th day lands on a weekend or a market holiday, the freed shares first trade on the next business day. The label carries the weekday for that reason.

How do these IPOs trade versus their offer price?

Where a stock sits relative to its offer price, the price at which the IPO shares were sold, is the first thing most readers check on a lockup calendar: it sets the paper gain each class of holder is sitting on, and a pre-IPO investor who paid a fraction of the offer holds a gain at almost any post-IPO level. The panel matches every calendar name to its latest daily close and expresses the gap as a percentage of the offer price, with the sign carrying the direction.

QueryLatest close versus IPO offer price for every name in the calendar
52 rows (showing 20)
tickeroffer_pricelast_closevs_offer_pctpriced_as_of
IMC511.24124.8October 30, 2026
BSP2945.5257October 30, 2026
PBLS2028.3241.6October 30, 2026
LCLN2024.9724.8October 30, 2026
ODTX1819.548.6October 30, 2026
EROK18.519.817.1October 30, 2026
REF1515.825.5October 30, 2026
XIIIU1010.383.8October 30, 2026
FCBM12.512.883October 30, 2026
SCTX1515.422.8October 30, 2026
APMD1616.42.5October 30, 2026
RACD1010.242.4October 30, 2026
RACC1010.151.5October 30, 2026
WHK2626.251October 30, 2026
FRBT1818.170.9October 30, 2026
SHOTU1010.070.7October 30, 2026
GHXIU1010.050.5October 30, 2026
CAES1010.030.3October 30, 2026
YICCU10100October 30, 2026
CCCTU109.99-0.1October 29, 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 this yourself

As of October 30, 2026, the top row trades 124.8% against its offer price and the bottom row -93.8%, across 52 names that printed a close within the last ten sessions. A name that appears in the calendar but not here has no close on record in that window. The offer price is the final issue price from the IPO record, unadjusted for any later corporate action.

How many lockups are in the pipeline?

Each month's listings become the lockup calendar roughly six months later. The panel counts priced US listings by listing month over the trailing year, with SPACs and direct listings excluded under the same filter the calendar uses. The three months that sit about six months back are the ones filling the table above; the most recent months show what the calendar will hold half a year from now.

QueryPriced US IPO listings by month, trailing year (the lockup pipeline)
monthmonth_labelipo_count
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 20266
2026-10Oct 202610
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 this yourself

The series runs from Nov 2025 (13 listings) to Oct 2026 (10 so far), with the end months clipped by the trailing-year window. Lockups cluster the way listings do: a heavy listing month becomes a heavy expiration month two quarters later, and the calendar's row count swings with it from one refresh to the next. The first-half 2026 IPO market review covers the listing side in detail, drawing on the same IPO record.

Can a lockup end early?

Yes, and a listing date alone cannot show it. There are two paths. The prospectus may carry an early-release provision, commonly a release after the first post-IPO earnings report if the stock has closed above a stated multiple of the offer price for a set number of days. Separately, the underwriters can waive the lockup for some or all holders at any time, and often do alongside a follow-on offering in which the sellers are the very holders the lockup binds. Either path surfaces in the issuer's own filings, usually an 8-K, the current report a company files with the SEC when something material happens. The panel below scans 8-K filings from issuers that listed in the last two years for a lock-up mention.

Query8-K filings from recent IPO issuers that mention a lock-up, last 180 days
23 rows (showing 20)
tickerfiled_onfiled_labelform_typelockup_mentionsfiling_url
MWYN2026-10-20Oct 208-K1https://www.sec.gov/Archives/edgar/data/2030522/0001213900-26-111022.txt
CDNL2026-10-19Oct 198-K2https://www.sec.gov/Archives/edgar/data/2079999/0001193125-26-424737.txt
ELMT2026-09-24Sep 248-K1https://www.sec.gov/Archives/edgar/data/2101698/0001213900-26-102840.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
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 this yourself

Matches over the last 180 days: 23, capped at 25, the newest from MWYN on Oct 20. A match is only a lead. A follow-on offering 8-K mentions lock-up agreements for the new deal; an earnings 8-K may simply restate the schedule. Open the filing from the link in the table and read the paragraph. Early lockup releases and waivers walks through the forms these take and who has the authority to grant them.

What happens in the two weeks after a lockup expires?

The question behind every lockup calendar is whether the stock drops once the shares are free. That measurement lives in do stocks fall after lockup expiration, which tracks the price path around past expiration dates from the same listing record and refreshes on its own schedule, so the figures are cited there rather than copied here. What this page adds is a checklist for the two weeks after any date in the table above:

  • Volume against the stock's own average over the sessions before the date. A freed float (the shares available to trade) that is actually being sold shows up as a step in shares traded, whatever the price does.
  • Form 4 filings. Section 16 insiders (officers and directors, plus any holder above 10%) report open-market sales within two business days, which puts the first insider sales on EDGAR inside the same week.
  • The daily short volume ratio, the share of each day's volume marked as short sales. Traders who borrowed stock ahead of the date have fresh supply to cover against once it passes.
  • A secondary offering filed at or just before the date. That is a common shape for an early release, and the 8-K panel above catches many of them.

How is each row computed?

Every row can be reproduced from the SQL under its panel. The steps:

  1. Source. The IPO listing record supplies ticker, issuer name, listing date and final issue price; the latest close comes from daily bars; filings come from the SEC EDGAR index and the 8-K text feed.
  2. Filters. Priced IPOs only. SPACs (any issuer with "acquisition" in its name) and direct listings are excluded: neither follows the 180-day convention. One reused symbol that tags two companies in vendor feeds is excluded in the SQL.
  3. Window. A listing date between 180 and 90 days ago, exactly the set whose 180th day falls between today and 90 days out.
  4. Expiration. Listing date plus 180 calendar days, applied uniformly, never read from a prospectus.
  5. Price versus offer. The latest daily close within the last ten sessions, divided by the final issue price, minus one, in percent.
  6. Refresh. Weekly. The computed_on column dates the table.

To verify a row, open the final prospectus (SEC form 424B4, or 424B1 for some deals) from the receipts panel below and search for "lock-up". The Underwriting section states the length and any early-release condition; the Shares Eligible for Future Sale section gives the share counts. Where the prospectus sets a staggered schedule, note each tranche date separately. The calendar shows one date per name and cannot split it.

Prospectus receipts for every calendar name

The panel matches each calendar name to its final prospectus in the EDGAR index, filed within two weeks of the listing date. It found 53 filings for the 56 names in the calendar. A name missing here priced under a form type outside the two searched, or its ticker has not yet been attached to its EDGAR record.

QueryFinal prospectus (424B4 / 424B1) on file for each calendar name
53 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
APURU424B42026-05-21https://www.sec.gov/Archives/edgar/data/2093524/0001213900-26-060082.txt
BRTMU424B42026-07-21https://www.sec.gov/Archives/edgar/data/2131350/0001193125-26-310471.txt
BSP424B42026-07-01https://www.sec.gov/Archives/edgar/data/2004711/0001104659-26-079884.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
CCCTU424B42026-07-09https://www.sec.gov/Archives/edgar/data/2123471/0001185185-26-002864.txt
CCCTU424B42026-07-09https://www.sec.gov/Archives/edgar/data/2123471/0001185185-26-002862.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
CSQR424B42026-07-16https://www.sec.gov/Archives/edgar/data/2105398/0001104659-26-084293.txt
DPC424B42026-06-26https://www.sec.gov/Archives/edgar/data/2107018/0001104659-26-077968.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
GHXIU424B42026-06-23https://www.sec.gov/Archives/edgar/data/2086438/0001193125-26-279710.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 this yourself

FAQ

How long is an IPO lockup period?

Most US IPO lockups run 180 days from the date of the final prospectus, a term set by the underwriting agreement rather than by any rule. Shorter and longer terms both occur, and some agreements release a portion of the shares early on a staggered schedule or after the company's first earnings report.

How do I find the exact lockup expiration date for a stock?

Open the final prospectus (SEC form 424B4) on EDGAR and search for "lock-up". The Underwriting section states the length and any early-release condition. Count from the prospectus date, which can differ from the first trading day by a day or two.

Can insiders sell before the lockup expires?

Not on the open market, unless the underwriters release them early. Lock-up agreements carry narrow exceptions (gifts, transfers to family trusts, shares withheld to cover taxes on vesting equity, transfers in a tender offer or merger) that do not put stock on the exchange.

Do stocks always fall when a lockup expires?

No. The expiration removes a restriction on supply; whether holders sell into it, and how much, varies by name. The companion post on whether stocks fall after lockup expiration measures the price path around past dates.

What if a lockup expiration falls on a weekend?

The agreement still ends on that calendar date, and the first session on which the freed shares can trade is the next business day. The calendar labels the weekday of each date for that reason.


Every panel here ships with the exact SQL beneath it. To check one name, or to pull the calendar for a different window, ask the question in plain English on the Strasmore terminal.

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