VLR APIvlr.gg ↗
Access Valorant esports data from VLR.gg: matches, player stats, team rankings, agent pick rates, and event listings via 7 structured endpoints.
What is the VLR API?
The VLR.gg API exposes 7 endpoints covering the full competitive Valorant data surface tracked on VLR.gg, from live event listings and match results to per-map player statistics. The get_match_details endpoint alone returns up to 12 per-player fields per map — including ACS, KAST, ADR, kills, deaths, assists, and headshot percentage — making it practical for building match dashboards or performance-tracking tools without parsing the site manually.
No input parameters required.
curl -X GET 'https://api.parse.bot/scraper/17a280c5-4958-46ad-b697-83a15883a046/get_events' \ -H 'X-API-Key: $PARSE_API_KEY'
Typed, relational, agent-ready
A generated client with real types, enums, and the links between objects — the structure a flat JSON response can't carry. Autocompletes in your editor and reads cleanly to coding agents.
- Fully typed · autocompletes
- Objects link to objects
- Typed errors & pagination
Typed Python client. Set up the SDK in your uv project, then pull this API’s typed client:
uv add parse-sdk uv run parse init uv run parse add --marketplace vlr-gg-api
uv run parse add --marketplace pulls a pinned snapshot of this canonical API — it won’t change underneath you. To customize it, subscribe and swap to your own copy.
"""Walkthrough: VLR.gg Valorant Esports SDK — bounded, re-runnable."""
from parse_apis.vlr_gg_valorant_esports_api import (
VLR, MatchStatus, Timespan, PlayerRegion, RankingRegion, ResourceNotFound
)
client = VLR()
# List current events and check agent pick rates for the first one.
event = client.events.list(limit=1).first()
if event:
print(f"Event: {event.name} (id={event.event_id})")
for agent in event.agents.list(limit=5):
print(f" {agent.agent}: {agent.pick_rate}")
# Browse recent completed matches, then drill into one for map-level stats.
match_summary = client.matchsummaries.list(status=MatchStatus.RESULTS, limit=1).first()
if match_summary:
print(f"Match: {match_summary.team1} vs {match_summary.team2}")
detail = match_summary.details()
for map_result in detail.maps:
print(f" {map_result.map}: {map_result.score1}-{map_result.score2}")
# Player stats leaderboard filtered by region and timespan.
for player in client.playerstats.list(
timespan=Timespan.SIXTY_DAYS, region=PlayerRegion.NA, limit=3
):
print(f"{player.player} ({player.team}) — rating: {player.rating}, KD: {player.kd}")
# Team rankings and drill into team details with typed error handling.
ranking = client.teamrankings.list(region=RankingRegion.NORTH_AMERICA, limit=1).first()
if ranking:
try:
team = ranking.details()
print(f"{team.team_name} roster: {len(team.roster)} members")
for member in team.roster[:3]:
print(f" {member.player} — {member.role or 'player'}")
except ResourceNotFound as exc:
print(f"Team not found: {exc}")
print("exercised: events.list / agents.list / matchsummaries.list / details / playerstats.list / teamrankings.list / team details")
Retrieve current and upcoming Valorant esports events. Returns all events listed on the VLR.gg events page with their IDs, names, status, and detail paths for use with get_agent_stats.
No input parameters required.
{
"type": "object",
"fields": {
"events": "array of event objects with event_id, detail_path, name, status, and url"
},
"sample": {
"data": {
"events": [
{
"url": "https://www.vlr.gg/event/2765/valorant-masters-london-2026",
"name": "Valorant Masters London 2026",
"status": "",
"event_id": "2765",
"detail_path": "2765/valorant-masters-london-2026"
}
]
},
"status": "success"
}
}About the VLR API
Match and Event Data
The get_matches endpoint returns paginated match listings filtered by status — either 'upcoming' or 'results'. Each match object includes team1, team2, score1, score2, event context, and a match_id slug you can pass directly to get_match_details. Pagination via the page parameter applies only to the 'results' status. The get_events endpoint returns current and upcoming events with event_id, name, status, and url, and those event_id values are the required input for get_agent_stats.
Player and Agent Statistics
get_player_stats returns a global leaderboard of players sorted by rating, with fields covering acs, kd, kast, adr, kpr, apr, fkpr (first-kill-per-round), fdpr (first-death-per-round), hs_percent, and cl_p (clutch percentage). You can filter by region (11 options including na, eu, ap, kr), agent, and timespan (30d, 60d, 90d, or all). The get_agent_stats endpoint scopes pick-rate data to a single event rather than globally, returning each agent's pick_rate percentage for that event.
Team Rankings and Roster Details
get_rankings returns a ranked list of teams per region, with rank, team, team_id, country, and rating. The region parameter accepts slugs like 'north-america', 'europe', 'asia-pacific', and 'korea' among others. Passing a team_id from those results to get_team_details returns the current roster (with player_id and role), a history array of former players, and map_win_rates showing win_rate, wins, and losses per map. The team_id slug format is '<numeric_id>/<team-slug>', consistent with VLR.gg's URL structure.
The VLR API is a managed, monitored endpoint for vlr.gg — not a raw scraper you maintain. Every endpoint is automatically health-checked on a schedule, and when vlr.gg changes and a check fails, the API is automatically queued for repair and re-verified. It is built to keep working as the site underneath it changes.
This isn't an official vlr.gg API — it's an independent, maintained REST wrapper over public data. Where the source has no official API (or only a limited one), Parse gives you a stable contract over a source that never promised one, and keeps it current. Need a new endpoint or field? You can revise it yourself in plain English and the agent rebuilds it against the live site in minutes — contributing the change back to the shared API is free.
Will this API break when the source site changes?+
Is this an official API from the source site?+
Can I fix or extend this API myself if I need a new endpoint or field?+
What happens if I call an endpoint that has an issue?+
- Build a match result tracker that polls
get_matcheswithstatus='results'and stores team scores and event context. - Generate per-player performance reports using the 12+ stat fields returned by
get_match_detailsfor a given match. - Create a regional team ranking leaderboard using
get_rankingsfiltered by region and linked to team roster data fromget_team_details. - Track agent meta shifts across events by comparing
pick_ratedata fromget_agent_statsacross multipleevent_idvalues. - Filter the
get_player_statsleaderboard by agent and region to identify top performers on specific agents in a given timespan. - Monitor roster changes for a team by periodically pulling
get_team_detailsand diffing therosterandhistoryarrays. - Analyze map-level team performance by extracting
map_win_ratesfromget_team_detailsacross multiple teams in a region.
| Tier | Price | Credits/month | Rate limit |
|---|---|---|---|
| Free | $0/mo | 100 | 5 req/min |
| Hobby | $30/mo | 1,000 | 20 req/min |
| Developer | $100/mo | 5,000 | 100 req/min |
One credit = one API call regardless of which marketplace API you call. Exceeding the rate limit returns a 429 response. Authenticate with the X-API-Key header.
Does VLR.gg have an official developer API?+
What does `get_match_details` return beyond the series score?+
get_match_details breaks the match down by individual map. For each map it returns the map name, per-team scores, and a player_stats array with fields including rating, acs, kills, deaths, assists, agent, kast, adr, and hs_percent for every player who participated. The match-level fields also include team1, team2, score1, score2, event, and date.Can I retrieve historical player statistics for a specific match period beyond 90 days?+
get_player_stats supports timespan values of 30d, 60d, 90d, and all. The all option covers the full dataset VLR.gg tracks, but arbitrary custom date ranges are not supported. You can fork the API on Parse and revise it to add a date-range filtering endpoint if your use case requires it.Does the API expose individual player profile pages, including career history and social links?+
get_player_stats and as per-match entries in get_match_details, both keyed by player_id. Dedicated player profile pages with career history are not covered. You can fork the API on Parse and revise it to add a player profile endpoint using those player_id values.Is pagination available for all match listing requests?+
page parameter in get_matches only applies when status is set to 'results'. Requests with status='upcoming' return all available upcoming matches without pagination controls.