# How to Compare CS2 Skin Prices Across Marketplaces

> cs2.sh returns current CS2 prices from BUFF, Youpin, CSFloat, Skinport, Steam, and C5Game in one USD-normalized snapshot, keyed by exact `market_hash_name`.

A marketplace comparison should keep the price type and source attached to every number. The lowest `ask` is the cheapest observed listing, while the highest `bid` is the best observed buy order. Neither field is a completed-sale price.

## Current data for a six-market comparison

| Source | Current fields |
| --- | --- |
| BUFF | `ask`, `bid`, `ask_volume`, `bid_volume` |
| Youpin | `ask`, `bid`, `ask_volume`, `bid_volume` |
| CSFloat | `ask`, `bid`, `ask_volume` |
| Skinport | `ask`, `ask_volume`, listing statistics, and 24h/7d/30d/90d sale windows |
| Steam | `ask`, `bid`, `ask_volume`, `bid_volume` |
| C5Game | `ask`, `bid`, `ask_volume` |

Prices are normalized to USD. Live sources generally refresh every ~5-10 minutes, while CSFloat bids refresh every ~10-30 minutes according to item liquidity. Each source object carries `updated_at` and `collected_at`; use `collected_at` to enforce a consumer-side freshness limit.

Doppler, Gamma Doppler, and Case Hardened prices appear under `variants`. Each variant has a `display_name`, full `name`, and stable `version` code, so Phase 2 or Tier 1 can be compared across sources without falling back to the base item.

## How to compare the prices

Read the item from `GET /v1/prices/latest`, then build separate comparisons for asks and bids. Exclude null values and retain the source, `collected_at`, and available volume beside each quote. Keep Steam wallet prices labeled separately when the analysis is intended to compare cash marketplaces.

For movement over time, request the same exact item and selected sources from `POST /v1/prices/history`. It returns separate ask and bid OHLC candles, with `bucket`, actual `open_time` and `close_time`, and `sample_count`. See the [price-history reference](/docs/api-reference/prices-history) for interval limits.

## Applicable endpoints

| Endpoint | Returns | Plans |
| --- | --- | --- |
| `GET /v1/prices/latest` | All tracked items across all six sources | All plans |
| `POST /v1/prices/history` | Per-source quote OHLC since December 24, 2025; CSFloat bids since July 18, 2026 | Scale, Enterprise |

## Comparison limits that change the result

- `ask_volume` counts active listings. It does not measure completed sales or quantity available at the single lowest ask.
- Skinport has no current `bid`; CSFloat and C5Game have no `bid_volume`. A lowest-ask ranking and an executable-exit ranking will therefore have different source coverage.
- C5Game asks and bids come from independent collection passes. Treat a bid above its ask as a crossed, stale pair instead of a negative spread opportunity.
- Marketplace fees, deposits, withdrawals, and trade restrictions are outside the response. Apply those costs after comparing the normalized gross quotes.

Keep current quotes and completed-sale archive values labeled as separate price types when combining them.
