How we label data
Every value on this site carries provenance: where it came from, which parser or model produced it, how confident we are, and whether a human verified it. The promise is simple — official data for what happened; documented models for how, why, and how difficult it was — and the two are never mixed silently.
The labels
Directly from a documented first-party publisher source (API, official page, official download). Schedules, results, rosters, basic box scores.
Extracted from an authorized replay/demo artifact by a deterministic, versioned parser. One parse produces both basic stats and telemetry.
Extracted from authorized broadcast or VOD footage via the vision pipeline. Carries per-field confidence; low-confidence values go to human review.
From an authorized upload or administrator import. The submitter attests to their rights over the artifact.
Computed by a documented statistical model (xDuel, win probability, value-added metrics). Model key + version attach to every value; model cards are public.
A reviewer confirmed this value against the source artifact.
Some fields of the record verified; others pending.
Source authority
When two permitted sources disagree about the same field, both values are preserved, the conflict is flagged for review, and the display value follows a fixed authority order:
- Documented first-party publisher API
- Official publisher esports API / data portal
- Official publisher pages (tournament, leaderboard, match)
- Official organizer pages or exports
- Official replay/demo artifacts
- Authorized team/player/tournament/user submissions
- Authorized broadcast/VOD extraction
- Manual administrator import
- Derived statistical/ML results
What we never do
- Scrape community stat sites (HLTV, VLR, Tracker.gg, Oracle's Elixir, and similar). A community source is permitted only through an approved, terms-bound API, with its licence and attribution carried on every value shown.
- Use undocumented or reverse-engineered publisher endpoints, or circumvent rate limits, authentication, or anti-bot systems.
- Read game-client memory, inject into processes, or interfere with anti-cheat.
- Present model output or synthetic demo data as official publisher data.
- Publish a metric without its public documentation page and model card.
The two data layers
Every record belongs to exactly one layer, and the split is structural rather than a label applied at render time.
Reference — Real entities and results from a documented source.
Currently empty.
Preview Lab — Fictional record used to demonstrate analysis. Not a real player, team, or match.
Currently empty.
The reference layer is currently empty. Without production credentials there is no real data to serve, so everything the site displays today is Preview Lab data. We would rather show an empty layer than fill it.
Where the distinction is enforced:
- Data — every record carries
is_synthetic, and an automated integrity check fails the build if a preview observation is ever attached to a reference player, team, match, or event. - API — every response that exposes a record also exposes its resolved
datasetLayer, and directory endpoints accept?layer=reference. - Search engines — preview entity pages and preview-only directories are served
noindex, and the sitemap emits neither. - Exports — every CSV and JSON download carries the layer per row, in its metadata envelope, and in its filename.
Nothing in the preview layer references real esports history, and the corpus is removable with one command.
Machine-readable access
Numbers should stay interpretable away from the site. Every export and metadata surface below is plain JSON over GET/POST — no key required at demo scale:
POST /api/v1/leaderboards/export?format=json— any leaderboard view as rows plus a metadata envelope: the exact query, stat window, column definitions, model versions, caveats, and the dataset layer of every row. The CSV variant (?format=csv) leads with adataset_layercolumn.GET /api/v1/dataset-layers— how many players, teams, events, and matches each layer actually holds. This is the check behind the statement above.GET /api/v1/metricsandGET /api/v1/metrics/:key— the full metric registry: definitions, formulas, inputs, minimum samples, and model-version history.GET /api/v1/models— model cards (training basis, limitations, versions) for every model-derived number on the site.GET /api/v1/sourcesandGET /api/v1/coverage— the source registry (authority level, legal status, health) and per-game coverage counts.
Exports are capped at 200 rows and rate-limited. Advanced values embed value / percentile / sampleN / belowMinSample per cell so downstream analysis inherits the same sample gating the site applies.