Skip to content
CS2Apps

Pillar guide

CS2 Inspect Link Format Explained (Decoder + Gen Codes)

CS2Apps editorial · 10 min read · updated 6d ago

Share

Every CS2 item has a unique inspect link — a steam://rungame URL that opens an in-game preview when you click it. The format encodes enough information for Valve’s servers to look up the exact item (or, in the self-encoded variant, carries the item description in the URL itself). This guide covers the protocol, what decoders actually pull out of an inspect link, what gen codes are for, and how the pieces fit together when you’re trying to identify or replicate a specific skin.

Anatomy of an inspect link

A CS2 inspect link looks like one of three patterns:

steam://rungame/730/76561202255233023/+csgo_econ_action_preview%20S<steamid>A<assetid>D<verifyhash>
steam://rungame/730/76561202255233023/+csgo_econ_action_preview%20M<listingid>A<assetid>D<verifyhash>
steam://rungame/730/76561202255233023/+csgo_econ_action_preview%20<hexpayload>

The leading 730 is the Steam app ID for Counter-Strike. The big number that follows (76561202255233023) is a fake "host" SteamID Valve uses purely for protocol routing — it isn’t tied to any real user. The interesting part is everything after the +csgo_econ_action_preview command, which comes in three flavours.

The three link types

1. Owner-bound (“S” links)

Format: S<steamid64>A<assetid>D<verifyhash>. The link points at a specific item in a specific player’s Steam inventory. To resolve it, Valve’s GC (Game Coordinator) looks up assetid X in player Y’s inventory and returns the item data. The D parameter is a verification hash that prevents you from guessing inventories that don’t exist — the GC rejects mismatched hashes.

These are what you get when you right-click a friend’s inventory item and copy the inspect link. They break if the owner trades the item away (the asset ID becomes invalid).

2. Market-bound (“M” links)

Format: M<listingid>A<assetid>D<verifyhash>. Points at an active Steam Market listing instead of a private inventory. These are what Steam Market exposes when you click "Inspect in game" on a listing page. They break the moment the listing sells or is delisted.

3. Self-encoded (hex payload)

Format: a long uppercase hex string after the command. The payload is a serialised CEconItemPreviewDataBlock protobuf containing every relevant field directly — paint kit, float, seed, stickers, keychain, custom name, low/high rank. No server round-trip needed; the CS2 client renders the preview from the payload alone.

Self-encoded links are what skin-changer plugins and gen-code generators emit. They’re also what a decoder shows you when you paste any S/M link — once Valve’s GC resolves the link, the response is the same protobuf, just delivered via the GC instead of inline.

What a decoder extracts

The protobuf carries roughly a dozen fields that the in-game renderer uses. The ones worth caring about for trading, pattern hunting, and lookup:

Our decoder

The cs2apps.com/inspect/ decoder runs the official @csfloat/cs2-inspect-serializer protobuf library entirely in your browser. Paste any inspect link (S, M, or hex) and it extracts every field above. Zero API calls — the parse is fully local. Useful when you want to look up a pattern index without exposing the link to a third-party site.

For S and M links the decoder shows you the parsed owner/listing routing without resolving the actual item (resolution requires the Steam GC, which would mean an API call). Self-encoded hex links resolve fully locally.

Gen codes — what they are and aren’t

On community CS2 servers (often surf, KZ, retake, or DM servers) admins frequently install skin-changer plugins that let players preview or apply any skin to their inventory for that server session only. Real Steam inventory isn’t touched; the skin only renders on that server. Common plugins: WeaponPaints, AcsLoader, CS2 SkinChanger.

Each plugin takes a different chat-command syntax to apply a skin. WeaponPaints uses something like !ws ak 282 0.01 661 (weapon code, paint index, float, seed). AcsLoader uses !skin ak47 282 0.01 661. SkinChanger uses !apply weapon_ak47 282 0.01 661. A gen-code generator like ours produces all the variants in parallel so you can paste whichever the server expects.

Use cases

  1. Pattern hunting. Decode an inspect link to read the paint_seed and cross-reference it against a pattern database. Is this Case Hardened a tier-1 blue gem? Which Marble Fade tier is this seed?
  2. Float verification. Listed-for-sale floats sometimes don’t match the actual item — Steam Market shows the bucket but not the decimal. Decoding the inspect link before buying tells you the precise float you’d receive.
  3. Sticker rarity. Identify which stickers are applied at which slots and how scratched they are. Useful when buying for craft potential.
  4. Plugin server testing. Generate a gen code for an inspect link so you can preview an expensive skin on a community server without owning it.

What an inspect link can’t do

Inspect links are read-only. They can’t transfer ownership, trigger trades, log you into Steam, or do anything to your account. The steam:// protocol is a one-way command from your browser to your local Steam client — and the only command being issued is "render this item preview." Even sketchy-looking links are inert. Paste freely.

See also


Found something wrong, biased, or out-of-date? Reach the editorial desk via the corrections process.

← Back to all guides