Alphanume

Insights

S-1 Filing Lifecycle Data for Dilution Research

Alphanume Team · August 4, 2026

Treat an S-1 as the start of a registration lifecycle, freeze what was known at filing, and record effectiveness or withdrawal only when those later events occur.

Alphanume's Stock Dilution dataset serves dated S-1 registration records with filing identity, issuer size, shares offered, primary-versus-resale labels, and later effectiveness or withdrawal status. That structure lets a researcher separate the possible supply disclosed on day one from outcomes learned afterward.

A registration statement does not establish that shares were sold, that the registration became effective immediately, or that price must fall. The lifecycle is useful precisely because several paths remain possible. Some registrations become effective, some are withdrawn, and completed issuance requires separate evidence beyond the initial row.

Put each fact on its own clock

Stage

Served fields

Point-in-time treatment

Initial registration

date, filing_timestamp, accession_number, root_file_number

Known when the S-1 was filed

Filing classification

dilutive, resale, shares_offered

Label on the registration, not realized issuance

Issuer context

market_cap_at_filing

Measured one trading day before filing

Effectiveness

became_effective, effective_date, days_to_effective

Later lifecycle update

Withdrawal

offering_withdrawn, withdrawal_date, days_to_withdrawal

Later lifecycle update

The first three groups can define an event-time cohort. Effectiveness and withdrawal can define separate follow-up studies, but their eventual values cannot be read backward into the original filing screen. Archive the response observed at entry if a production simulation needs to reconstruct exactly what the strategy knew.

Retrieve the initial cohort

The endpoint is GET /v1/dilution. Use a fixed filing-date range, preserve the exact timestamp, and deduplicate with the accession number in the research layer. The API orders rows by filing timestamp descending.

import os
import requests

response = requests.get(
    "https://api.alphanume.com/v1/dilution",
    headers={"X-API-Key": os.environ["ALPHANUME_API_KEY"]},
    params={"date_gte": "2026-04-01", "date_lte": "2026-06-30"},
    timeout=30,
)
response.raise_for_status()
rows = response.json()["data"]

required = {"filing_timestamp", "accession_number", "filing_url"}
assert all(required.issubset(row) for row in rows)

Save the raw JSON before filtering. market_cap_at_filing gives a point-in-time size field, while shares_offered describes registered shares. A ratio between offered and outstanding shares needs an as-of-compatible outstanding-share denominator, and even then it measures proposed capacity rather than shares confirmed sold.

Handle amendments honestly

The served endpoint centers on initial S-1 records and later EFFECT or withdrawal resolution. It does not expose each S-1/A amendment as a separate served row. The root_file_number identifies the registration file and helps follow its SEC trail, but it does not turn the API response into a complete amendment history.

A study that needs changed share counts, prospectus terms, or amendment timing should collect those amendment documents from the source filing chain and version them separately. Keep the Alphanume row as the initial event anchor. Otherwise, a final amended number can leak into the earlier observation and make the original filing look more precise than it was.

Model the lifecycle as states

Research state

Rule

What remains unknown

Filed and unresolved

effective and withdrawn flags are both 0

Future regulatory path and issuance

Effective

became_effective equals 1 with an effective date

Whether, when, and how much was sold

Withdrawn

offering_withdrawn equals 1 with a withdrawal date

Reason and any separate financing path

Source review

lifecycle fields conflict or required evidence is missing

Manual resolution needed

Run state transitions from archived snapshots or last_updated values. For a time-to-event analysis, include unresolved registrations as censored observations instead of dropping them. Removing unresolved rows selects for lifecycles that happened to finish within the sample and can make the observed resolution rate look too high.

Also retain records that remain pending past the study cutoff. Their elapsed time is known through the cutoff even though the resolution is not, which is useful information for survival analysis and a required denominator for any claim about how quickly registrations progress.

Control the main failure modes
  • Registration versus issuance. A dilutive label identifies the filing's mechanism, not completed dilution.
  • Lifecycle leakage. Final effectiveness and withdrawal fields were unavailable on the initial filing date.
  • Amendment gaps. Separate S-1/A documents require an additional source workflow.
  • Resale mechanics. A resale registration describes selling holders and differs from primary issuer proceeds.
  • Price claims. The endpoint supplies no return series, corporate-action adjustments, or transaction costs.

Free access provides the trailing 20 trading sessions after a one-trading-session delay. That window can validate state handling, while a lifecycle distribution needs enough history for unresolved filings and different market regimes. The Stock Dilution guide provides the broader event context.

Freeze one lifecycle audit

Pull one completed quarter, export every initial row, and choose five accession numbers across primary, resale, effective, withdrawn, and unresolved cases. Save each filing URL, the first observed response, a later response, and the exact field changes. If amendments matter, append the source S-1/A trail under the same root file number without replacing the initial values.

Then define one outcome study with a single event clock. Filing-reaction research begins after filing_timestamp, effectiveness research begins after effective_date, and realized issuance research waits for separate issuance evidence. The dilution field reference is the final checklist before locking those rules.