# How to Build a CS2 Skin Market Index

> cs2.sh provides daily CSFloat completed-sale averages and sale counts from 2022 onward, a consistent cash-market series for building a CS2 skin market index.

An index is defined by its basket, weighting method, base date, and missing-data rule. Those choices determine the result as much as the source prices do.

## Index data available from cs2.sh

`POST /v1/archive/csfloat` returns one daily row per item with `date`, `price`, and `volume`. `price` is the arithmetic average of all completed-sale prices on that UTC day; `volume` is the number of completed sales. The archive updates once or twice per day.

The response is keyed by exact `market_hash_name` and can include separate series under `variants` for supported Doppler and Gamma Doppler phases. Case Hardened tiers are not collected as CSFloat archive variants. The endpoint accepts up to 100 item names per request.

## Turning sale series into an index

Choose a fixed basket whose item identities match the intended segment. For a simple equal-weight index, find a common date on which every constituent has a completed-sale price, divide each later price by its own base-date price, and average those rebased levels.

Keep only dates that satisfy the published coverage rule. Requiring every constituent produces a complete-case index with an irregular calendar; allowing partial baskets changes weights as coverage changes. Forward-filling introduces a derived price for days without a completed sale.

Volume can support an alternative weighting or a minimum-activity filter, but the methodology should state whether weights are fixed, periodically reconstituted, or recalculated daily. Variant and base-item series should not be collapsed unless that aggregation is part of the definition.

## Applicable endpoint

| Endpoint | Returns | Plans |
| --- | --- | --- |
| `POST /v1/archive/csfloat` | Daily completed-sale average price and count from 2022 | Scale, Enterprise |

## Index caveats

- The daily CSFloat price is an arithmetic mean. Different floats, stickers, or paint seeds sold on different days can move it even when the underlying finish is stable.
- Missing dates mean no returned archive aggregate for that item. They are not zero-price observations.
- Selecting only items that remain popular today can introduce survivorship bias into a historical index.
- Replacing a constituent or changing the base date creates a different series. Store the methodology beside the index values.

Use [CSFloat sales history](/resources/how-to-get-csfloat-sales-history) to inspect constituent coverage before fixing the basket.
