bo3 APIbo3.gg ↗
Access top player rankings, aggregated career stats, and per-match history for CS2, Valorant, and League of Legends via the bo3.gg API.
What is the bo3 API?
The bo3.gg API provides 3 endpoints covering professional esports player statistics across CS2, Valorant, and League of Legends. Use get_top_players to retrieve ranked lists with per-player averages for kills, deaths, assists, multikills, clutches, gold-per-minute, and pentakills depending on the title. Two additional endpoints drill into individual CS2 players: aggregated career stats and a reverse-chronological match-by-match breakdown including accuracy, headshots, and trade kills.
curl -X GET 'https://api.parse.bot/scraper/56f61c73-bac2-4288-9d64-543507d7a699/get_top_players?game=cs2&sort=-avg_kills&limit=5&offset=0&date_to=2026-08-11&date_from=2026-02-12' \ -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 bo3-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: bo3_gg_api SDK — bounded, re-runnable; every call capped."""
from parse_apis.bo3_gg_api import Bo3gg, Game, PlayerNotFound
client = Bo3gg()
# List top CS2 players by rating
for player in client.player_rankings.top(game=Game.CS2, limit=3):
print(player.nickname, player.avg_kills, player.kd_ratio)
# Drill into a specific player's aggregated stats
top_player = client.player_rankings.top(game=Game.CS2, limit=1).first()
stats = top_player.stats()
print(stats.nickname, stats.games_won, stats.total_kills, stats.total_assists)
# Walk match history for that player
for match in top_player.match_history(limit=3):
print(match.match_date, match.kills, match.deaths, match.headshot_accuracy)
# Valorant top players
for player in client.player_rankings.top(game=Game.VALORANT, limit=2):
print(player.nickname, player.avg_combat_score, player.headshot_accuracy)
# Typed error handling
try:
ghost = client.playerranking(slug="nonexistent-xyz")
ghost.stats()
except PlayerNotFound as e:
print("not found:", e.player_slug)
print("exercised: player_rankings.top / stats / match_history")
Retrieve top-ranked players with historical performance stats for a given esports title. Each player record includes average kills, deaths, assists, and game-specific metrics (e.g. clutches and multikills for CS2/Valorant, gold-per-minute and pentakills for LoL). Results are ordered by the chosen sort metric descending. Stats are computed over the specified date window.
| Param | Type | Description |
|---|---|---|
| gamerequired | string | Esports title to query. |
| sort | string | Sort field prefixed with - for descending. CS2 examples: -avg_player_rating, -avg_kills, -avg_kd_rate. Valorant: -avg_combat_score. LoL: -avg_kills, -avg_gold_per_min. Omit for game-specific default. |
| limit | integer | Number of players to return per page (1-50). |
| offset | integer | Number of players to skip for pagination. Use with limit to page through results. |
| date_to | string | End of date range in YYYY-MM-DD format. Defaults to today. |
| date_from | string | Start of date range in YYYY-MM-DD format. Defaults to 180 days before today. |
{
"type": "object",
"fields": {
"game": "game identifier string",
"players": "array of player stat records with kills, deaths, assists, and game-specific metrics",
"total_count": "total number of qualifying players"
},
"sample": {
"data": {
"game": "cs2",
"players": [
{
"slug": "olimp",
"country": "Poland",
"kd_ratio": 1.05,
"nickname": "olimp",
"avg_kills": 0.87,
"player_id": 29407,
"team_name": "Walczaki",
"avg_damage": 102.22,
"avg_deaths": 0.83,
"avg_rating": 7.56,
"avg_assists": 0.35,
"games_count": 173,
"clutches_1v1": 33,
"clutches_1v2": 19,
"clutches_1v3": 5,
"multikills_2": 586,
"multikills_3": 171,
"multikills_4": 64,
"multikills_5": 3,
"rounds_count": 3770,
"avg_first_death": 0.14,
"avg_first_kills": 0.12,
"headshot_accuracy": 0.53
}
],
"total_count": 165
},
"status": "success"
}
}About the bo3 API
Endpoints and What They Return
The get_top_players endpoint accepts a required game parameter and returns an array of player stat records alongside a total_count. Sorting is controlled by the sort parameter using prefixed field names — for example -avg_player_rating or -avg_kills for CS2, with equivalent fields available for Valorant and LoL. Results can be scoped to a date window using date_from and date_to (both in YYYY-MM-DD format; defaulting to the last 180 days), and paginated with limit (1–50) and offset. Game-specific metrics differ by title: CS2 and Valorant records include clutch and multikill fields, while LoL records include gold-per-minute and pentakill data.
Player-Level Detail
get_player_stats takes a player_slug — a URL identifier like donk or samey that can be pulled from get_top_players results — and returns aggregated CS2 stats for a configurable date window. Response fields include games_won, games_lost, rounds_won, games_count, matches_won, total_kills, and the bounding dates date_from and date_to. The player_id integer is also returned and can serve as a stable identifier across requests.
Match History
get_player_match_history takes the same player_slug and returns a matches array in reverse chronological order. Each record in the array includes per-match figures: kills, deaths, assists, damage, rating, headshots, first kills, trade kills, multikills, and accuracy. This endpoint is CS2-specific and does not accept date filtering — it returns the player's most recent matches.
The bo3 API is a managed, monitored endpoint for bo3.gg — not a raw scraper you maintain. Every endpoint is automatically health-checked on a schedule, and when bo3.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 bo3.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 CS2 player comparison tool using avg_kills, avg_kd_rate, and avg_player_rating from get_top_players
- Track a pro player's form over a specific tournament window by setting date_from and date_to in get_player_stats
- Identify clutch specialists in Valorant by sorting get_top_players on clutch-rate metrics
- Display a player's recent match accuracy and headshot trends using get_player_match_history
- Build a LoL fantasy esports tool using gold-per-minute and pentakill fields from get_top_players
- Paginate through ranked CS2 players using limit and offset to populate a leaderboard
- Monitor trade-kill and first-kill ratios per match to evaluate CS2 in-game roles
| 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.
Does bo3.gg have an official developer API?+
Which games are supported by get_top_players, and do all return the same fields?+
game parameter. Field sets differ by game: CS2 and Valorant records include clutch and multikill metrics, while LoL records include gold-per-minute and pentakills. The sort parameter also accepts different field names depending on the game.Does get_player_match_history support date filtering or a configurable match count?+
get_player_stats endpoint does accept date_from and date_to for windowed aggregates. You can fork this API on Parse and revise it to add date-range filtering to match history if your use case requires it.Are Valorant or League of Legends per-match histories available?+
get_player_match_history is CS2-specific. The API covers Valorant and LoL through the top-players ranking endpoint, which provides aggregated averages rather than per-match records. You can fork this API on Parse and revise it to add per-match history endpoints for those titles.How do I paginate through a large player list in get_top_players?+
limit parameter (1–50 players per page) together with offset to page through results. The response includes a total_count field indicating the total number of qualifying players, which you can use to determine how many pages to fetch.