Insights
Historical Ticker Sector Data for Event Studies
Alphanume Team · July 31, 2026
Ticker Classification is a current-state sector and industry map with no date field. Historical event studies require your own saved, versioned snapshots before labels can be joined as of an event date.
Alphanume's Ticker Classification dataset returns one ticker, one Alphanume sector, and one Alphanume industry per row. The endpoint is useful for current screening and peer grouping. It is not a historical classification endpoint, and sending a historical date is impossible because the contract has no date parameter or date column.
That limitation determines the research design. A current response can describe how old events distribute across today's labels, which is current-state attribution. A point-in-time sector study needs snapshots that were saved over time, with retrieval timestamps and unchanged raw responses.
Understand the current contract
Field | Meaning | Timing |
|---|---|---|
ticker | Current equity symbol in the mapping | No historical identity interval |
alphanume_sector | One of 11 broad Alphanume groups | Current stored assignment |
alphanume_industry | One of 25 narrower Alphanume groups | Current stored assignment |
date | Not served | Historical lookup is unavailable |
Filters accept ticker, sector, and industry. Values are lowercase and underscore-separated, and an invalid sector or industry returns a 400 with valid choices. Rows are ordered by ticker. Missing tickers or null labels should be retained as unclassified observations rather than forced into a guessed peer group.
Name the taxonomy correctly
These labels are Alphanume's research classification derived from business activity. They do not reproduce GICS, SIC, ICB, or another licensed standard, and sector weights will not match an index provider row for row. Use the names alphanume_sector and alphanume_industry in exported research so the source remains clear.
One ticker receives one sector and one industry. A diversified company is placed in a dominant group, while the response does not provide segment weights or classification confidence. If a study must reconcile with a benchmark's official sector history, obtain that provider's historical taxonomy instead.
Research question | Suitable label source | Claim allowed |
|---|---|---|
Current sector screen | Current Alphanume endpoint | Current Alphanume grouping |
Historical point-in-time event study | Saved versioned snapshots | Label present in latest prior snapshot |
Current-state retrospective attribution | Current endpoint joined to old events | Today's label applied retrospectively |
Benchmark reconciliation | Licensed benchmark history | Provider-defined classification |
Start saving versioned snapshots
A snapshot archive should be append-only. Save the full response on a fixed cadence, compute a content hash, and record retrieval time, endpoint, account tier, row count, and code version. Do not overwrite last month's file when a label changes.
import hashlib
import json
import os
from datetime import datetime, timezone
import requests
response = requests.get(
"https://api.alphanume.com/v1/ticker-classification",
headers={"X-API-Key": os.environ["ALPHANUME_API_KEY"]},
timeout=30,
)
response.raise_for_status()
payload = response.json()
raw = json.dumps(payload, sort_keys=True, separators=(",", ":")).encode()
manifest = {
"retrieved_at": datetime.now(timezone.utc).isoformat(),
"row_count": payload["count"],
"sha256": hashlib.sha256(raw).hexdigest(),
}
assert manifest["row_count"] == len(payload["data"])Write the raw payload and manifest to immutable storage outside the code shown here. A monthly cadence gives monthly timing precision, while a daily cadence gives finer change detection. The snapshot proves what the endpoint returned when captured, not the exact moment a company's economics changed.
Join snapshots as of each event
Turn snapshots into a long table keyed by snapshot_at and ticker. For each event, choose the latest global saved snapshot whose timestamp is no later than the public event timestamp, then test whether that ticker appears in the chosen snapshot. A per-ticker backward join can carry an old label through a newer snapshot where the ticker is absent.
snapshot_calendar = (
labels[["snapshot_at"]]
.drop_duplicates()
.sort_values("snapshot_at")
)
events = events.sort_values(["event_time", "ticker"])
events = pd.merge_asof(
events,
snapshot_calendar,
left_on="event_time",
right_on="snapshot_at",
direction="backward",
tolerance=pd.Timedelta("40D"),
)
panel = events.merge(
labels,
on=["snapshot_at", "ticker"],
how="left",
validate="many_to_one",
)
panel["classification_lag_days"] = (
panel["event_time"] - panel["snapshot_at"]
).dt.total_seconds() / 86400The 40-day tolerance is only an example for a monthly archive. Choose a tolerance that matches the capture cadence and review events near a reclassification boundary. Do not use direction="nearest", because it can select a snapshot saved after the event.
Handle studies without snapshots
- Label the analysis honestly. Call it current-state sector attribution, not historical sector data.
- Run sensitivity checks. Repeat results with no sector control and with broader current groups.
- Review business pivots. Manually inspect issuers whose business changed during the sample.
- Preserve unclassified rows. Missing labels belong in the denominator.
- Avoid benchmark claims. Do not compare Alphanume groups with licensed taxonomy weights as though they were equivalent.
Backfilling today's labels across a ten-year sample can leak later business changes into early events. The problem is structural and cannot be repaired by a more careful join against the current response. Use a separate historical taxonomy or narrow the claim to current-state grouping.
Run one sector-timing audit
Read the Ticker and Industry Classification guide, save the current full response and manifest, and schedule the next snapshot. For an existing event sample, publish two tables: events grouped by current labels and events left unclassified. Mark the result as current-state attribution.
Once at least two versions exist, diff ticker additions, removals, and label changes before using them. Build validity intervals from the captured timestamps, join only backward, and retain the snapshot hash in the event-study output. That workflow turns a current reference table into an auditable snapshot history without pretending the API already supplies one.