Get CS2 skin prices in Node.js and TypeScript
Skinstrack publishes an official TypeScript SDK on npm. It wraps every v1 and v2 endpoint, ships full types, has zero runtime dependencies and runs in Node.js, Deno, browsers and edge runtimes like Cloudflare Workers.
- Stack
- Node.js 18+, TypeScript
- Plan
- Free and paid
- Data
- 34+ marketplaces, refreshed ~15 min
- 1
Get a free Skinstrack API key
Sign in with Steam on skinstrack.com and create a key in the dashboard. The free plan gives 50 requests a month on Steam prices with no card. Paid plans from $24.99 a month unlock all 34+ marketplaces. Keep the key in an environment variable, never in source code.
terminalbashexport SKINSTRACK_API_KEY=your-api-key - 2
Install the SDK
The package is called skinstrack. The v2 client is the one to use for new projects.
terminalbashnpm install skinstrack - 3
Find the cheapest market for a skin
getItem returns the item with one price per marketplace. Sort by price to find where it is cheapest right now.
cheapest.tstsimport { SkinstracksV2 } from "skinstrack/v2"; const client = new SkinstracksV2({ apiKey: process.env.SKINSTRACK_API_KEY! }); const item = await client.getItem("AK-47 | Redline (Field-Tested)"); const [cheapest] = [...item.prices].sort((a, b) => a.price - b.price); console.log(`${item.market_hash_name}: $${cheapest.price} on ${cheapest.provider}`); - 4
Price history, search and alerts
The same client covers daily price history, search, trending items and price alerts delivered by email, Discord or Telegram.
more.tstsconst history = await client.getItemHistory("AK-47 | Redline (Field-Tested)", { period: "30d", provider: "csfloat", }); console.log(`${history.points.length} daily points`); const results = await client.search("Dragon Lore"); await client.createAlert({ item_slug: "ak-47-redline-field-tested", price: 10, direction: "below", notification_method: "email", }); - 5
Handle errors
Every HTTP error maps to a typed class exported from the package root.
errors.tstsimport { NotFoundError, RateLimitError, UnauthorizedError } from "skinstrack"; try { await client.getItem("AK-47 | Redline (Field-Tested)"); } catch (error) { if (error instanceof UnauthorizedError) console.error("Invalid API key"); else if (error instanceof RateLimitError) console.error("Monthly quota reached"); else if (error instanceof NotFoundError) console.error("Unknown item"); else throw error; }
Example response
Shortened response from /v2/paid/item/{itemName}. Field names are snake_case and every marketplace price has its own updated_at. Full schemas are in the Skinstrack API docs.
{
"market_hash_name": "AK-47 | Redline (Field-Tested)",
"slug": "ak-47-redline-field-tested",
"wear_name": "Field-Tested",
"rarity_name": "Classified",
"skinstrack_url": "https://skinstrack.com/item/ak-47-redline?variant=field-tested",
"liquidity": 85,
"currency": "USD",
"price_changes": { "1d": 0.5, "7d": 2.3, "30d": 5.4 },
"prices": [
{
"price": 12.5,
"count": 150,
"volume": 0,
"meta": {},
"provider": "csfloat",
"updated_at": "2026-10-02T10:30:00Z"
},
{
"price": 11.9,
"count": 420,
"volume": 0,
"meta": {},
"provider": "buff163",
"updated_at": "2026-10-02T10:24:00Z"
}
]
}Ready to run it?
Get a Skinstrack API key in a minute. Free tier: 50 requests per month on Steam prices, no card required.