Skip to main content
David Robinson rises for a dunk during an NBA game

Every possession has a story

Statistical Architecture

Data Methodology

How COURTSIDE ingests, normalizes, validates, and calculates metrics across multiple basketball leagues.

1. Provider-Agnostic Ingestion & Normalization

All external statistics enter through a server-only normalization engine (/lib/data/*). External API structures are validated using strict Zod schemas and transformed into canonical COURTSIDE types before reaching client UI components.

2. Advanced Metrics & Possession Modeling

Possessions: Calculated using the Oliver Dean possession estimation model:Possessions = 0.5 * ((Tm_FGA + 0.4 * Tm_FTA - 1.07 * (Tm_ORB / (Tm_ORB + Opp_DRB)) * (Tm_FGA - Tm_FG) + Tm_TOV) + (Opp_FGA + 0.4 * Opp_FTA - 1.07 * (Opp_ORB / (Opp_ORB + Tm_DRB)) * (Opp_FGA - Opp_FG) + Opp_TOV))

Pace Factor: Possessions per 48 minutes adjusted for overtime periods.

True Shooting % (TS%): Measures shooting efficiency factoring field goals, 3-point field goals, and free throws.

3. Verification Status Labels

Verified

Cross-checked against official league logs and certified box scores.

Estimated

Derived using statistical modeling (e.g. historical pace normalization).

Unavailable

Data not recorded or tracked during the era/competition.