The most reliable way to track persistent Counter-Strike 2 player statistics is to capture events on the server with Metamod:Source and CounterStrikeSharp, write immutable event and session records to a database, and calculate metrics such as K/D, ADR, headshot percentage, win rate, and playtime from those records. Add Game State Integration (GSI) when you need a low-latency overlay or live dashboard; use Valve’s Steamworks server-stat API only when its authentication and short write window fit your deployment.
Prefer not to run the server on your own PC? Godlike.Host offers hosted Counter-Strike 2 servers with free DDoS protection and up to three free backups a day.
This architecture separates authoritative history from presentation. A plugin protects you from gaps when an overlay endpoint is down, while GSI can drive a stream panel or web display without becoming your only historical data source.
As an Amazon Associate I earn from qualifying purchases.
Choose the collection method before installing anything
CS2 statistics can be collected in three different places: inside the dedicated server, from the game’s live broadcast state, or through Valve’s server-stat API. They solve different problems.
| Approach | Authority and persistence | Latency | Implementation effort | Credentials and scale | Best use |
|---|---|---|---|---|---|
| Server plugin with CounterStrikeSharp | Captures server-side events and can preserve complete history in your database | Near real time | Moderate: runtime, plugin, schema, and database maintenance | Database credentials remain on the server; multiple servers can share one database | Community-server leaderboards, player profiles, and long-term analytics |
| Game State Integration (GSI) | Broadcasts live state to an HTTP endpoint; history is only retained if your consumer stores it | Low, subject to HTTP delivery | Low to moderate: endpoint, parser, and overlay | No Steam publisher key; one endpoint can serve a dashboard or stream scene | Live overlays, broadcast graphics, and operational dashboards |
Steamworks GetGameServerPlayerStatsForGame |
Server-stat writes through Valve’s API, with strict timing and authentication limits | Dependent on API calls | High: publisher key, secure service, app/game IDs, and date-range handling | Publisher Web API key; designed for a secure server and compatible deployment | Specialized integrations that already use Steamworks statistics |
For most independent CS2 communities, start with the server-plugin route. Add GSI after raw capture is stable. This ordering prevents a broken web endpoint, dropped HTTP request, or disconnected streaming computer from silently becoming a missing month of player history.
#1 Best Overall
- Read Before You Buy — No Video Output: These adapters support charging and USB 2.0 data transfer, but cannot transmit video signals. Except for standard USB webcams (which use USB data only), they are not compatible with HDMI/DisplayPort cables, video-capable USB-C hubs, or docking stations with video output.
- Convert USB-A Ports to USB-C: Designed to connect USB-C earphones, cables, flash drives, card readers, and other USB-C accessories to standard USB-A ports. Plug-and-play with no drivers or software required.
- Aluminum Alloy Housing: Built with a sturdy aluminum alloy shell that aids in heat dissipation and protects against daily wear and scratches. Designed to maintain a stable and secure connection.
- Compact & Travel-Friendly: The ultra-compact design allows the adapter to stay plugged into your device without blocking adjacent ports or adding bulk, reducing wear and tear on your original USB ports.
- 12-Month Warranty: Backed by a 12-month manufacturer warranty for peace of mind. Designed to meet strict quality control standards for reliable everyday performance.
Build the authoritative server-side collector
What CounterStrikeSharp provides
CounterStrikeSharp is a server-side modding framework for Counter-Strike 2. It runs as a .NET 8 scripting layer on Metamod:Source and exposes event handlers and listeners for the parts of a match that matter to statistics: player connections and disconnections, map starts, timers, player schemas, deaths, damage, rounds, teams, weapons, and objectives.
A maintained statistics plugin uses those hooks to record facts while the server knows what actually happened. The plugin should write raw events first and derive rates later. This preserves the evidence needed to correct a denominator, reprocess a match, or add a new metric without asking the game for data that has already disappeared.
Free tools Windows power users keep installed
One-click scans. No signup required.
Prerequisites
- A current CS2 dedicated server with a tested backup of its configuration and database settings.
- Metamod:Source installed for the server build you are running.
- The CounterStrikeSharp runtime matching that build, including its .NET 8 requirements.
- A maintained statistics plugin that explicitly supports CS2 and your CounterStrikeSharp version.
- A MySQL-compatible database if you want history shared across servers or a web dashboard.
- A private administrative path to the server; database passwords and API keys must not be sent to clients.
Installation and first verification
- Back up the server. Save the current configuration, plugin directory, and any existing database before changing the installation.
- Install Metamod:Source. Copy its files into the CS2 game directory according to its release instructions, restart the server, and run
meta list. A successful result shows the Metamod:Source loader rather than an unknown-command error. - Install CounterStrikeSharp. Use the runtime that matches your server and copy its
addonsdirectory into the CS2 game directory, as required by the CounterStrikeSharp getting-started procedure. Restart and confirm that the core CounterStrikeSharp plugin loads. - Install the statistics plugin. Place its files under
game/csgo/addons/counterstrikesharp/plugins. Do not mix binaries or dependencies from a different CS2 or CounterStrikeSharp build. - Configure identity and storage. Give this server a unique, stable name. Enter the MySQL host, database, username, and password in the plugin’s server-side configuration. Keep the file out of public repositories and prevent the server from echoing credentials in logs.
- Restart and inspect startup output. Confirm that Metamod:Source, CounterStrikeSharp, and the statistics plugin load in that order. Treat a missing dependency, schema migration error, or database timeout as a deployment failure rather than continuing to collect partial data.
- Run a controlled test. Connect two test accounts, play a short round, record a kill, death, assist, damage event, and disconnect, then inspect the database. Verify that the Steam IDs, match or session identifier, map, team, weapon, and timestamps are present before adding a public dashboard.
Capture events before calculating metrics
Use separate records for identity, sessions, matches, rounds, events, and aggregates. This is more work than keeping one “player stats” row, but it gives you replayable data and makes corrections possible.
Recommended entities
| Entity | What to store | Why it matters |
|---|---|---|
| Player | Steam ID as the stable key, current display name, and a name-history table | Names change; Steam identity should not. Name history keeps old leaderboards understandable. |
| Server | Unique server name, region if you use one, software/build information, and status | Lets a shared database distinguish identical player activity on different machines. |
| Match or session | Server, map, start/end timestamps, mode, and an idempotent match identifier | Prevents reconnects or plugin restarts from merging unrelated games. |
| Round | Round number, teams, start/end, winner, completion state, and warmup flag | Defines the denominator for ADR and win rate and excludes incomplete rounds consistently. |
| Player session | Connect time, disconnect time, reconnects, and match association | Provides defensible playtime and identifies abandoned sessions. |
| Event | Timestamp, event type, actor, victim or target, team, weapon, damage, headshot flag, objective, and source match/round IDs | Immutable facts can be replayed into new aggregate definitions. |
| Aggregate | Per-player, per-match, per-map, and all-time totals with the filter version used | Fast dashboards do not need to scan every event, while versioning explains later changes. |
At minimum, capture connection and disconnection, map and round transitions, team changes, kills, deaths, assists, damage, weapon, headshots, bomb or other objective events, and whether a round was warmup or competitive. Include the server and match identifiers on every event so a duplicate delivery can be rejected safely.
Use immutable writes and idempotency
Write an event with a unique key composed from the match, round, event sequence or timestamp, actor, and event type. If the plugin retries after a database timeout, an upsert should not create a second kill. Store the raw payload or the complete event columns before updating a summary row. A scheduled job or database view can then rebuild aggregates after a bug fix.
Rank #2
- 5-in-1 USB-C Hub: Experience comprehensive connectivity featuring a Power Delivery input, two USB-A 2.0 ports, a USB-A 3.0 port, and an HDMI port. (Note: The USB-C power delivery input port is only for connecting an external wall charger to power your laptop and cannot power peripheral devices.)
- 90W Pass-Through Charging: Achieve optimal charging with 90W pass-through power to your laptop, supported by a total input of 100W, with the hub reserving 10W for operational efficiency. (Note: Wall charger not included.)
- Quick Data Transfers: Accelerate your productivity with rapid data transfers using a high-speed 5Gbps USB 3.0 port and two 480Mbps USB 2.0 ports.
- 4K HDMI Display: Enhance your visual experience with a hub capable of delivering 4K resolution at 30Hz in both mirror and extend modes. Please note that this hub is compatible with MacBook (macOS 12 and newer), Windows 10 and 11, ChromeOS, and laptops equipped with DP Alt Mode and Power Delivery. Note: This device is not compatible with Linux.
- What You Get: Anker USB-C Hub (5-in-1, 4K HDMI), welcome guide, 18-month warranty, and our friendly customer service.
Do not count a player as active merely because the server sent a heartbeat. Start a session on a confirmed connection, close it on disconnect, and reconcile an unclosed session at match end or after a timeout. When a player reconnects, close the old interval and open a new one rather than extending through an unknown gap.
The Tool Desk
Outbyte Driver Updater FREEScan for outdated or missing drivers - takes under a minuteDriver Scan →Outbyte PC Repair FREEClear out junk files and repair common Windows errorsFree Scan →Define K/D/A, ADR, and win rate so the numbers are reproducible
A label such as “K/D” is not a definition. Publish the denominator and filters beside every statistic, especially when warmup, bots, abandoned rounds, or forfeits are possible.
| Metric | Definition | Decisions you must document |
|---|---|---|
| K/D | Kills divided by deaths | Choose a zero-death rule. A common display is kills when deaths are zero, while retaining a separate “deaths = 0” flag instead of claiming an infinite ratio. |
| K/D/A | Show kills, deaths, and assists as separate totals; if you use a ratio, state the exact formula | Decide whether assists from every mode count and whether team damage or cancelled events are excluded. |
| ADR | Total damage divided by rounds played | Count completed competitive rounds only, or explicitly include another class. Do not divide by matches or by connected minutes. |
| Headshot percentage | Headshot kills divided by total kills | Define the zero-kill display and ensure a headshot event is attached to the final kill, not merely a prior hit. |
| Win rate | Rounds won divided by completed rounds, or matches won divided by completed matches | Pick rounds or matches, identify the team at the time of the result, and exclude warmup and abandoned results consistently. |
| Playtime | Sum of reconciled active session duration | State how reconnects, pauses, map changes, spectators, and idle time are handled. |
Store numerator and denominator columns with aggregates. A dashboard that displays “62% win rate” without showing whether that means 31 of 50 rounds or 5 of 8 matches is difficult to audit and easy to misinterpret.
Use MySQL for shared history and dashboards
A MySQL-backed design is appropriate when several servers feed one leaderboard or when you plan a website, API, or player profile page. Give each server a unique name and keep that value in every match row. Automatic table creation and schema migrations can speed installation, but treat them as implementation conveniences rather than a Valve-supported standard.
Separate ingestion from presentation
- Ingestion worker: receives plugin events, validates Steam IDs and match identifiers, and inserts immutable rows.
- Normalization layer: resolves reconnects, maps event names to your internal vocabulary, and marks warmup, bot, and abandoned records.
- Aggregation job: runs after a round or match closes, calculates totals and denominators, and records the definition version.
- Read API or views: exposes only the fields a dashboard needs, with pagination and server or date filters.
- Dashboard: reads aggregates for speed and links to event-level detail only for administrators.
Never put database credentials in a browser bundle, overlay scene, or client-side JavaScript. The browser should call a small authenticated API, and that API should enforce which servers, dates, and player records a user may see.
Rank #3
- Sleek 7-in-1 USB-C Hub: Features an HDMI port, two USB-A 3.0 ports, and a USB-C data port, each providing 5Gbps transfer speeds. It also includes a USB-C PD input port for charging up to 100W and dual SD and TF card slots, all in a compact design.
- Flawless 4K@60Hz Video with HDMI: Delivers exceptional clarity and smoothness with its 4K@60Hz HDMI port, making it ideal for high-definition presentations and entertainment. (Note: Only the HDMI port supports video projection; the USB-C port is for data transfer only.)
- Double Up on Efficiency: The two USB-A 3.0 ports and a USB-C port support a fast 5Gbps data rate, significantly boosting your transfer speeds and improving productivity.
- Fast and Reliable 85W Charging: Offers high-capacity, speedy charging for laptops up to 85W, so you spend less time tethered to an outlet and more time being productive.
- What You Get: Anker USB-C Hub (7-in-1), welcome guide, 18-month warranty, and our friendly customer service.
Send live CS2 data to an overlay with Game State Integration
What GSI can provide
CS2 can send HTTP POST requests containing JSON to an endpoint selected in a Game State Integration configuration. Depending on the requested sections and current game state, payloads can include map, round, player_id, player_match_stats, player_state, player_weapons, allplayers_*, bomb, and phase countdowns.
A consumer can transform those payloads into a web panel, an OBS-style browser source, a scoreboard, or an operator alert. The payload is a snapshot, not a guaranteed event ledger: sections may be absent, requests can fail, and the game can reconnect without replaying every event that occurred while the endpoint was unavailable.
Reliable GSI workflow
- Create a private receiver. Accept POST requests over an authenticated and encrypted connection where possible. Reject oversized or malformed JSON and return a fast success response so the game is not held up by slow dashboard work.
- Validate the sender. Use a shared token or another authentication mechanism supported by your integration. Do not expose a database connection string in the GSI configuration.
- Normalize snapshots. Attach a server, map, match, and receive timestamp to each payload. Treat repeated snapshots as normal and deduplicate them using a hash or state sequence.
- Render transient state. Use the latest valid snapshot for player panels, bomb status, phase countdowns, and team displays. Keep rendering separate from persistence so an overlay crash does not stop storage.
- Persist only what you need for replay. If historical playback matters, store the payload or extracted state with retention and compression rules. Otherwise, GSI should remain a presentation feed while the plugin supplies authoritative totals.
- Monitor gaps. Record request failures, response times, reconnects, and stale-state age. Display a clear “data delayed” state instead of showing old values as live.
Why GSI should not be your only history source
GSI heartbeats do not prove that every kill, damage event, or disconnect was observed. Dropped requests, endpoint downtime, reconnects, and payloads with missing event sections create gaps. A server plugin can capture the event at its origin and write it idempotently; GSI can then read the resulting totals or provide the visual state that a stream needs.
Understand the Steamworks server-stat route
Valve documents GetGameServerPlayerStatsForGame for server-stat retrieval and writing. The method requires a publisher Web API key, game and application IDs, and a date range. It must run from a secure server and must never be called directly by a client.
What’s actually slowing this PC down?
Pick the symptom - the matching free tool is one click away.
The method has an important timing limitation: game-server stat writes are limited to users currently playing, with only a short grace period after they leave. Waiting until a round or match ends can therefore miss a player who disconnected earlier. Continuous capture while players are active is safer than treating the API as a final end-of-match export.
Rank #4
- Dual Converters, Infinite Potential:Includes 2× USB C male to USB A female adapters and 2× USB A male to USB C female adapters. Perfect for a wide range of uses—tablets with Bluetooth keyboards, expand USB ports on macbook, and more. Two different converters for all your daily needs
- Next-Level 10Gbps & 3A Charging: No more slow 480Mbps, this usb to usb c adapter has a transfer speed of up to 10Gbps, allowing you to do more transferring in less time. This usb adapter fits both USB A and USB C charger, supporting up to 3A fast charging
- Upgraded Exquisite Craftsmanship: With an aluminum alloy housing and metal connector, the usbc to usb adapter is extremely durable and sturdy. Rigorously tested to withstand more than 10,000 times of plugging and unplugging, ensuring long-lasting performance
- Broad Compatible: The usb c to usb adapter widely supports all USB C/ USB A devices like laptops, tablets, cellphones, car chargers, and phone chargers. Such as compatible with MacBook Pro/Air 2023/2022, Thunderbolt 4/3 Devices,Apple MagSafe Watch 9/8/7/SE/Ultra, iPad Pro 2022/2021, Samsung Galaxy S23/S20/S10, and iPhone 17/16/15 Pro. Plug and play
- Please Note: To reach 10Gbps speed, keep the cable under 3.3 ft. For USB A Male to USB C adapters, try flipping the USB C connector. USB C Male to USB A adapters support bidirectional 10Gbps transfer within 3.3 ft
Use this route when your deployment already meets Valve’s authentication and security model and you need its integration. For a community leaderboard that must survive disconnects, plugin-side event storage remains the more controllable foundation.
Independent reader supportYour contribution helps us test, update, and keep practical guides available for everyone.Design the dashboard around the question a player is asking
Expose the filters that explain a number rather than presenting one unexplained lifetime total.
Recommended Free Tools
- Scope: all servers, one server, one map, one match, or a custom date range.
- Eligibility: competitive rounds only, minimum rounds played, and whether bots or spectators are excluded.
- Identity: Steam ID as the key, with the current name and prior names shown for recognition.
- Totals: kills, deaths, assists, damage, headshots, rounds won, rounds played, and reconciled playtime.
- Rates: K/D, ADR, headshot percentage, and win rate with visible numerator and denominator.
- Freshness: last event time, last completed aggregation, and an indicator when the live feed is stale.
For a public leaderboard, cache aggregate queries and paginate results. For administrators, provide an event-level view that can explain a disputed kill or a session gap without exposing passwords, Web API keys, or internal host details.
Plan for CS2 updates and plugin breakage
Game updates can change event names, schemas, binaries, and query behavior. Pin versions that you have tested, keep a rollback copy, and monitor startup and runtime logs after every CS2 update. CounterStrikeSharp plugins that depend on a changed schema may load incorrectly or stop receiving an event without an obvious database error.
SourceMod’s statistics page notes that an engine change made CS:GO servers unavailable to its query inclusion. That observation is a useful warning for CS2 operators: third-party query and statistics assumptions can become invalid after an engine update. It is not a measurement of your server’s population or a guarantee that a particular plugin will continue to work.
Best Value
- 5-in-1 Connectivity: Equipped with a 4K HDMI port, a 5 Gbps USB-C data port, two 5 Gbps USB-A ports, and a USB C 100W PD-IN port. Note: The USB C 100W PD-IN port supports only charging and does not support data transfer devices such as headphones or speakers.
- Powerful Pass-Through Charging: Supports up to 85W pass-through charging so you can power up your laptop while you use the hub. Note: Pass-through charging requires a charger (not included). Note: To achieve full power for iPad, we recommend using a 45W wall charger.
- Transfer Files in Seconds: Move files to and from your laptop at speeds of up to 5 Gbps via the USB-C and USB-A data ports. Note: The USB C 5Gbps Data port does not support video output.
- HD Display: Connect to the HDMI port to stream or mirror content to an external monitor in resolutions of up to 4K@30Hz. Note: The USB-C ports do not support video output.
- What You Get: Anker 332 USB-C Hub (5-in-1), welcome guide, our worry-free 18-month warranty, and friendly customer service.
A live page captured on October 14, 2026, listed 8,966 servers and 27,245 players on SourceMod’s service. Those figures describe that page at that time, not the number of players your CS2 server has served and not a benchmark for your collector.
Do these 3 things before closing this tab:
1Repair Windows errors before they cause bigger problems2Scan for outdated or missing drivers - takes under a minute3Clear out junk files and repair common Windows errorsUpgrade checklist
- Back up the database and plugin directory before updating.
- Check the plugin and CounterStrikeSharp release notes for the exact CS2 build.
- Run
meta listand confirm the CounterStrikeSharp core plugin loads. - Join with test accounts and verify a kill, death, damage, round result, reconnect, and map change.
- Compare raw event counts with aggregate totals before reopening the server to the public.
- Keep a queue or retry path for temporary database outages, but cap retries so one outage does not create duplicates.
Troubleshoot the common failure modes
“meta list” is unknown or Metamod is missing
The loader is not installed in the active CS2 game directory, or the files do not match the server build. Recheck the directory, restore the backup if the server is unstable, and verify the loader before troubleshooting CounterStrikeSharp.
CounterStrikeSharp loads but the statistics plugin does not
Look for a runtime mismatch, a missing dependency, an incorrect plugin path, or a configuration parse error. Confirm that the plugin is under game/csgo/addons/counterstrikesharp/plugins, then restart and read the first error rather than the later cascade of failures.
Rows are missing after a database restart
Inspect the plugin’s connection and retry logs, then check whether the collector queues failed writes. Reconcile the affected match from raw server logs if available. Add a unique event key and idempotent retry before trusting the system again.
K/D or ADR looks inflated
Check for duplicate retries, warmup events, bots, team kills, and rounds that were counted more than once. Compare the aggregate numerator and denominator to event-level rows for one controlled match.
Quick wins for a faster PC:
Scan for outdated or missing drivers - takes under a minuteDriver Scan →Repair Windows errors before they cause bigger problemsFix Now →Fix the driver behind crashes, sound loss and screen glitchesFind Drivers →Playtime continues after a player leaves
Find sessions without a disconnect timestamp and close them at the server’s last confirmed activity or match end according to a documented timeout rule. Reconnects should create separate intervals, not silently bridge an unknown period.
The overlay is frozen while the server is still running
Check receiver health, authentication, HTTP response times, firewall rules, and stale-state age. A live overlay should show the last update time and a delayed-data warning. Do not repair the display by inventing values from the previous snapshot.
A practical rollout sequence
- Deploy Metamod:Source and CounterStrikeSharp on a staging server.
- Install the statistics plugin and confirm a controlled match produces complete raw rows.
- Define and document denominators, warmup and bot filters, zero-death handling, and reconnect rules.
- Move ingestion to MySQL if you need cross-server history, then test migrations and backups.
- Build aggregate views or scheduled jobs and validate them against hand-counted test rounds.
- Add a protected API and dashboard for historical data.
- Add GSI for live presentation, with monitoring for dropped requests and stale state.
- Re-test the whole path after every CS2, runtime, or plugin update.
This sequence keeps the critical path—capturing what happened on the server—independent from optional web and broadcast features. It also gives you a recovery path: if the overlay fails, the database still contains the events needed to rebuild player statistics.
Quick Recap
Product prices and availability are accurate as of the date/time indicated and are subject to change. Any price and availability information displayed on Amazon at the time of purchase will apply.




