[Question] How to get player Steam IDs at match start (without violating Steam TOS)?

rimzottv

New member
Hi everyone!

I need to retrieve Steam IDs (SteamID64 or SteamID3/AccountID) for all 12 players in a lobby when a match starts. Looking for legitimate methods only - no memory reading, no network traffic sniffing, full Steam TOS compliance.

What I've tried:

  1. Panorama UI mod - Created a mod that reads the TopBar player panels through DOM traversal. Successfully extracted player nicknames from the PlayerNameNWContainer elements, but hit a wall with Steam IDs:
    • All Steam ID related attributes (steamid, accountid, playerid) return null when queried
    • Standard Dota 2 global API objects (Game, Players, Entities, GameUI) are completely undefined in Deadlock
    • Even hero names are inaccessible - the HeroImage panels don't expose their texture sources or any identifying properties
  2. Event listeners - Attempted to register handlers for various game events using RegisterForUnhandledEvent, hoping to catch player connection or match start events that might contain player data, but couldn't find any working event names
What I'm looking for:

Are there any official Source engine methods to get Steam IDs through:

  • Panorama API calls or panel methods I haven't discovered yet?
  • Client-side files that get written or updated when a match starts (replay files, cached lobby data, console logs)?
  • Console commands or ConVars that expose player information?
  • Any documented modding APIs specific to Deadlock that differ from Dota 2?
The goal is simple: identify all 12 players in the lobby when the match begins using only legitimate, TOS-compliant methods.
 
the game uses "recently played with" system, which might makes things easier to deal with.

1766864792003.png

as soon the match starts and you join in, all players in the match will be in this section of steam, which you can probably do as many things to get their profile easily through this. You might use steamworks API for some calls maybe, idk if works
 
the game uses "recently played with" system, which might makes things easier to deal with.

View attachment 72888

as soon the match starts and you join in, all players in the match will be in this section of steam, which you can probably do as many things to get their profile easily through this. You might use steamworks API for some calls maybe, idk if works
if this method doesnt works you might try to check how stats websites gets the player match id and view the players profiles. That way you can also check other player profiles matchs
 
the game uses "recently played with" system, which might makes things easier to deal with.

View attachment 72888

as soon the match starts and you join in, all players in the match will be in this section of steam, which you can probably do as many things to get their profile easily through this. You might use steamworks API for some calls maybe, idk if works
Doesn't this information appear AFTER the match? My goal is to get steam ids AT THE BEGINNING OF the match
 
the game uses "recently played with" system, which might makes things easier to deal with.

View attachment 72888

as soon the match starts and you join in, all players in the match will be in this section of steam, which you can probably do as many things to get their profile easily through this. You might use steamworks API for some calls maybe, idk if works
And also this method will not give the ids of the players from the observed match.
 
Doesn't this information appear AFTER the match? My goal is to get steam ids AT THE BEGINNING OF the match
nope it appears as soon you join the match. If you want to get from an observed match then you might try the way stats websites does it. you get the matchid and by the id you get the player list and profiles, which its in some way the websites does it
 
nope it appears as soon you join the match. If you want to get from an observed match then you might try the way stats websites does it. you get the matchid and by the id you get the player list and profiles, which its in some way the websites does it
Which website are you talking about? I know of one API that has an endpoint for retrieving data about ongoing matches, but it’s limited to only the top 200 matches. I’d like to be able to get data for all matches. Even then, matches appear in that list and become available only a few minutes after they start.


The same API developer also provides a service that can read a live data stream for a match, but first:
A) you need to attach a spectator to that match, which is limited by rate limits, and
B) you have to deploy and run a separate service.


This approach doesn’t involve waiting several minutes to get the data, but it can still take up to about a minute from the match start, which is also “not immediate.”
 
you can send friend invite from within the game right at the start, so there must be some way how to get those IDs.
I’ve looked quite deeply into both of these ideas, so I want to clarify what’s actually happening under the hood.


Friend invite / profile opening at match start does not imply SteamIDs are available to Panorama or mods.
In Deadlock, Panorama UI does not receive SteamID, AccountID, or profile URLs at any point. I verified this by:
  • full DOM traversal of pause menu / scoreboard panels
  • inspecting all panel attributes and events
  • enumerating all available Panorama globals (Game, Players, Entities, etc. are not exposed at all in Deadlock)

The UI only passes a player slot / connection index to the engine. The actual SteamID is resolved internally by Source 2 C++ code and forwarded directly to Steamworks (e.g. ISteamFriends) for actions like Open Profile or Send Friend Request. The ID is never surfaced back to UI scripts.


Same story for “Recently Played With”:
  • it’s populated by the Steam client via Steamworks networking/session data
  • it is not written to game files
  • it is not accessible via Panorama
  • it is not exposed via Steam Web API

Even if it appears immediately after joining a match, it’s still a Steam-side feature, not something the game exposes to mods or scripts.


Regarding stats websites: they rely on backend services (match IDs, delayed APIs, or spectator pipelines). Those approaches are either delayed, limited, or require external services — none provide immediate, local, in-game access to SteamIDs at match start.


Conclusion:
As far as I can tell after testing all known avenues, there is currently no legitimate, TOS-compliant way to obtain SteamID64 / AccountID for all players at match start from within Deadlock itself (UI mods, client files, console commands, or Panorama APIs).


If someone has evidence of a method that actually exposes SteamIDs to client-side code (not just engine callbacks), I’d be very interested to see concrete details.
 
Back
Top