HLTV-style CS2 stats, from an API.
HLTV has no stats API. The CS2 API serves the same kinds of numbers as JSON: an HLTV-style rating where 1.00 is average, ADR, KAST, K/D and opening duels per map, plus career, recent form and 90-day leaderboards. GET /cs2/leaderboards/rating returns the top-rated players; a free key covers 500 requests a month.
- Rating, ADR, KAST, K/D
- Per map, career, form
- 500 free requests / month
{ "success": true, "data": [ { "playerName": "donk", "teamName": "Spirit", "maps": 572, "rating": 1.45, "adr": 97 }, { "playerName": "ZywOo", "teamName": "Vitality", "maps": 636, "rating": 1.39, "adr": 88 }, "__more__" ]}Seamless Integration with our MCP Server
Give Claude, Cursor, and ChatGPT the CS2 data. One command writes the MCP config; agents call live scoreboard, team map stat, opening duel, and transfer tools instead of inventing match IDs, and your key stays on your machine.
MCPInstall the Cito MCP serverWho are the top-rated CS2 players right now?
GET /cs2/stats/players at build time, players with at least 200 maps, sorted by rating. Your code gets the same rows, so a leaderboard on your site matches this one.
| Player | Team | Rating | ADR | KAST | K/D | Maps |
|---|---|---|---|---|---|---|
| donk | Spirit | 1.45 | 97.0 | 76.8% | 1.36 | 572 |
| ZywOo | Vitality | 1.39 | 88.0 | 78.0% | 1.46 | 636 |
| m0NESY | Falcons | 1.29 | 82.4 | 76.2% | 1.35 | 603 |
| insani | MIBR | 1.23 | 84.8 | 73.1% | 1.11 | 550 |
| JamYoung | TYLOO | 1.23 | 81.8 | 74.0% | 1.16 | 510 |
| latto | Legacy | 1.23 | 80.7 | 76.4% | 1.20 | 534 |
| sh1ro | Spirit | 1.23 | 78.0 | 77.1% | 1.41 | 489 |
| KSCERATO | FURIA | 1.21 | 80.7 | 75.7% | 1.18 | 660 |
| blameF | BIG | 1.21 | 85.2 | 76.1% | 1.26 | 432 |
| NiKo | Falcons | 1.20 | 82.1 | 73.9% | 1.14 | 630 |
Which endpoint replaces each HLTV stats page?
The stats people copy from HLTV come at four levels: a player, the top-players list, a team and a single match. Each has its own endpoint, and every row uses stable IDs and slugs such as zywoo or vitality.
| Stats you want | Endpoint | Key fields |
|---|---|---|
| A player's career | GET /cs2/players/{slug} | rating, mapsPlayed, primaryRole |
| A player's per-map lines | GET /cs2/players/{slug}/matches | rating, adr, kast, kills, deaths, firstKills |
| A player's recent form | GET /cs2/players/{slug}/form | the latest maps, newest first |
| Top players (90 days, 20+ maps) | GET /cs2/leaderboards/rating, /adr, /kast | rating, adr, kast, kd, openingKills |
| All-time player table | GET /cs2/stats/players | rating, adr, kast, kdRatio, openingDuelSuccessRate |
| A team's maps | GET /cs2/teams/{slug}/map-stats | win rate per map |
| One match's box score | GET /cs2/matches/{matchId}/player-stats | every player's line per map |
| Clutches and opening duels | GET /cs2/stats/clutches, /cs2/stats/opening-duels | attempts, wins, success rate |
Is the rating the same as HLTV Rating?
It is an HLTV-style performance rating on the familiar scale where about 1.00 is an average performance and higher is better. Per-map rows say which rating version they carry in ratingVersion, and career and leaderboard numbers are averages over the maps counted. CS2 API is independent and not affiliated with HLTV.
- ADR: average damage per round.
- KAST: share of rounds with a kill, an assist, survival or a trade (0.75 means 75%).
- K/D: kills divided by deaths; plusMinus is kills minus deaths on a map.
- Opening duels: firstKills and firstDeaths per map, openingDuelSuccessRate in the all-time table.
How do I pull player stats in code?
Leaderboards take a metric in the path and return players with at least 20 maps in the last 90 days; per-player calls take the slug. Both are a single GET with your key in the x-api-key header.
import os, requests
API = "https://api.citoapi.com/api/v1/cs2"
H = {"x-api-key": os.environ["CITO_API_KEY"]}
r = requests.get(f"{API}/leaderboards/rating", headers=H, params={"limit": 20}, timeout=10)
r.raise_for_status()
for i, p in enumerate(r.json()["data"], 1):
print(f"{i:>2}. {p['playerName']:<14} {p['teamName'] or '-':<14} "
f"rating {p['rating']:.2f} ADR {p['adr']:.1f} KAST {p['kast']:.0%} maps {p['maps']}")const res = await fetch("https://api.citoapi.com/api/v1/cs2/players/zywoo/matches?limit=10", {
headers: { "x-api-key": process.env.CITO_API_KEY },
})
const { data } = await res.json()
for (const m of data) {
console.log(m.map?.mapName, `${m.kills}-${m.deaths}`, "ADR", m.adr, "rating", m.rating)
}How much CS2 data is behind it?
Measured on production, with the date each figure was taken.
- On the CS2 API's career leaderboard (minimum 200 maps), donk leads with a 1.45 rating over 572 maps (as of 12 October 2026).
- The CS2 API indexes 15,315 Counter-Strike 2 matches, 4,507 teams and 8,828 players across 1,534 tournaments (as of 12 October 2026).
- The CS2 API tracks 38,086 match demos and 150,825 roster changes (as of 12 October 2026).
- The CS2 API answered 197,791 requests in the 24 hours to 3 October 2026 with a median server response time of 227 ms.
Endpoints you can ship with
Start on players: profiles, per-map lines, form and leaderboards.
Live matches
Poll the live list for every match in progress, open one match for its round, timer, bomb and players, or keep an SSE stream open and get each update pushed.
- GET
/api/v1/cs2/liveMatches in progress: series score, map in play, map score, current round.
- GET
/api/v1/cs2/live/{matchId}/stateOne live match: score, round, round timer, bomb status and players.
- GET
/api/v1/cs2/live/{matchId}/scoreboardSeries score, current map and round, and each player's kills, deaths, money and equipment.
- GET
/api/v1/cs2/live/{matchId}/roundsRound-by-round results so far: winner, side and how each round ended.
- GET
/api/v1/cs2/live/streamServer-Sent Events push of every live update. Every plan; counts like polling.
- GET
/api/v1/cs2/live/wsWebSocket with a room per match. Scale and Enterprise.
Results
Finished matches with the series score and winner, every map and its score, and the player lines behind them.
- GET
/api/v1/cs2/matches/recentFinished matches with final series score and winner, newest first.
- GET
/api/v1/cs2/matches/{matchId}One match: event, teams, series score, and maps.
- GET
/api/v1/cs2/matches/{matchId}/mapsEach map: name, score, winner, and the team that picked it.
- GET
/api/v1/cs2/matches/{matchId}/player-statsPer-player stats for each map: kills, deaths, ADR, KAST and rating.
- GET
/api/v1/cs2/teams/{teamIdOrSlug}/resultsOne team's finished matches, newest first.
- GET
/api/v1/cs2/events/{eventIdOrSlug}/resultsFinal placements and prize money of a tournament.
Schedule
What is on next: upcoming matches soonest first, today's slate, one team's fixtures, and the tournament calendar.
- GET
/api/v1/cs2/matches/upcomingScheduled matches, soonest first.
- GET
/api/v1/cs2/matches/todayMatches scheduled, live or finished today (UTC).
- GET
/api/v1/cs2/teams/{teamIdOrSlug}/upcomingOne team's scheduled matches.
- GET
/api/v1/cs2/events/upcomingScheduled tournaments, soonest first.
- GET
/api/v1/cs2/events/calendarTournaments in a date range, with from and to.
- GET
/api/v1/cs2/matches/{matchId}/streamsBroadcast links for a match, when known.
Player stats
Rating, ADR, KAST and K/D for every map a player has played, rolled up into career, yearly and recent-form views.
- GET
/api/v1/cs2/players/{playerIdOrSlug}Nickname, real name, photo, country, team, role and headline stats.
- GET
/api/v1/cs2/players/{playerIdOrSlug}/statsCareer totals plus a stat line for every map played.
- GET
/api/v1/cs2/players/{playerIdOrSlug}/seasonsA player's stats by year.
- GET
/api/v1/cs2/players/{playerIdOrSlug}/formThe most recent maps with kills, deaths, ADR, KAST and rating.
- GET
/api/v1/cs2/leaderboards/{metric}Top players by rating, ADR, KAST, K/D, kills or opening kills.
- GET
/api/v1/cs2/players/search?q={name}Find a player by nickname or real name.
Teams & rosters
Team profiles with the current roster, every past lineup, player moves between teams, and how each team plays each map.
- GET
/api/v1/cs2/teams/{teamIdOrSlug}Name, logo, country, region, world ranking and current roster.
- GET
/api/v1/cs2/teams/{teamIdOrSlug}/roster-historyEvery player who has played for the team, with start and end dates.
- GET
/api/v1/cs2/teams/{teamIdOrSlug}/map-statsPer-map win rate, rounds and pick/ban tendencies.
- GET
/api/v1/cs2/teams/{teamIdOrSlug}/vs/{opponentIdOrSlug}Record and past matches between two teams.
- GET
/api/v1/cs2/roster-changes/recentPlayers joining and leaving teams, newest first.
- GET
/api/v1/cs2/transfers/recentPlayer moves between teams, newest first.
Rankings
The world team ranking and the Valve Regional Standings, with points and movement, plus one table per region.
- GET
/api/v1/cs2/rankings/worldThe latest world team ranking.
- GET
/api/v1/cs2/rankings/vrsThe latest Valve Regional Standings (VRS).
- GET
/api/v1/cs2/rankings/region/{region}One region, with each team's world and regional rank.
- GET
/api/v1/cs2/rankingsOne row per team, with points and change since the previous ranking.
Skin prices
The current price of a skin on each marketplace, its daily price history, sell listings across markets, and the week's biggest movers.
- GET
/api/v1/cs2/skins?q={name}Search skins by name, weapon, rarity or price range.
- GET
/api/v1/cs2/skins/{skinIdOrSlug}/pricesThe current price on each marketplace, cheapest first, with offer counts.
- GET
/api/v1/cs2/skins/{skinIdOrSlug}/historyDaily cheapest price across marketplaces, years back on long-listed skins.
- GET
/api/v1/cs2/skins/{skinIdOrSlug}/order-bookSell listings per marketplace with counts, and the lowest ask.
- GET
/api/v1/cs2/skins/trendingBiggest gainers and losers over 1 day to 1 year, with sparklines.
- GET
/api/v1/cs2/skins/{skinIdOrSlug}One skin: weapon, rarity, collection, image and price summary.
Tournaments
Tournaments with dates, prize pool, tier and format, plus every match, the standings and the bracket.
- GET
/api/v1/cs2/events/liveTournaments being played now.
- GET
/api/v1/cs2/events/{eventIdOrSlug}Dates, location, prize pool, tier, teams and format.
- GET
/api/v1/cs2/events/{eventIdOrSlug}/matchesEvery match of the tournament.
- GET
/api/v1/cs2/events/{eventIdOrSlug}/standingsTeams with seed, final placement and prize.
- GET
/api/v1/cs2/events/{eventIdOrSlug}/bracketBracket, groups, play-in and Swiss, each slot with teams, scores and winner.
FAQs
Ratings, ADR, KAST and leaderboards
Can't find what you're looking for? Contact our customer support team
More HLTV-style data
- HLTV APIIs there an HLTV API? No official one. What to use instead.
- HLTV rankings APIThe CS2 world ranking and VRS as JSON.
- CS2 player stats APIRating, ADR, and KAST for every map played.
- HLTV API alternativeEvery way to get HLTV-style CS2 data, compared.
- HLTV API in PythonResults, player stats, rankings and live scores in Python.
- Free CS2 APIWhat a free key includes, with every limit stated.
- CS2 APILive scores, results, player stats, rankings, and skin prices in one API.
- CS2 API docsEvery endpoint, its parameters, and a real response.
Build stat sites
Create a free key and pull the leaderboard in one call.