# How to Build a CS2 Skin Price Tracker

> cs2.sh provides current all-market snapshots plus continuously recorded OHLC history, so a CS2 skin price tracker can start with existing data and continue from fresh source observations.

A tracker should preserve the source and price type. The lowest ask across cash marketplaces, a Steam ask, and the highest current bid answer different valuation questions.

## Data a tracker can retain

- Current price objects for BUFF, Youpin, CSFloat, Skinport, Steam, and C5Game, normalized to USD.
- `ask`, `bid`, active-order volumes where supported, `updated_at`, and `collected_at` for each source.
- Phase and tier prices under `variants`, identified by full `name`, `display_name`, and stable `version`.
- Native quote OHLC history since December 24, 2025 at `5m`, `30m`, `1h`, and `1d` intervals; CSFloat bid history begins July 18, 2026.

## Tracker data flow

Fetch `GET /v1/prices/latest` on a server and read the exact item or nested variant from its `items` map. Store the response `response_time` with the untouched source objects so future selection rules can be changed without losing the original evidence.

Use `collected_at` for source-age checks and `updated_at` for the marketplace's own update time. If a source or field is null, keep it missing rather than copying a prior quote into the new snapshot.

Before building a local history from zero, query `POST /v1/prices/history` for the available range. Use local observations only for additional application-specific state or for periods after the last returned bucket.

## Applicable endpoints

| Endpoint | Returns | Plans |
| --- | --- | --- |
| `GET /v1/prices/latest` | Current all-item prices across six sources | All plans |
| `POST /v1/prices/history` | OHLC history since December 24, 2025 | Scale, Enterprise |

## Tracker caveats

- Current sources update on different cadences, generally ~5-10 minutes. One snapshot can contain source rows with different collection times.
- `ask_volume` is active listing count, not sale volume. A tracker measuring turnover needs an archive series.
- Variant prices must remain separate from their base item. A Phase 2 observation should never become a generic Doppler observation.
- A local polling schedule faster than the source cadence creates duplicate observations, not greater market resolution.

Use the [OHLC chart guide](/resources/how-to-build-cs2-skin-price-chart) when the tracker needs historical visualization.
