Alphanume
Corporate EventsPro

Lockup Expirations

See when restricted shares become eligible to join the market, and how large the locked block is relative to the shares sold in the offering. Track historical and upcoming IPO and follow-on lockups, with a separate row for each release tranche and the prospectus terms behind it.

GET /v1/capital/lockup-expirationsUpdated daily from SEC final prospectuses
  • Watch the next release.

    date marks expiration; shares_sellable_from identifies the first NYSE session on or after it.

  • Size the block against the float.

    locked_to_float_ratio compares the total locked block with offering float; tranche_pct sizes each staged release.

  • Check what could move the date.

    early_release_type and early_release_terms surface earnings, price, and staged-release conditions.

Ask your agent
Prompt · MCP or REST

Which companies have large share lockups expiring soon? Rank them by the size of the release relative to their offering float, and explain any conditions that could let holders sell earlier.

Your agent uses get_lockup_expirations to check upcoming dates, locked blocks, tranche percentages, and early-release terms.

What this dataset is

The release schedule behind restricted shares.

A lockup is an agreement that restricts when existing holders can sell their shares after an offering. The dataset covers operating-company IPOs and follow-on offerings by already-public issuers. A tranche is one part of a release schedule: a single expiration produces one row, while a staged release produces several rows for the same prospectus.

Each row includes:

  • Issuer identity, offering type, and the prospectus accession number.
  • The expiration date and first NYSE session on or after it.
  • The total locked block, offering float, and tranche percentage.
  • Early-release conditions and their original wording.
  • Quality, publication, and update timestamps for research and monitoring.

A lockup expiration makes shares eligible for sale. It does not establish that holders will sell, how much they will sell, or which way the stock will move.

What you can do with it

Put a date and a size on potential share supply.

Use the calendar to build an event watchlist before a release reaches the market. A large locked block relative to the offering float identifies a different supply setup from a small release, even when the two companies have similar market values.

For staged schedules, locked_shares and locked_to_float_ratio describe the whole offering's locked block. Multiply by tranche_pct divided by 100 to estimate the portion assigned to one tranche when that percentage is known. Adding the full block across rows would count the same shares repeatedly.

  • Monitor upcoming releases and inspect the conditions behind the dates
  • Compare release size with offering float across IPO and follow-on cohorts
  • Anchor event studies to expiration or the first sellable session, with availability checks
Where the data comes from

Read from the prospectus, followed as the date approaches.

Terms come from SEC final prospectuses, Forms 424B4 and 424B1, with prospectus history from 2021. Alphanume structures the release schedule and share counts, then refreshes the calendar daily. Blank-check SPAC IPOs, de-SPAC sponsor lockups, resale-only prospectuses, and non-equity offerings are outside this release.

Expiration is calculated from the contractual anchor and the lockup's calendar-day length. The anchor is usually the prospectus date; closing- or first-trading-based language uses a different anchor. The trading-session calendar rolls expiration forward when necessary. IPO first-trade dates come from Polygon, and market-cap context comes from Alphanume's history.

Fields that matter

Separate the total locked block from this release.

The headline fields below are a subset. Every field, with exact types and semantics, is documented in the API reference.

FieldTypeWhat it tells you
lockup_typestringipo or follow_on. Operating-company IPOs and offerings by already-reporting issuers, respectively.
locked_sharesinteger | nullTotal locked block for the offering, not this tranche alone. Prospectus-stated count, otherwise outstanding shares minus offered shares.
float_shares_at_offeringinteger | nullOffering shares plus over-allotment when its exercise is stated. An offering-float measure, not today's free float.
locked_to_float_rationumber | nullTotal locked block divided by offering float. 3 means 3 times the float; apply tranche_pct to size an individual release. Null for missing inputs or ratios above 200.
tranche_pctnumber | nullPercentage of the total locked block assigned to this tranche. 100 for a single release; null when the staged percentage is unavailable.
datestringExpiration date: contractual anchor plus lockup_days. Can be future-dated; date filters use this field.
shares_sellable_fromstringFirst NYSE session on or after expiration, rolling weekends and holidays forward. Does not confirm actual selling.
early_release_typestringnone, earnings, price, staggered, mixed, or other. For non-none values, treat date as the contractual outside date; earlier conditional dates are not computed.
early_release_termsstring | nullVerbatim early-release or staged-release clause. Null for a plain fixed-period lockup.
first_seen_atstringFirst observation of the prospectus. Pre-launch backfilled rows use a synthetic filing timestamp, not observed live availability.
published_atstringWhen the row was first published into the served table.
Query it in one call

Query upcoming lockups. Inspect an illustrative response.

One key works across the REST API, the hosted MCP server, and this dashboard. Every response is JSON with a { count, data } envelope.

Python
import requests

url = "https://api.alphanume.com/v1/capital/lockup-expirations"
params = {
    "upcoming": "true",
    "min_locked_to_float": 2,
    "api_key": "alp_abc123"
}

r = requests.get(url, params=params)
r.raise_for_status()
print(r.json())
cURL
curl "https://api.alphanume.com/v1/capital/lockup-expirations?upcoming=true&min_locked_to_float=2&api_key=alp_abc123"
Example response
{
  "count": 1,
  "has_more": false,
  "next_cursor": null,
  "data": [
    {
      "record_id": 1001,
      "ticker": "EXAMPLE",
      "cik": 1234567,
      "company_name": "Example Industries (illustrative)",
      "exchange": "Nasdaq Global Market",
      "accession_no": "0001234567-26-000001",
      "lockup_type": "ipo",
      "offering_date": "2026-04-23",
      "first_trade_date": "2026-04-24",
      "shares_offered": 10000000,
      "shares_outstanding_post_offering": 40000000,
      "locked_shares": 30000000,
      "locked_pct_of_outstanding": 75,
      "float_shares_at_offering": 10000000,
      "locked_to_float_ratio": 3,
      "tranche_seq": 1,
      "tranche_count": 1,
      "tranche_pct": 100,
      "lockup_days": 180,
      "date": "2026-10-20",
      "expiration_date": "2026-10-20",
      "shares_sellable_from": "2026-10-20",
      "early_release_type": "none",
      "early_release_terms": null,
      "status": "upcoming",
      "market_cap_at_offering": null,
      "confidence": 0.9,
      "first_seen_at": "2026-04-24 07:00:00",
      "published_at": "2026-09-12 07:25:00",
      "last_updated": "2026-09-12 07:25:00"
    }
  ]
}
Honest limitations

What this data does not claim.

  • Conditional early releases can precede the displayed expiration. For non-none early_release_type values, treat date as the contractual outside date and read the terms; earlier conditional dates are not calculated.
  • Offering float is not today's free float. Unconfirmed over-allotment exercise can leave it understated. Share counts can be missing; ratios above 200 are withheld as a unit-sanity check.
  • New IPO tickers and first-trade dates can arrive later. Market-cap history starts in 2024 and can lag fresh listings. Missing context does not mean zero.
  • Pre-launch first_seen_at values are synthetic filing timestamps. Historical rows can change with later enrichment, so expiration-date filters alone do not reconstruct what was available at a past decision time.
  • The response shown here uses a fictional company and illustrative values. It is a schema example, not a live record.
Common questions

Asked by researchers, answered plainly.

Can I query only IPO lockup expirations?

Yes. Set lockup_type=ipo for operating-company initial offerings or follow_on for offerings by already-reporting issuers. Leave it unset to include both.

How do I open the prospectus behind a lockup?

Use cik and accession_no to locate the filing in SEC EDGAR. All tranches from that prospectus share the accession, so you can inspect the release schedule together.

Why can an offering be absent from the calendar?

An offering with no identified lockup language produces no row. Re-filed prospectuses can also appear under separate accessions, so check the offering identity when building cohorts.

Can I use this calendar through an AI agent?

Yes. The hosted MCP server exposes get_lockup_expirations with the same date, offering-type, and release filters. Full history and the forward calendar require Pro access; there is no public row preview.

Start querying

Available with Pro. Enterprise for teams.

New REST API and MCP access requires Pro or Enterprise. Public dashboard previews are separate from a subscription. Pro includes the available historical record, current updates, REST, MCP, dashboard exports, and every standard dataset as it launches. This dataset has no public row preview; the dashboard provides a field guide and illustrative response.