Series Performance
Fetch performance data including kill matrices (all kills, first kills, OP kills) and advanced stats (multi-kills, clutches, eco rating, plants, defuses).
series.performance(series_id, game_id) returns detailed performance data for a game, including kill matrices and advanced statistics.
Signature
series.performance(
series_id: int,
game_id: int | str = "all",
) -> PerformanceDataWith curried access:
vlrdevapi.series(series_id).performance(game_id: int | str = "all") -> PerformanceDataParameters
Prop
Type
Returns - PerformanceData
Prop
Type
KillMatrix Fields
Prop
Type
KillMatrix also provides helper methods: lookup(killer, victim), by_killer(name), by_victim(name), by_team(team), killers(), victims().
KillEntry Fields
Prop
Type
AdvStatsEntry Fields
Prop
Type
Each multi-kill and clutch field also has a corresponding _rounds list (e.g., two_k_rounds, one_v1_rounds) containing AdvStatsNotableRound objects with round_number and victims data.
Examples
Kill matrix
The kill matrix shows every kill in the game. Use the KillMatrix helper methods to find specific matchups.
import vlrdevapi
perf = vlrdevapi.series.performance(series_id=670471, game_id=1)
if perf.all_kills_matrix.entries:
for entry in perf.all_kills_matrix.entries[:5]:
print(f"{entry.killer} ({entry.killer_team}) killed {entry.victim} ({entry.victim_team})")
# Find the most common killer-victim pair
killer = perf.all_kills_matrix.killers()[0] if perf.all_kills_matrix.killers() else None
if killer:
victims = perf.all_kills_matrix.by_killer(killer)
for v in victims[:3]:
print(f"{killer} killed {v.victim} x {v.kills} times")
else:
print("(no kill matrix data for this game)")First kills and OP kills
Access the filtered kill matrices for first kills (opening duel winners) and Operator kills.
import vlrdevapi
perf = vlrdevapi.series.performance(series_id=670471, game_id=1)
print("First kills:")
if perf.first_kills_matrix.entries:
for entry in perf.first_kills_matrix.entries:
print(f" {entry.killer} -> {entry.victim}")
else:
print(" (no opening duel data)")
print("Operator kills:")
if perf.op_kills_matrix.entries:
for entry in perf.op_kills_matrix.entries:
print(f" {entry.killer} -> {entry.victim}")
else:
print(" (no OP kill data)")Advanced stats
Advanced stats show multi-kill rounds, clutch wins, eco rating, plants, and defuses per player.
import vlrdevapi
perf = vlrdevapi.series.performance(series_id=670471, game_id=1)
if not perf.adv_stats:
print("(no advanced stats available)")
for player in perf.adv_stats:
print(f"{player.name} ({player.team_short}) - {player.agent}")
print(f" 2K: {player.two_k} | 3K: {player.three_k} | 4K: {player.four_k} | 5K: {player.five_k}")
print(f" 1v1: {player.one_v1} | 1v2: {player.one_v2} | 1v3: {player.one_v3}")
print(f" Econ: {player.econ} | Plants: {player.pl} | Defuses: {player.de}")Notable round details
Each multi-kill and clutch stat has a corresponding _rounds list with round numbers and victim details, giving you the exact context of each highlight play.
import vlrdevapi
perf = vlrdevapi.series.performance(series_id=670471, game_id=1)
if not perf.adv_stats:
print("(no player data for notable rounds)")
for player in perf.adv_stats:
for round_info in player.four_k_rounds:
victims = ", ".join(v.name for v in round_info.victims)
print(f"{player.name} got a 4K in round {round_info.round_number} ({victims})")
for round_info in player.one_v3_rounds:
victims = ", ".join(v.name for v in round_info.victims)
print(f"{player.name} won a 1v3 in round {round_info.round_number} ({victims})")Curried access
Use the curried pattern to find the player with the most multi-kill rounds.
import vlrdevapi
series = vlrdevapi.series(670471)
perf = series.performance(game_id=1)
if perf.adv_stats:
top = max(perf.adv_stats, key=lambda p: p.three_k or 0)
print(f"Most 3K rounds: {top.name} ({top.three_k})")
else:
print("(no advanced stats to evaluate)")Last updated on