VLR APIvlr.gg ↗
Access Valorant esports data from VLR.gg: matches, player stats, agent pick rates, team rankings, and event details via 8 structured endpoints.
What is the VLR API?
This API exposes 8 endpoints covering the full competitive Valorant data available on VLR.gg, from live event listings to per-map player statistics. The get_match_details endpoint returns individual player performance metrics — kills, deaths, assists, ACS, KAST, ADR, headshot percentage, and first kill/death rates — broken down by map for any completed match. Regional team rankings, agent pick rates, and roster history are also available.
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.match_summaries.list(status=MatchStatus.RESULTS, limit=1).first()
if match_summary:
print(f"Match: {match_summary.team1} vs {match_summary.team2}")
detail = match_summary.details()
print(f" Format: {detail.format}, Date: {detail.date}")
for stream in detail.streams[:3]:
print(f" Stream: {stream.name} ({stream.platform}) — {stream.url}")
for map_result in detail.maps[:2]:
print(f" {map_result.map}: {map_result.score1}-{map_result.score2}")
if detail.all_maps:
print(f" All-maps MVP: {detail.all_maps[0].player} (rating: {detail.all_maps[0].rating})")
# Player stats leaderboard filtered by region and timespan.
for player in client.player_stats.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.team_rankings.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 / match_summaries.list / details / player_stats.list / team_rankings.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
get_matches returns upcoming fixtures and completed results, each with team names, scores, event context, and a detail_path for drilling into individual matches. Pagination is supported when querying results via the page parameter. get_match_details accepts a match_id path and returns the full series breakdown: team names, series scores, and a maps array where each entry contains per-player stats including rating, acs, kast, adr, hs_percent, and fk/fd counts. get_events lists current and upcoming tournaments with their event_id and detail_path, which feeds directly into get_agent_stats.
Player and Agent Statistics
get_player_stats provides the global leaderboard, filterable by timespan, region, and agent. Each entry includes rounds, rating, kd, kast, adr, kpr, apr, fkpr, fdpr, hs_percent, and cl_p. get_agent_stats takes an event's detail_path and returns every agent's pick_rate for that event — useful for tracking meta shifts across tournaments.
Team Rankings and Rosters
get_rankings returns ranked teams by region, with rank, rating, country, and a detail_path for use with get_team_details. That endpoint exposes the current roster (with player_id and role), a history array of former players, and map_win_rates showing wins, losses, and win rate per map. get_active_teams extends this by fetching teams across all 13 regions when region is set to 'all', returning a total count alongside rank, rating, country, region, and logo URL for each team.
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 tracker that polls get_matches for upcoming fixtures and surfaces live scores by team name
- Aggregate per-map ACS and KAST from get_match_details to compare player performance across a tournament
- Track agent pick rate trends across events using get_agent_stats with event IDs from get_events
- Generate regional team rankings dashboards using get_rankings and enrich each entry via get_team_details
- Monitor roster changes over time by periodically fetching get_team_details and diffing the history array
- Filter get_player_stats by region and timespan to identify top-performing players in a specific meta window
- Compile cross-region team data for scouting tools using get_active_teams with region set to 'all'
| Tier | Price | Credits/month | Rate limit |
|---|---|---|---|
| Free | $0/mo | 200 | 5 req/min |
| Hobby | $30/mo | 1,000 | 20 req/min |
| Developer | $100/mo | 5,000 | 100 req/min |
| Team | $300/mo | 20,000 | 300 req/min |
| Company | $1,000/mo | 100,000 | 500 req/min |
Each endpoint has a fixed posted price per successful call — most fall between 1 and 10 credits — shown on this API's page before you run it. Exceeding the rate limit returns a 429 response. Authenticate with the X-API-Key header.