Strasmore Research
Learn am Matt ConnorBy Matt Connor

How to Find IPO Lockup Expiration Date

Lockup expiration date dey inside the IPO prospectus, no be calendar page. See where to find am and why 180 days from first trade fit miss road.

Lockup expiration date dey inside IPO prospectus, and the fastest way to find am na to open issuer final prospectus for EDGAR and read two places: section wey get heading “Shares Eligible for Future Sale” and “Lock-Up Agreements” discussion inside “Underwriting”. Together, dem show how many shares go become sellable and the day restriction go end. The counting rule below na where most published dates dey miss road, while the release conditions after am na why printed date sometimes no be the effective one.

If you want understand the concept first, wetin IPO lockup be explain wetin the agreement dey do and who dey sign am. This page na for lookup.

Where dem write lockup expiration date

Every US IPO dey leave the same paper trail. Open EDGAR full text search, find the company, and open the filing list.

  • The S-1 na registration statement. E carry lockup language from the first public draft, and amendments dey come as S-1/A. Terms fit change between dem.
  • The 424B4 na final prospectus, filed within two business days after pricing. E match the deal wey actually happen. Na this one you suppose read.

Inside the document, search both spellings, “lock-up” and “lockup”, because filings no dey consistent with the hyphen. Three sections carry the answer.

  • Shares Eligible for Future Sale na the supply schedule: how many shares restricted and the date each block go become eligible for sale. The sentence wey you dey find fit read like “beginning 181 days after the date of this prospectus”.
  • Underwriting, sometimes headed “No Sales of Similar Securities”, na the contract: who sign am, wetin dem no fit do, the carve-outs, and which underwriters get power to release shares early.
  • Risk Factors almost always restate the schedule with simpler English, inside the risk factor about substantial future sales.

Filings wey company dey make cover the rest of the form alphabet.

Count from pricing date, no be first trading day

The clock start from “the date of this prospectus”. Na pricing date be that—the evening wey underwriters set the price. The stock open for the next session. Anybody wey count 180 days from the first bar for chart go land one day late.

The count na calendar days too, no be trading sessions, and the date fit land on Saturday. Nine well-known listings, with day 180 counted from each deal pricing date:

QueryDay 180 wey dem count from pricing date: nine US listings
The exact SQL behind every number
WITH ipos AS (
    SELECT tupleElement(pair, 1) AS ticker,
           toDate(tupleElement(pair, 2)) AS pricing_date
    FROM (
        SELECT arrayJoin([('LYFT', '2019-03-28'), ('UBER', '2019-05-09'),
                          ('DASH', '2020-12-08'), ('ABNB', '2020-12-09'),
                          ('HOOD', '2021-07-28'), ('RIVN', '2021-11-09'),
                          ('CAVA', '2023-06-14'), ('BIRK', '2023-10-10'),
                          ('RDDT', '2024-03-20')]) AS pair
    )
),
sessions AS (
    SELECT DISTINCT toDate(toTimeZone(window_start, 'America/New_York')) AS session_date
    FROM global_markets.delayed_stocks_minute_aggs
    WHERE ticker = 'SPY'
      AND window_start >= toDateTime('2019-03-01 00:00:00')
      AND window_start < toDateTime('2026-08-01 00:00:00')
)
SELECT i.ticker AS ticker,
       formatDateTimeInJodaSyntax(i.pricing_date, 'MMM d, yyyy') AS pricing_date_label,
       formatDateTimeInJodaSyntax(addDays(i.pricing_date, 180), 'MMM d, yyyy') AS day_180_label,
       formatDateTime(addDays(i.pricing_date, 180), '%W') AS day_180_weekday,
       countIf(s.session_date > i.pricing_date
               AND s.session_date <= addDays(i.pricing_date, 180)) AS market_opens,
       formatDateTimeInJodaSyntax(
           minIf(s.session_date, s.session_date >= addDays(i.pricing_date, 180)),
           'MMM d, yyyy') AS next_open_session_label
FROM ipos AS i
CROSS JOIN sessions AS s
GROUP BY i.ticker, i.pricing_date
ORDER BY (minIf(s.session_date, s.session_date >= addDays(i.pricing_date, 180))
          > addDays(i.pricing_date, 180)) DESC,
         i.pricing_date ASC
Run this yourself

One hundred and eighty calendar days come to 122 market opens for DASH and 123 for RDDT. If you count 180 trading days instead, you go land roughly two months after the real date. Na the other common way people dey get am wrong.

The panel arrange am so any count wey land when market close go show first. DASH price on Dec 8, 2020, its day 180 fall on Sunday, and the first session on or after am na Jun 7, 2021. Shares become sellable on the contract date. But dem fit only change hands when market open next.

180 days na convention, no be rule

The 180-day term na market standard, but na habit e be, no be requirement. Variants wey you fit see for filings include:

  • 90 days, wey dey more common for smaller deals.
  • 365 days, sometimes applied to founders or control holders for the same deal wey give everybody else 180.
  • Staged releases, where part go free on one date and the balance on another date. Prospectus go state each tranche as share count and date.
  • Split terms by group. Officers and directors, pre-IPO funds, and employees fit each sign different agreements for one deal. If so, no single lockup expiration date dey for everybody.

Share count matter as much as the date. Compare the restricted block with stock float to see how much tradeable supply the schedule add on paper.

Wetin fit move the date after dem print am

  • A waiver. Named underwriters fit release holders early in writing, and dem often do am together with a marketed secondary offering. Nothing for the original filing change.
  • Early release conditions. Many recent agreements free a tranche once the stock trade at or above a stated premium to the IPO price for a stated number of days inside a window, and only after the first or second quarterly earnings release.
  • Earnings window openings. Agreements commonly open the release window a set number of trading days after an earnings report. This one tie the effective date to earnings calendar instead of anniversary count.
  • A new registration. Resale registration statement, or a takedown off a shelf, fit put a block into the market on its own schedule.

Each one dey inside a filing or company announcement. If no filing support a date wey calendar site publish, na guess be that.

Wetin tape dey do around day 180

Volume na the part wey you fit observe. Here na one listing traced week by week through its first year: Reddit, wey price on March 20, 2024:

QueryWeekly average daily volume: Reddit first year of trading, March 2024 to March 2025
The exact SQL behind every number
WITH daily AS (
    SELECT toDate(toTimeZone(window_start, 'America/New_York')) AS session_date,
           toFloat64(sum(volume)) AS shares
    FROM global_markets.delayed_stocks_minute_aggs
    WHERE ticker = 'RDDT'
      AND window_start >= toDateTime('2024-03-21 00:00:00')
      AND window_start < toDateTime('2025-03-21 00:00:00')
    GROUP BY session_date
)
SELECT toMonday(session_date) AS week,
       round(avg(shares) / 1e6, 2) AS avg_daily_volume_m
FROM daily
GROUP BY week
ORDER BY week
Run this yourself

The chart cover 53 weeks. The first one average 32.21 million shares per session. The last one average 12.16 million. When you group the same sessions by distance from pricing date, you fit put numbers on the windows wey matter to lockup reader:

QueryReddit share volume by window, wey dem count in days from March 20, 2024 pricing date
The exact SQL behind every number
WITH daily AS (
    SELECT toDate(toTimeZone(window_start, 'America/New_York')) AS session_date,
           toFloat64(sum(volume)) AS shares
    FROM global_markets.delayed_stocks_minute_aggs
    WHERE ticker = 'RDDT'
      AND window_start >= toDateTime('2024-03-21 00:00:00')
      AND window_start < toDateTime('2025-03-21 00:00:00')
    GROUP BY session_date
)
SELECT multiIf(dateDiff('day', toDate('2024-03-20'), session_date) <= 30, 'Days 1-30',
               dateDiff('day', toDate('2024-03-20'), session_date) <= 90, 'Days 31-90',
               dateDiff('day', toDate('2024-03-20'), session_date) <= 170, 'Days 91-170',
               dateDiff('day', toDate('2024-03-20'), session_date) <= 200, 'Days 171-200',
               'Days 201-365') AS window_label,
       round(avg(shares) / 1e6, 2) AS avg_daily_volume_m,
       round(max(shares) / 1e6, 2) AS busiest_session_m
FROM daily
GROUP BY window_label
ORDER BY min(dateDiff('day', toDate('2024-03-20'), session_date))
Run this yourself

Days 1 to 30 average 10.17 million shares per session. Days 91 to 170, the stretch wey enter the 180-day mark, average 3.39 million. Days 171 to 200, the four weeks around am, average 3.92 million, with busiest session at 7.2 million shares.

Read am as one company record, no be rule. Now take 180-day convention as assumption and apply am to all nine listings:

QueryVolume for the four weeks around day 180 vs the weeks before am: nine US listings
The exact SQL behind every number
WITH ipos AS (
    SELECT tupleElement(pair, 1) AS ticker,
           toDate(tupleElement(pair, 2)) AS pricing_date
    FROM (
        SELECT arrayJoin([('LYFT', '2019-03-28'), ('UBER', '2019-05-09'),
                          ('DASH', '2020-12-08'), ('ABNB', '2020-12-09'),
                          ('HOOD', '2021-07-28'), ('RIVN', '2021-11-09'),
                          ('CAVA', '2023-06-14'), ('BIRK', '2023-10-10'),
                          ('RDDT', '2024-03-20')]) AS pair
    )
),
daily AS (
    SELECT ticker,
           toDate(toTimeZone(window_start, 'America/New_York')) AS session_date,
           toFloat64(sum(volume)) AS shares
    FROM global_markets.delayed_stocks_minute_aggs
    WHERE ticker IN ('LYFT', 'UBER', 'DASH', 'ABNB', 'HOOD', 'RIVN', 'CAVA', 'BIRK', 'RDDT')
      AND window_start >= toDateTime('2019-07-01 00:00:00')
      AND window_start < toDateTime('2024-11-01 00:00:00')
    GROUP BY ticker, session_date
)
SELECT d.ticker AS ticker,
       round(avgIf(d.shares, dateDiff('day', i.pricing_date, d.session_date) BETWEEN 120 AND 170) / 1e6, 2) AS baseline_volume_m,
       round(avgIf(d.shares, dateDiff('day', i.pricing_date, d.session_date) BETWEEN 171 AND 200) / 1e6, 2) AS window_volume_m,
       round(avgIf(d.shares, dateDiff('day', i.pricing_date, d.session_date) BETWEEN 171 AND 200)
             / avgIf(d.shares, dateDiff('day', i.pricing_date, d.session_date) BETWEEN 120 AND 170), 2) AS volume_ratio
FROM daily AS d
INNER JOIN ipos AS i ON d.ticker = i.ticker
GROUP BY d.ticker
HAVING countIf(dateDiff('day', i.pricing_date, d.session_date) BETWEEN 120 AND 170) >= 20
   AND countIf(dateDiff('day', i.pricing_date, d.session_date) BETWEEN 171 AND 200) >= 10
ORDER BY volume_ratio DESC
Run this yourself

The ratio divide average daily volume for days 171 to 200 by the same figure for days 120 to 170. Reading near 1 mean say weeks around day 180 look like the weeks before dem. UBER come highest at 4.53x, on baseline of 8.47 million shares per session. LYFT come lowest at 0.93x. Across 9 deals, the same assumption produce wide range of outcomes. Na why you suppose read the filing instead of relying on convention.

Announcements of registered offerings dey come after close, and the first print wey anybody see na next morning open. Overnight gaps explain that mechanic.

Secondary offerings and Form 144 around the date

Two filing types dey show near a release.

  • A registered offering. Prospectus supplement filed under Rule 424(b)(5), or fresh S-1 wey register resale of existing shares, mean holders dey sell through underwriters instead of selling one by one on exchange. The document name the selling holders and their share counts.
  • Form 144. Affiliate wey plan to sell restricted or control stock must file notice once the sale pass 5,000 shares or $50,000 within any three-month period. Since 2023, dem dey file these notices electronically on EDGAR, so you fit search dem beside everything else. Rule 144 also cap affiliate quarterly volume at the greater of 1% of shares outstanding or average weekly reported volume for the four weeks before the notice.

Form 4 filings record wetin insiders actually sell. If you read dem together, Form 144 na the intention and Form 4 na the receipt.

The 2026 class dey use the same paperwork

Pull the 424B4 for the name wey you care about, read the two sections, count from prospectus date, then check whether agreement get early release condition. The 2026 IPO market cover first-half deal flow, while SpaceX listing first month trace wetin tape do for the weeks after that debut.

One warning about published tables of upcoming dates. Most of dem dey add 180 days to listing date, repeating both errors above: the one-day offset and the assumption say convention apply to every holder. Date only get value when filing support am. Na why this page no get forecast table.

Lockup expiration date FAQ

Where lockup expiration date dey inside S-1?

For two sections. “Shares Eligible for Future Sale” carry schedule of how many shares go free and when. “Lock-Up Agreements” text inside “Underwriting” carry contract terms and name underwriters wey fit waive dem. Final 424B4 prospectus repeat both with numbers from the priced deal.

Lockup start on IPO date or pricing date?

Pricing date. Filings phrase am as a number of days after “the date of this prospectus”. Na the day deal price, one session before trading open. If you count am that way, day 180 cover 122 market opens for DASH, whose day 180 land on Jun 6, 2021.

Every IPO lockup na 180 days?

No. 180-day term na convention. Terms of 90 and 365 days both dey appear. Staged releases fit free part of holding earlier, and different holder groups for one deal fit sign different agreements.

Lockup fit end before the date for prospectus?

Yes. Underwriters fit waive am in writing, and many agreements include early release conditions measured against share price over a window of trading days. E often depend on the period after an earnings release. Confirm any early release inside filing or company announcement.

How you go know whether insiders sell after lockup expire?

Form 144 notices record affiliate intention to sell, while Form 4 filings record completed insider transactions. Registered secondary go appear as 424(b)(5) supplement or resale S-1, and e go name the selling holders.


Every figure above come from stored query over session data, with SQL under each panel. Change the tickers, move the day windows, and run the same count on the Strasmore terminal.