SkinsMonkeySkinRave

SteamAnalyst API

Cross-market pricing for CS2 and Dota 2 items, as JSON. The same numbers this site runs on.

Every price on steamanalyst.com comes from the same pipeline the API serves: Steam Community Market history, our manipulation checks, and live asks from 40+ third-party markets. The API is a REST service at api.steamanalyst.com, answers plain JSON, and has a free tier you can use in a minute with a Steam login.

What you get

A fair price, not a listing

Steam's own numbers are missing for thousands of items and wrong on rare knives. Our price compares the live markets and discounts manipulated ones.

71,000+ items, two games

41,000 CS2 items including knives, gloves, stickers, cases, agents and Doppler phases, and 30,000 Dota 2 items.

40+ markets compared

The lowest ask on BUFF, CSFloat, Skinport, DMarket, CS.MONEY, Tradeit, Bitskins, Skinbaron and sixteen more, refreshed every five minutes.

Built for polling

The catalogue regenerates every 30 minutes. ETag and 304 support means a poll that finds nothing new costs you no download.

Tiers

Free

$0 / month

One item at a time. Bots, spreadsheets, side projects.

  • GET /v1/prices — one CS2 item per request
  • Our manipulation-resistant fair price in USD
  • Name suggestions when a lookup misses
  • No credit card

30 requests / min · 100 / day

Get a free key

Enterprise

$200 / month

The market comparison. Marketplaces, arbitrage, price engines.

  • Everything in Basic
  • GET /v3/markets — lowest ask on 40+ markets for every CS2 item
  • BUFF, CSFloat, Skinport, DMarket, CS.MONEY, Tradeit, Bitskins and more
  • Refreshed every 5 minutes

300 requests / min · no daily cap

Upgrade to Enterprise

Ultimate

$300 / month

Order-book depth. Market makers and anyone pricing against real bids.

  • Everything in Enterprise
  • GET /v4/depth/{name} — best bid/ask with counts on 20+ venues, incl. Steam and the Chinese markets
  • Daily sales volume, price history back to 2023 (OHLC), listing counts with deep links
  • Market indices and BUFF float-range price bands
  • Priority support

600 requests / min · no daily cap

Upgrade to Ultimate

Every tier includes everything below it. Have a code? Enter it on the upgrade page and the tier is on your key immediately.

EndpointWhat you getFreeBasicEnterpriseUltimate
GET /v1/prices?market_name=One item, fair price in USD✓✓✓✓
GET /v1/prices/allEvery CS2 item, 7-day Steam average (4 MB)—✓✓✓
GET /v2/{game}Full catalogue: averages, volume, Steam price, fair price—✓✓✓
GET /v2/{game}/{market_name}Extended record: identity, per-wear averages, BUFF and CSFloat asks—✓✓✓
GET /v3/marketsLowest ask on 40+ markets, every CS2 item——✓✓
GET /v4/depth/{market_name}Best bid/ask + counts per venue———✓
GET /v4/sales/{market_name}Daily sold counts, CN trades and turnover———✓
GET /v4/history/{market_name}Fair price, BUFF, CN OHLC per day back to 2023———✓
GET /v4/listings/{market_name}Price, quantity and deep link per market———✓
GET /v4/depth · /v4/listingsBulk, every item, ETag + 304———✓
GET /v4/index · /v4/float-bands/{market_name}Market indices; BUFF float ladder———✓
Rate limitper minute, per key30120300600
Daily caprolling 24 h100———

Your first request

Sign in with Steam on the developer dashboard, generate a key, and send it as a bearer token. The free tier answers one item per request:

cURL – one item
curl -G https://api.steamanalyst.com/v1/prices \
  -H "Authorization: Bearer YOUR_API_KEY" \
  --data-urlencode "market_name=AK-47 | Redline (Field-Tested)"

# { "success": true, "data": { "market_name": "AK-47 | Redline (Field-Tested)", "price": 28.93 } }

The name has to match Steam's market hash name exactly, wear included. Leave the wear off and the 404 carries the wears of that skin as suggestions.

Python – the full CS2 catalogue, polled without re-downloading (basic tier)
import requests

API = "https://api.steamanalyst.com"
headers = {"Authorization": "Bearer YOUR_API_KEY"}

r = requests.get(f"{API}/v2/csgo", headers=headers)
items = r.json()["data"]["results"]          # 41k items, ~4 MB gzipped
etag = r.headers["ETag"]

# Later: ask whether anything changed. 304 = nothing to download.
r = requests.get(f"{API}/v2/csgo", headers={**headers, "If-None-Match": etag})
if r.status_code == 200:
    items = r.json()["data"]["results"]
JavaScript – lowest ask per market (enterprise tier)
const res = await fetch("https://api.steamanalyst.com/v3/markets", {
  headers: { Authorization: "Bearer YOUR_API_KEY" },
});
const { data } = await res.json();
const asks = data.markets_prices["AWP | Asiimov (Field-Tested)"];
// { buff: 10633, csfloat: 10465, skinport: 11183, dmarket: 10656, ... }  integer cents, null = no listing
const cheapest = Object.entries(asks).filter(([, c]) => c).sort((a, b) => a[1] - b[1])[0];

Documentation

The full reference lives with the API itself at api.steamanalyst.com/docs: every endpoint with a real sample response, the field list for each shape, the error codes, rate-limit headers and the caching contract. It is generated from the running service, so it cannot drift from what you get back.

Talk to us

Upgrades, questions, custom volumes

Upgrades are handled by email until self-serve billing lands: send your key prefix and the tier you want and we switch it the same day. Custom volumes, an SLA, or a field you need that is not in the catalogue yet are the same conversation.

Email: [email protected]
Twitter/X: @SteamAnalyst