Csstats APIcsstats.org ↗
Access CS2 player profiles, match history, round-by-round data, leaderboards, and VAC ban stats from csstats.gg via a structured REST API.
What is the Csstats API?
This API exposes 8 endpoints covering CS2 player profiles, match history, and leaderboard data from csstats.gg. Use search_player to resolve a Steam ID, profile link, or custom URL into a full player profile — including overall stats, weapon breakdowns, map stats, and rank history. Other endpoints cover individual match details with heatmap coordinates, round-by-round outcomes, co-player records, and global VAC/Game Ban daily counts.
curl -X POST 'https://api.parse.bot/scraper/8e04485d-f2ca-441f-a18c-e1d6ac48b195/search_player' \
-H 'X-API-Key: $PARSE_API_KEY' \
-H 'Content-Type: application/json' \
-d '{
"query": "76561198088771412"
}'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 csstats-org-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.
"""
CSStats.gg API Client
Get your API key from: https://parse.bot/settings
Analyze CS2 player performance, check match heatmaps, browse leaderboards,
and track daily ban statistics.
"""
from parse_apis.cs_stats_api import CSStats, LeaderboardType, PlayerNotFound
cs = CSStats()
# Search for a player by Steam ID and inspect their profile
player = cs.players.search(query="76561198088771412")
print(player.username, player.steam_id, player.ban_status)
# Access rank history entries
for entry in player.rank_history:
print(entry.date, entry.premier, entry.adr)
# Get the player's match list via the instance method
match_list = player.matches()
print(match_list.total_matches)
for match_summary in match_list.matches:
print(match_summary.match_id, match_summary.url)
# Get full match details with heatmap data
match = cs.matches.get(match_id="139794175")
print(match.match_id, match.match_info.title)
# Browse the premier leaderboard using the enum
leaderboard = cs.leaderboards.get(type=LeaderboardType.PREMIER)
print(leaderboard.type)
for lb_player in leaderboard.players:
print(lb_player.rank, lb_player.username, lb_player.steam_id)
# Check daily ban statistics
ban_report = cs.banreports.get()
for ban in ban_report.daily_bans:
print(ban.date, ban.num)
# Typed error handling for player lookup
try:
profile = cs.players.get(steam_id="00000000000000000")
print(profile.username)
except PlayerNotFound as exc:
print(f"Player not found: {exc}")
print("exercised: players.search / players.get / player.matches / matches.get / leaderboards.get / banreports.get")
Search for a player by Steam ID, Steam Profile Link, or Custom Steam URL. Returns the player's full profile including stats, weapon stats, map stats, and rank history. The query is resolved to a SteamID64 and the full profile is fetched. Players without CS2 match data will return empty stats and rank_history.
| Param | Type | Description |
|---|---|---|
| queryrequired | string | Steam ID (e.g. 76561198088771412), Steam Profile Link, or Custom Steam URL |
{
"type": "object",
"fields": {
"stats": "object containing overall stats, totals, weapons, maps, past10, best, and matches",
"avatar": "string or null, avatar image URL",
"steam_id": "string, the player's SteamID64",
"username": "string or null, player display name",
"ban_status": "string, ban status such as 'Clean'",
"rank_history": "array of rank history entries with date, adr, premier, csrank, faceit"
},
"sample": {
"data": {
"stats": {
"best": {
"rank": 39069
},
"maps": {
"overall": {}
},
"rank": 38727,
"past10": [],
"totals": {
"overall": {
"wins": 726,
"games": 967
}
},
"matches": [
139794175
],
"overall": {
"hs": 56,
"wr": 75,
"adr": 98,
"kpd": 1.58,
"rating": 1.52
},
"weapons": {
"overall": {}
},
"comp_wins": 264
},
"avatar": null,
"steam_id": "76561198088771412",
"username": "AceaS",
"ban_status": "Clean",
"rank_history": [
{
"adr": 86,
"date": 1695850598000,
"csrank": null,
"faceit": null,
"premier": 0
}
]
},
"status": "success"
}
}About the Csstats API
Player Profiles and Search
search_player (POST) and get_player_profile (GET) both return the same rich profile shape: a stats object containing overall stats, totals, weapons, maps, past10, best, and a matches array, alongside avatar, username, ban_status, and a rank_history array. Each rank_history entry carries a date, adr, premier rating, csrank, and faceit level. search_player accepts a raw Steam ID, a full Steam profile URL, or a custom Steam URL and resolves it to a SteamID64 before fetching the profile — useful when you don't already have the numeric ID. Players with no recorded CS2 matches return empty stats and an empty rank_history.
Match Data
get_player_matches returns a paginated list of recent matches for a given steam_id, each entry containing a match_id and a url, plus a total_matches count. Those match_id values feed into two deeper endpoints. get_match_details returns a heatmap_data object with kills, deaths, shots, damage, hurt, smoke, flash, and he arrays — each entry holds coordinate data useful for spatial analysis. get_round_history takes both a match_id and a steam_id and returns every round's won boolean, player_side (T or CT), running team_score and opponent_score, and a win_reason, plus aggregate wins, losses, and total_rounds.
Leaderboards and Ban Statistics
get_leaderboard returns a ranked list of players for the premier leaderboard type; each entry has rank, steam_id, and username. The endpoint accepts a type parameter, though only premier is reliably supported. get_ban_stats requires no inputs and returns a daily_bans array covering the past 30 days, with each entry holding a date (YYYY-MM-DD) and a num string representing the ban count — useful for charting VAC and Game Ban trends over time.
Co-Player Data
get_player_played_with retrieves the list of other players a given player has shared matches with, along with shared stats. It supports an offset parameter for pagination and returns a players array alongside a vac field for the queried player.
The Csstats API is a managed, monitored endpoint for csstats.org — not a raw scraper you maintain. Every endpoint is automatically health-checked on a schedule, and when csstats.org 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 csstats.org 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 career dashboard by pulling weapon and map stats from
get_player_profilefor a given SteamID64. - Track Premier rating trends over time using the
rank_historyarray returned bysearch_player. - Visualize kill and death positions on a map using the coordinate arrays in
get_match_detailsheatmap_data. - Reconstruct match timelines round-by-round with
get_round_history, showing side, score progression, and win reasons. - Monitor daily VAC and Game Ban volumes by charting the
daily_bansarray fromget_ban_stats. - Identify frequent teammates or opponents for a player using
get_player_played_withwith pagination. - Display the top-ranked Premier players by name and Steam ID using
get_leaderboard.
| 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 csstats.gg have an official developer API?+
What does get_round_history return beyond win/loss counts?+
get_round_history returns a rounds array where each entry includes round_number, a won boolean, player_side (T or CT), team_score, opponent_score, and win_reason. It also surfaces total_rounds, aggregate wins and losses, and a player_team integer indicating which team (0 or 1) the queried player was on. Both match_id and steam_id are required — the endpoint uses the player identity to determine which team's perspective to report.What are the limitations when querying players with no CS2 match data?+
stats object and an empty rank_history array from both search_player and get_player_profile. Similarly, get_player_matches will return total_matches: 0 and an empty matches array for those players.Does the API return individual player scorecards (kills, deaths, ADR) for every player in a match, not just the queried player?+
get_match_details returns heatmap coordinate data and basic match info, and get_round_history focuses on one player's perspective within a match. Full multi-player scorecards per match are not exposed. You can fork this API on Parse and revise it to add an endpoint that retrieves per-player performance rows for a given match.Is leaderboard data available for types other than Premier?+
get_leaderboard endpoint accepts a type parameter, but only premier is reliably supported at this time. Other leaderboard types such as regional or skill-group rankings are not currently returned. You can fork this API on Parse and revise it to add support for additional leaderboard types if csstats.gg surfaces them.