Alphanume

Insights

Point-in-Time Sector Classification for Quant Research

Alphanume Team · August 10, 2026

Point-in-time sector classification requires a dated copy of the taxonomy used at each decision date. Alphanume's Ticker Classification endpoint supplies a stable current research taxonomy, so a live pipeline should snapshot it before applying it to historical cohorts.

That distinction is the direct answer. GET /v1/ticker-classification returns the current mapping of each covered ticker to alphanume_sector and alphanume_industry. The endpoint has no date parameter and no historical classification field. Running it today and attaching the result to a 2021 backtest creates a current-state label, even when every event row in the test is point-in-time.

The taxonomy is Alphanume's research classification, built for stable lowercase keys and quantitative grouping. It does not reproduce GICS, SIC, or another licensed standard. That makes it useful for internal controls and peer groups, while benchmark reconciliation requires the benchmark provider's own classification.

Know what the endpoint returns

Field

Meaning

Timing rule

ticker

Equity symbol in the current mapping

Treat as a current identifier

alphanume_sector

One of 11 broad research groups

Record with the retrieval date

alphanume_industry

One of 25 narrower research groups

Record with the retrieval date

count

Rows matching the request

Use to audit snapshot completeness

The stored values are deterministic and are not inferred at query time. Filters accept ticker, sector, and industry, and results are ordered by ticker. Invalid sector or industry values return a 400 response, which is useful because a misspelled group fails loudly instead of producing an apparently valid empty cohort.

The Ticker Classification dataset page lists the current groups. The earlier sector and industry classification guide shows the basic mapping workflow. Point-in-time use adds a snapshot table and an explicit as-of rule.

Create the date dimension yourself

A production research job can fetch the complete mapping at a fixed cadence, stamp every row with retrieved_at, and preserve prior snapshots. Monthly snapshots are often enough for sector controls because classification changes are infrequent. Event-driven snapshots are better if classification revisions matter immediately.

import os
import requests
from datetime import datetime, timezone

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()
retrieved_at = datetime.now(timezone.utc).isoformat()

snapshot = [
    {**row, "retrieved_at": retrieved_at, "taxonomy": "alphanume"}
    for row in payload["data"]
]

assert len(snapshot) == payload["count"]

Save the raw response alongside the normalized snapshot. The raw copy shows what the API returned, while the added fields document when the research pipeline observed it and which taxonomy it represents. Never overwrite the earlier file when a later mapping arrives.

Match dilution events inside sectors

Suppose the question is whether dilutive S-1 filings behave differently from non-dilutive filings after controlling for sector. Pull the event rows first, retain the filing date and ticker, then perform an as-of join to the most recent classification snapshot available before each filing. This gives every event the label the research system actually held at the time.

Event-side field

Classification-side field

Join rule

date

retrieved_at

Choose the latest snapshot no later than the event decision time

ticker

ticker

Exact symbol match within that snapshot

dilutive and resale

alphanume_sector

Form event and sector-relative control cells

market_cap_at_filing

alphanume_industry

Match size inside a narrower peer group when coverage permits

A sensible control rule matches each dilutive filing to a non-dilutive filing from the same sector, nearby filing date, and similar pre-filing market cap. Keep every unmatched event in an audit table. Quietly dropping sectors with thin control pools turns a sector adjustment into sample selection.

The stable label has limits
  • No historical endpoint. A backtest that begins before your first saved snapshot cannot recover the old label from this dataset.
  • Current ticker mapping. Reused symbols, mergers, and business changes need a dated security master beyond the three returned fields.
  • One dominant group. A diversified company receives one sector and one industry, so mixed business exposure is compressed.
  • Taxonomy mismatch. Results will not reconcile row for row with a licensed benchmark classification.
  • Missing coverage. An unmatched ticker is unclassified in the snapshot, not evidence that the company had no sector.

Sector matching also cannot repair an event timestamp, price series, or survivorship-biased starting universe. It controls one dimension of the comparison. Keep the event, size, identifier, and outcome audits separate.

Start the snapshot history now

Run the full classification request, save the raw JSON, and write a snapshot with UTC retrieval time and row count. Then join one month of dilution events with an as-of rule and export matched, unmatched, and duplicate-symbol records separately. Repeat the classification pull on a declared cadence so later studies have a genuine historical label trail.

The Ticker and Industry Classification guide provides the field context. The reproducible point-in-time layer begins with the first snapshot you preserve, not with a current mapping applied backward.