Insights
Withdrawn S-1 Registration Data for Event Studies
Alphanume Team · July 25, 2026
Treat an S-1 withdrawal as a later lifecycle event, measure it from dated filing and withdrawal fields, and never use eventual withdrawal status as information available on the original filing date.
Alphanume's Stock Dilution dataset records initial S-1 filings and updates a row when the registration becomes effective or is withdrawn. A withdrawn cohort can answer how long registrations remained open and how stocks behaved around the withdrawal disclosure, while preserving the original filing as a separate event.
Withdrawal removes that registration path from the active lifecycle. It does not prove the issuer abandoned every financing plan, that no securities were issued under another route, or that the stock should rise. The event changes the available-supply thesis and needs source review before an economic interpretation is assigned.
Put both clocks in the study
Clock | Fields | Question |
|---|---|---|
Initial registration | filing_timestamp, accession_number | How did the market react to possible supply |
Effectiveness | became_effective, effective_date | When did the registration become usable |
Withdrawal | offering_withdrawn, withdrawal_date | How did the market react when this path ended |
Retrieval | last_updated and saved response time | When did the research system observe the lifecycle status |
A current API response can show the final withdrawal status on a row whose filing date is months earlier. That is appropriate for retrospective lifecycle analysis. A filing-date backtest must use an archived first-observed response or mask every field learned after the filing timestamp.
Retrieve then filter locally
The endpoint is GET /v1/dilution. It accepts ticker and filing-date filters, while withdrawal status is a returned field rather than a request filter. Pull the full filing cohort for a fixed range, save it, and create the withdrawn subset in code.
import os
import requests
import pandas as pd
response = requests.get(
"https://api.alphanume.com/v1/dilution",
headers={"X-API-Key": os.environ["ALPHANUME_API_KEY"]},
params={"date_gte": "2025-01-01", "date_lte": "2025-12-31"},
timeout=30,
)
response.raise_for_status()
cohort = pd.DataFrame(response.json()["data"])
withdrawn = cohort.loc[
cohort["offering_withdrawn"].eq(1)
& cohort["withdrawal_date"].notna()
].copy()Keep the full cohort count next to the withdrawn count. Filtering to completed withdrawals alone cannot estimate the probability of withdrawal because effective and still-pending rows form the comparison and censoring structure.
Recompute lifecycle duration
Use filing_timestamp and withdrawal_date as the primary source fields. Treat days_to_withdrawal as a convenience value that requires validation, especially for statuses filled after initial ingestion. Recompute the elapsed calendar duration and compare it with the served field rather than assuming parity.
withdrawn["filing_timestamp"] = pd.to_datetime(
withdrawn["filing_timestamp"], utc=True
)
withdrawn["withdrawal_date"] = pd.to_datetime(
withdrawn["withdrawal_date"], utc=True
)
withdrawn["elapsed_calendar_days"] = (
withdrawn["withdrawal_date"].dt.normalize()
- withdrawn["filing_timestamp"].dt.normalize()
).dt.days
assert withdrawn["elapsed_calendar_days"].ge(0).all()Calendar duration and trading-session duration answer different questions. Use calendar days for the regulatory lifecycle, then map the public withdrawal date to a trading calendar for returns. The served filing_url points to the original S-1, so retrieve the RW accession and URL separately through the SEC file-number trail before publishing individual examples.
Compare the right lifecycle groups
Group | Definition at analysis cutoff | Interpretation |
|---|---|---|
Withdrawn | Withdrawal observed by cutoff | Registration path ended |
Effective | Effectiveness observed before withdrawal | Registration reached effectiveness |
Pending | Neither outcome observed by cutoff | Right-censored lifecycle |
Other financing evidence | Separate source-linked event | Possible supply outside this S-1 path |
Do not drop pending rows when comparing durations. They are registrations that survived at least until the cutoff. A survival framework can include that information without pretending the eventual outcome is already known. Also keep primary dilutive and resale registrations separate because withdrawal changes different supply mechanisms.
Define the market event cautiously
For a withdrawal-reaction study, the event time is when the withdrawal became public, not the earlier S-1 date. The endpoint serves withdrawal_date without an acceptance time, so a date-only study should use the first eligible session strictly after that date. An intraday rule requires a separately sourced RW acceptance timestamp, accession, and URL. Define signed and absolute returns in advance. A positive reaction can coincide with withdrawal for many reasons and does not prove the supply change caused it.
The endpoint does not provide price data, transaction costs, concurrent news, amendment history, or completed issuance. Join those sources separately and report overlapping earnings, financing, merger, or regulatory events inside the window.
Control the failure modes
- Future leakage. Eventual withdrawal was unknown on the initial filing date.
- Competing outcomes. Effective and pending registrations belong in the denominator.
- Duration field. Validate convenience day counts against the underlying dates.
- Alternative financing. One withdrawn S-1 does not close every path to raising capital.
- Causal claims. Price behavior around withdrawal can reflect concurrent information.
Free access provides the trailing 20 trading sessions after a one-trading-session delay. Lifecycle comparisons require longer history and snapshots that preserve when status changes were observed.
Build one withdrawal audit
Follow the Stock Dilution guide, pull one filing-year cohort, and export withdrawn, effective, and pending groups at a fixed analysis cutoff. Recompute withdrawal duration, list any disagreement with the convenience field, and verify every selected source filing.
Then run separate event windows around initial registration and public withdrawal, keeping all missing and overlapping outcomes visible. Compare primary and resale rows without claiming that withdrawal guarantees a favorable supply or return outcome. That workflow measures how the thesis changed while respecting what was known at each clock.