Known Flaws
What we know is wrong, missing or easy to trip over in the published data, and how to work around it. When a flaw is fixed, the fix and its date go in the changelog.
Matches uploaded by hand
A match a user uploads by hand has platform unknown, and its
match_date is when it was processed, not when it was played.
Since 2026-10-08 that includes many FACEIT matches. Tell them apart by
header.server_name, which begins FACEIT.com for a match played on a FACEIT
server.
Linking players across matches
Player identities are replaced in each match, but player fingerprinting can link some players across matches, as a thesis on identifying Counter-Strike players by their mouse movement in demos shows. Such a link ties matches to the same unknown player; it doesn't reveal who they are, and trying to find out is not permitted by the license agreement.
Item names and codes in item_equip
item_equiphas no item code: CS2's equip event doesn't carry one.item_equip.def_indexwas 0 on every row, and matches processed since 2026-10-05 don't have the column.item_pickup.def_indexcarries the code.- The short item names in
item_equipanditem_pickupare shared between weapons that use the same slot:hkp2000is both the P2000 and the USP-S,m4a1both the M4A4 and the M4A1-S,mp7both the MP7 and the MP5-SD, anddeagleboth the Desert Eagle and the R8 Revolver. Use an item code where the row has one.item_droppedandworld_item_vectoruse display names such asAK-47instead.
Duplicate matches
A match's id is created each time a demo is processed, so a demo processed
twice, for example one uploaded by two users, appears twice with different
ids. Find them by comparing the header entries that describe the match itself,
not its processing (such as when it was processed, or by which versions).
Empty channels
- Servers that restrict what their recording broadcasts, as tournament
servers do, leave
player_blind,player_footstep,item_equipandweapon_actionempty; the rest of the match is complete. player_inputsandplayer_soundare empty in most matches, because most demos don't carry those events. The index object marks a channel whose events the demo didn't carry withavailable: false.player_vectorandplayer_statushave rows only for living players.
Missing values
- Older matches from FACEIT are missing player ranks.
- Within a match, events can be missing. This is rare, but can upset some calculations; skipping the match is usually enough.
Changes across the retained window
- The channel set changed. Revisions through 2026-08-02 carry 30 channels
rather than 42, and the 2026-08-03 revision holds a mix. Fourteen channels
were added:
bullet_damage,grenade_bounce,grenade_vector,item_dropped,item_refund,molotov_fire,player_chat,player_connect,player_inputs,player_sound,rank_update,score_update,team_changeandworld_item_vector. Two were removed:item_removeandplayer_action. Read each match'scsdsindex object rather than assuming a fixed channel list. player_vectorstores fewer columns. Since 2026-10-06 it no longer stores its ten derived columns; compute them on load, as the spec describes.- Older matches were processed by older versions of the pipeline. The
changelog lists every change, and
header.rushb_versionandheader.ppp_versionsay which versions built a match.