Alphanume

Insights

Using Share-Count Changes to Audit Dilution Data

Alphanume Team · August 9, 2026

Use dated shares outstanding to audit whether a registered dilution event is followed by a measurable share-count change, while treating the change as corroboration rather than proof that one filing caused it.

Alphanume's Dilution dataset records S-1 registration statements as filing events. Its dilutive flag identifies filings that register new shares, resale separates existing-holder resale, and lifecycle fields show later effectiveness or withdrawal. Historical Market Cap supplies shares_outstanding and market_cap as they stood on each covered trading date.

The audit joins those two contracts without collapsing them. Registration means shares were authorized for sale through that filing path. It does not mean the full registered amount was issued immediately, or ever. A later increase in shares outstanding can support the timing of completed issuance, though conversions, employee compensation, acquisitions, other offerings, and source revisions can also move the count.

Separate registration from issuance

Observation

What it supports

What it cannot prove alone

dilutive = 1

The filing was classified as registering new supply

That shares reached the market

shares_offered

Shares registered in the filing

Final issued shares or proceeds

became_effective = 1

The registration was declared effective

That every registered share was sold

offering_withdrawn = 1

The filing was withdrawn

That no other financing occurred

shares_outstanding increase

More company-level shares appear in the dated series

Which transaction caused the change

This is why shares outstanding works well as an audit field. It can flag registrations whose later share path deserves review, including an apparently large offering followed by no observed count change and a small registration followed by a much larger jump. Both are questions for the filing history, not automatic data errors.

The dilution short failure-mode review explains why filing labels and completed supply should remain separate.

Build a dated filing table

Start with every S-1 row in the research window and keep its filing date, exact Eastern Time filing timestamp, ticker as of filing, dilutive and resale labels, registered shares, pre-filing market cap, effectiveness fields, withdrawal fields, accession number, and filing URL. Save this event file before querying share history.

filing_fields = [
    "date", "filing_timestamp", "ticker", "dilutive", "resale",
    "shares_offered", "market_cap_at_filing", "became_effective",
    "effective_date", "offering_withdrawn", "withdrawal_date",
    "accession_number", "filing_url", "last_updated",
]

# One audit row per filing. Keep lifecycle fields as observed in each snapshot.
filings = dilution_rows[filing_fields].copy()
filings["filing_date"] = pd.to_datetime(filings["date"])
filings.to_parquet("dilution_filings_raw.parquet", index=False)

Lifecycle fields update when a registration becomes effective or is withdrawn. Preserve the first-observed filing row and later revisions separately, or the final outcome will leak backward into the original event decision. last_updated is useful for tracking that evolution.

Measure the share-count path

For each filing ticker, query Historical Market Cap across a window that begins before the filing and continues after the relevant effectiveness or withdrawal milestone. Ticker-scoped ranges can span the required audit window. Market-wide ranges without a ticker are capped at seven calendar days, so per-event ticker pulls are the practical shape here.

import os
import requests

def get_share_history(ticker, start, end):
    response = requests.get(
        "https://api.alphanume.com/v1/historical-market-cap",
        headers={"X-API-Key": os.environ["ALPHANUME_API_KEY"]},
        params={"ticker": ticker, "date_gte": start, "date_lte": end},
        timeout=30,
    )
    response.raise_for_status()
    return response.json()["data"]

# Page with cursor_date and cursor_ticker if has_more is true.
share_rows = get_share_history("AAPL", "2026-01-01", "2026-06-30")

For large single-name histories, follow next_cursor with both cursor_date and cursor_ticker. Use the last observed count before filing as the baseline, then measure the first stable post-event plateau under a written rule. One-day differences can reflect timing noise or data updates, so retain the entire path rather than only two endpoints.

Flag mismatches for source review

Audit flag

Example condition

Next review

registered_no_change

Large dilutive shares_offered and flat later count

Check effectiveness, withdrawal, pricing, and partial issuance

change_no_scale_match

Count increase far exceeds registered shares

Search other offerings, conversions, or acquisitions

resale_with_change

Resale filing coincides with a larger count

Check whether the filing also contains primary shares

pre_effective_change

Count rises before effective_date

Review timing and other corporate actions

missing_history

No baseline or post-event count

Check ticker coverage and identifier changes

Treat tolerance as a declared research parameter. Rounding, reporting cadence, and several transactions close together can prevent exact equality between shares_offered and the observed change. The audit should prioritize filing review, not auto-label causation.

Know what share counts miss
  • Shares outstanding is a company-level count and is not free float or immediately tradable supply.
  • Ticker changes and reorganizations can break a single-symbol history.
  • Market-cap data contains no standalone price field and does not repair corporate-action adjustments in another price source.
  • A filing can register shares in tranches, price below expectations, remain pending, or be superseded.
  • A share increase near the event establishes timing overlap and does not establish that the filing caused the full change.
Audit one filing month

Pull one month of dilution filings and save the first-observed event rows. For each ticker, retrieve a pre-filing and post-lifecycle share-count window, calculate the percentage change from the last pre-filing observation, and assign the mismatch flags above. Export every missing history and ambiguous cause for manual filing review.

Inspect the point-in-time fields on the Historical Market Cap dataset page, then follow the Historical Market Cap guide for coverage and pagination details. The output is a filing audit queue, not a causal label.