Skip to main content
Version: 2025-03-11

Aggregate Stats

Overview

The aggregateStats GraphQL query provides aggregated statistical insights from various events. Below, you'll find a field catalog detailing available fields, followed by query examples demonstrating their usage.

Field Catalog

Each field listed here can be used in Aggregate Stats queries.

Metadata Fields

Metadata fields are available for all events.

Field NameDescriptionUsages
match.metadata[match_series_id]ID of the MatchSeriesTerm Filter
match.metadata[tournament_id]ID of the TournamentTerm Filter
match.metadata[season_id]ID of the SeasonTerm Filter
match.metadata[competition_id]ID of the CompetitionTerm Filter
match.metadata[circuit_id]ID of the CircuitTerm Filter
player.metadata[player_id]ID of the PlayerTerm Filter, Term Bucket
team.metadata[team_id]ID of the TeamTerm Filter, Term Bucket
match.metadata[match_id]ID of the MatchTerm Filter

Common Fields

These fields are accessible across all events.

Field NameDescriptionUsages
event.typeType of eventTerm Filter
event.timestampUTC timestamp of the event occurrenceRange Filter
game.map.nameIn-game map name (e.g., "de_dust2")Term Filter, Term Bucket
game.round.idUnique round identifierTerm Bucket
game.round.occurrenceEvent occurrence count within the roundTerm Filter, Range Filter
game.round.result[WIN]Count of rounds wonCount
game.round.result[LOSS]Count of rounds lostCount
team.roleSame as field "name" on GameRoleTerm Filter, Term Bucket

Event-Specific Fields

These fields apply to specific event types.

Field NameDescriptionUsagesAvailable Events
item.nameIn-game item name (e.g., "m4a1")Term Filter, Term BucketGameEventPlayerItemPurchase, GameEventPlayerItemThrow, GameEventPlayerAttack, GameEventPlayerKill
item.typesee GameItemTypeTerm Filter, Term BucketGameEventPlayerItemPurchase, GameEventPlayerItemThrow, GameEventPlayerAttack, GameEventPlayerKill
event.player_situation[CLUTCH]1vsX clutch situations countCountGameEventPlayerSituation
event.player_situation.clutch.opponents_aliveOpponents alive in 1vsX clutchTerm Filter, Term BucketGameEventPlayerSituation
event.game_resultRelates to GameEventGameResultCountGameEventGameResult
event.game_result[WIN]Total maps wonCountGameEventGameResult
event.game_result[LOSS]Total maps lostCountGameEventGameResult
event.game_scoreRelates to GameEventGameScoreCountGameEventGameScore
event.player_assistRelates to GameEventPlayerAssistCountGameEventPlayerAssist
event.player_attack.classification[REGULAR].damage.healthHealth damage dealt (excluding team damage)SumGameEventPlayerAttack
event.player_deathRelates to GameEventPlayerDeathCountGameEventPlayerDeath
event.player_kill.classificationsee GameKillClassificationTerm FilterGameEventPlayerKill
event.player_kill.classification[REGULAR]Kills against opponents (excluding team kills)CountGameEventPlayerKill
event.player_purchaseRelates to GameEventPlayerItemPurchaseCountGameEventPlayerItemPurchase

Query Examples

Clutch 1vsX Wins/Totals

{
aggregateStats {
data {
players: termBucket(fields: ["player.metadata[player_id]", "event.player_situation.clutch.opponents_alive"]) {
playerId: term(field: "player.metadata[player_id]")
numOpponentsAlive: term(field: "event.player_situation.clutch.opponents_alive")
wins: count(field: "game.round.result[WIN]")
total: count
}
}
}
}

Fetch data accuracy and timestamp of the latest update of the given request

{
aggregateStats {
meta {
dataAccuracy
lastUpdatedAt
}
data {
# ...
}
}
}

Sort term bucket by highest map win percentage

{
aggregateStats {
data {
players: termBucket(fields: ["player.metadata[player_id]"], sort: [{field: "_mapWinRate", order: ORDER_DESC }]) {
playerId: term(field: "player.metadata[player_id]")
mapTotal: count(field: "event.game_result")
mapWins: count(field: "event.game_result[WIN]")
mapWinRate: rate(fields: ["_mapWins", "_mapTotal"])
}
}
}
}

First Kills/Deaths Round Win%

{
aggregateStats {
data {
players: termBucket(fields: ["player.metadata[player_id]"]) {
entry: filter(filters: [ { field: "game.round.occurrence", filter: { term: { values: ["1"] }} } ]) {
kills: filter(filters: [ { field: "event.player_kill.classification", filter: { term: { values: ["REGULAR"] }} } ]) {
roundTotal: count()
roundWins: count(field: "game.round.result[WIN]")
}
deaths: filter(filters: [ { field: "event.type", filter: { term: { values: ["PLAYER_DEATH"] }} } ]) {
roundTotal: count()
roundWins: count(field: "game.round.result[WIN]")
}
}
}
}
}
}

Average damage/kills per round

{
aggregateStats {
data {
players: termBucket(fields: ["player.metadata[player_id]"]) {
roundsTotal: count(field: "event.game_action[ROUND_ENDED]")
damageTotal: sum(field: "event.player_attack.classification[REGULAR].damage.health")
killsTotal: count(field: "event.player_kill.classification[REGULAR]")
avgRoundDamage: rate(fields: ["_damageTotal", "_roundsTotal"])
avgRoundKills: rate(fields: ["_killsTotal", "_roundsTotal"])
}
}
}
}

Filter results by Player IDs

{
aggregateStats(filters: [
{ term: { field: "player.metadata[player_id]", values: ["4357ee21-8021-415f-b7c8-d75123de6647", "4357ee21-8021-415f-b7c8-d75124e6657"] }}
]) {
# ...
}
}

Filter results by Team IDs

{
aggregateStats(filters: [
{ term: { field: "team.metadata[team_id]", values: ["2c3fda30-e913-4938-89de-5e28c2ff26c2", "b55a8d10-223b-11ee-be56-0242ac120002"] }}
]) {
# ...
}
}

Filter results by time period

{
aggregateStats(filters: [
{ range: { field: "event.timestamp", gte: "2022-01-01T01:02:03.004Z", lte: "2022-02-02T01:02:03.004Z" }}
]) {
# ...
}
}