Skip to content
st

Quick start

Fetch your first records with st.

Once st is on your PATH, fetch a store app. The argument is an appid, a store URL, or anything st ref id can classify:

st app 620

By default you get an aligned table. Ask for JSON when you want to pipe it:

$ st app 620 -o json
[
  {
    "id": "620",
    "name": "Portal 2",
    "type": "game",
    "developers": ["Valve"],
    "publishers": ["Valve"],
    "url": "https://store.steampowered.com/app/620",
    ...
  }
]

st app fetches the store JSON, then folds in the two structured islands the store page carries that the JSON omits: the schema.org rating and the user tag list.

Shape the output

The same flags work on every command:

st app 620 --fields id,name,url       # keep only these columns
st app 620 --template '{{.name}}'     # just the name
st search portal -o jsonl | jq .id    # one object per line, into jq

-o takes table, markdown, json, jsonl, csv, tsv, url, or raw. Left to auto, it prints a table to a terminal and JSONL into a pipe, so the same command reads well by hand and parses cleanly downstream. See output formats for the full contract.

Search the store

search takes a free-text query and returns matching apps, each addressable by its appid:

st search portal                      # matching apps
st search portal -n 5 -o url          # the first five, as URLs
st search portal -o url | head -3 | sed 's#.*/app/##' | xargs -n1 st app

Browse and crawl the catalog

search answers a query; browse enumerates the whole catalog. It pages the same list the store scrolls (around 260,000 apps), so it is the seed for a bulk walk or export. crawl then follows the typed edges a record carries: an app to its DLC, demos, base game, and packages, a package to the apps it bundles, a profile to its most-played apps.

st browse --sort Released_DESC -n 20  # the 20 newest apps
st browse --maxprice free -n 50       # the first 50 free apps
st crawl 620 --depth 2                # the graph two hops out from Portal 2
st crawl gabelogannewell --depth 1    # a profile's most-played apps

Walk one app's graph

Everything below addresses the same appid, so an app and its data line up:

st reviews 620 -n 50                  # user reviews (cursor-paged)
st news 620                           # news and announcements
st players 620                        # the live concurrent player count
st achievements 620                   # global achievement unlock rates
st package 7877                       # a package (sub) with the apps it bundles
st featured                           # the featured store categories' apps
st top-sellers                        # the current top-selling apps
st specials                           # the apps currently on sale

featured flattens every promoted category; top-sellers, new-releases, specials, and coming-soon are the named slices of the same endpoint.

Profiles and the market

st profile gabelogannewell            # a public community profile
st resolve gabelogannewell            # a vanity name to every SteamID form
st market "AK-47 | Redline"           # search the community market
st price 730 "AK-47 | Redline (Field-Tested)"  # one item's lowest, median, volume

Resolve references offline

The ref commands touch no network. They classify any Steam reference, build the URL for a kind and id, and convert a SteamID between its forms:

st ref id https://store.steampowered.com/app/620/Portal_2/   # -> (app, 620)
st ref url app 620                                            # -> the store URL
st ref steamid STEAM_1:0:11101                               # all SteamID forms

Serve it instead

The same operations are available over HTTP and to agents over MCP:

st serve --addr :7777 &
curl -s 'localhost:7777/v1/app/620'   # NDJSON, one record per line
st mcp                                # MCP over stdio

From here, the guides cover the common jobs and the CLI reference lists every command and flag.