Skinstrack APIskinstrack.com ↗
Get live CS2 skin prices across 34+ marketplaces, listing counts, price history, and liquidity scores for every weapon skin, case, and sticker via the Skinstrack API.
What is the Skinstrack API?
The Skinstrack API covers three endpoints that return live CS2 item pricing data across 34+ marketplaces including Buff163, CSFloat, Skinport, and Steam. Use search_items to find exact item variants by name — each wear grade, StatTrak, and Souvenir version is a separate row — then pass the returned slug to get_item_prices for a per-marketplace price breakdown or to get_price_history for roughly 340 days of daily lowest-ask data.
curl -X GET 'https://api.parse.bot/scraper/14666682-d87d-4339-9d48-ff39548318db/search_items?query=AWP+%7C+Asiimov' \ -H 'X-API-Key: $PARSE_API_KEY'
Search Skinstrack's item catalog by name. Returns one row per tradable item variant (each wear grade, StatTrak and Souvenir version is its own row) with its slug, the exact Steam market hash name, item type, wear, rarity, the current lowest ask across all marketplaces in USD and the total number of listings. The site returns a single ranked result set (typically up to ~10 rows) with no pagination. An unmatched query returns an empty items list. Prices are USD. The slug is the key for get_item_prices and get_price_history.
| Param | Type | Description |
|---|---|---|
| queryrequired | string | Free-text item name, e.g. 'AWP | Asiimov' or 'Kilowatt Case'. Partial names work. |
{
"type": "object",
"fields": {
"count": "number of rows returned",
"items": "array of matching item variants",
"query": "the search text that was submitted",
"items[].slug": "stable item identifier accepted by get_item_prices and get_price_history",
"items[].type": "item class as reported by the site (e.g. 'item' for weapon skins, 'case')",
"items[].listings": "total number of live listings across marketplaces",
"items[].wear_name": "wear grade, or null for items without wear such as cases",
"items[].rarity_name": "rarity tier label",
"items[].lowest_price_usd": "lowest current ask across all marketplaces in USD; null when no marketplace has an offer",
"items[].market_hash_name": "exact Steam market hash name including wear in parentheses"
},
"sample": {
"data": {
"count": 2,
"items": [
{
"slug": "awp-asiimov-field-tested",
"type": "item",
"listings": 12748,
"wear_name": "Field-Tested",
"rarity_name": "Covert",
"lowest_price_usd": 100.86,
"market_hash_name": "AWP | Asiimov (Field-Tested)"
},
{
"slug": "stattrak-awp-asiimov-field-tested",
"type": "item",
"listings": 2172,
"wear_name": "Field-Tested",
"rarity_name": "Covert",
"lowest_price_usd": 216.46,
"market_hash_name": "StatTrak™ AWP | Asiimov (Field-Tested)"
}
],
"query": "AWP | Asiimov"
},
"status": "success"
}
}About the Skinstrack API
Item Search and Catalog
search_items accepts a free-text query parameter — partial names work, so 'AWP' returns all AWP variants — and returns an array of item objects. Each entry includes market_hash_name (the exact Steam identifier including wear in parentheses), wear_name, rarity_name, type ('item' for weapon skins, 'case' for cases, and so on), a live listings count summed across all marketplaces, and lowest_price_usd reflecting the current cheapest ask. The slug field on each row is the stable hyphenated identifier used by the other two endpoints.
Live Marketplace Price Comparison
get_item_prices takes a slug and returns a marketplaces array sorted ascending by price, so index 0 is always the cheapest current offer. The response also includes liquidity_pct (a 0–100 score), median_7d_usd, average_7d_usd, median_14d_usd, median_30d_usd, total_listings, and percentage price changes over six windows: 1d, 7d, 14d, 30d, 60d, and 90d. Steam is present as marketplace provider 'steam' when it has an offer. In testing the marketplaces array covered 24 distinct sources for a single item.
Price History
get_price_history returns a points array of daily lowest-ask values, oldest first, each with price_usd and timestamp_ms (UTC epoch milliseconds). The final point carries the current live reading rather than a midnight timestamp. Points where the site had no data are gap-filled from the previous day's value and flagged with filled: true, so consumers can filter those out when computing metrics that require observed prices only.
The Skinstrack API is a managed, monitored endpoint for skinstrack.com — not a raw scraper you maintain. Every endpoint is automatically health-checked on a schedule, and when skinstrack.com changes and a check fails, the API is automatically queued for repair and re-verified. It is built to keep working as the site underneath it changes.
This isn't an official skinstrack.com API — it's an independent, maintained REST wrapper over public data. Where the source has no official API (or only a limited one), Parse gives you a stable contract over a source that never promised one, and keeps it current. Need a new endpoint or field? You can revise it yourself in plain English and the agent rebuilds it against the live site in minutes — contributing the change back to the shared API is free.
Will this API break when the source site changes?+
Is this an official API from the source site?+
Can I fix or extend this API myself if I need a new endpoint or field?+
What happens if I call an endpoint that has an issue?+
- Track whether a specific AWP skin is cheaper on Buff163 or CSFloat today using
get_item_pricesmarketplace entries - Build a price-drop alert by polling
lowest_price_usdfromsearch_itemsand comparing against a stored threshold - Chart 12 months of daily lowest-ask trends for any CS2 case using
get_price_historytimestamps and prices - Identify arbitrage gaps between marketplaces by comparing ascending
marketplacesprices fromget_item_prices - Filter out illiquid items in a portfolio tool using
liquidity_pctandtotal_listingsfromget_item_prices - Compute rolling median price ratios using
median_7d_usdvsmedian_30d_usdto detect short-term price spikes - Enumerate all wear grades of a skin family by querying
search_itemsand grouping results bywear_name
| Tier | Price | Credits/month | Rate limit |
|---|---|---|---|
| Free | $0/mo | 200 | 5 req/min |
| Hobby | $30/mo | 1,000 | 20 req/min |
| Developer | $100/mo | 5,000 | 100 req/min |
| Team | $300/mo | 20,000 | 300 req/min |
| Company | $1,000/mo | 100,000 | 500 req/min |
Each endpoint has a fixed posted price per successful call — most fall between 1 and 10 credits — shown on this API's page before you run it. Exceeding the rate limit returns a 429 response. Authenticate with the X-API-Key header.
Does Skinstrack have an official developer API?+
What does `get_item_prices` return that `search_items` does not?+
search_items returns a single lowest_price_usd representing the cheapest ask across all marketplaces. get_item_prices breaks that down into a per-marketplace marketplaces array sorted by price, and adds liquidity score, 7/14/30-day medians and averages, six percentage change windows, and total listing count — all for one specific item slug.How should I handle `filled: true` points in price history?+
get_price_history has no observed price for a given day it copies the previous day's value and marks filled: true. If you're building a volatility or volume metric, filter those points out so gap-filled values don't suppress your calculated variance. The final point in the array is always a live reading and will not be marked filled.Does the API return float values, inspect links, or individual listing details for skins?+
Are all 34+ marketplaces guaranteed to appear in every `get_item_prices` response?+
marketplaces array only includes sources that currently have a live offer for that item variant. Illiquid items may return only a handful of entries. In tests on a popular item, 24 marketplaces appeared; rarer items will return fewer. Use total_listings to gauge overall availability before relying on multi-marketplace comparisons.