BUFF sale history is now available - POST /v1/archive/buff returns sale prices and daily total supply since September 2024.

How to Detect CS2 Skin Price Manipulation

Possible CS2 price manipulation is best detected as a disagreement between independent signals: one marketplace moves sharply, other current prices do not confirm it, completed sales remain near the old range, and the moved price has weak order or liquidity support. cs2.sh provides the current cross-market prices, intraday OHLC, completed-sale archives, and daily liquidity needed to produce a review flag. The data can identify an anomaly; it cannot prove intent.

Scope: This is a broad, high-level v0 guide, not a complete application. cs2.sh is designed as a flexible market-data layer for whatever you want to build on top of it, so adapt the implementation to your own product, strategy, and integrations.

The output should be a risk score with evidence, not a binary accusation. Store the item, variant, moved source, time window, price change, cross-market deviation, order support, sale confirmation, liquidity, freshness, and the reasons the item was flagged.

Use four independent checks#

1. Cross-market confirmation#

Fetch GET /v1/prices/latest and compare the moved source's current ask with the median non-stale ask across other cash marketplaces that cover the same item or exact variant.

text
cross_market_deviation = moved_ask / median_other_cash_asks - 1

A large positive deviation on one marketplace is weaker evidence of a market-wide repricing than similar moves across several sources. Compare asks with asks and bids with bids. Steam Wallet value belongs in a separate comparison because it does not settle as cash.

2. Historical move#

Use POST /v1/prices/history to measure the source's change against its own trailing range. The endpoint provides ask and bid OHLC at 5m, 30m, 1h, and 1d intervals.

Robust features include the current close versus a trailing median, the bucket high-low range, the number of consecutive elevated closes, and sample_count. A brief high supported by one observation is different from a move that persists across many well-observed buckets.

Calculate features per item and source. A universal dollar threshold treats a $2 sticker and a $2,000 knife as the same market. Percentage changes are better, but thresholds should still vary with normal volatility and liquidity.

3. Completed-sale confirmation#

Listings and buy orders can move without a completed sale. Compare the anomaly with the applicable sale archive:

  • CSFloat returns a daily arithmetic average completed-sale price and sale count from 2022.
  • Steam returns a median sale price and purchase count daily from April 26, 2013 and hourly from May 9, 2026.
  • BUFF returns sale prices from its transaction chart with the daily total supply it reports, and no sale volume, from September 6, 2024.
  • Youpin returns one sale per independent interval and no sale volume.

A new price supported by repeated completed sales and meaningful volume is stronger than one supported only by a changed ask. Sale archives update less frequently than current prices, so absence of same-day confirmation can be a timing limitation rather than manipulation.

4. Order and liquidity support#

Attach current ask_volume and bid_volume where the source provides them. A moved ask backed by one sell listing deserves more scrutiny than the same level supported by many listings and buyer demand.

Join GET /v1/liquidity/items. Thin markets naturally move in larger steps, and their last sale can be old. Require more confirmation before flagging an illiquid knife, but also lower confidence in any valuation derived from its only listing. Liquidity describes recent sale activity; it does not certify that a price is legitimate.

Build an explainable risk score#

One workable model assigns points for conditions such as:

Condition Evidence added
One source ask far above the median of other current cash asks Cross-market divergence
Move far outside that source's trailing range Historical anomaly
Low sample_count or only one active listing Weak observation support
Bid does not rise with ask Weak buyer confirmation
Recent completed-sale prices remain near the prior level Weak sale confirmation
Item or variant is illiquid or has unknown liquidity High uncertainty
Source timestamps exceed the freshness bound Stale-data risk, not manipulation evidence

Stale or missing data should reduce confidence or suppress the classification. It should not add manipulation points. A missing bid is not a zero bid, and a missing variant source is not evidence that the source disagrees.

Keep each reason as a separate field so an analyst or user can see why the score changed. A black-box score that cannot distinguish a stale collector from an unsupported listing is unsafe for pricing or trade rejection.

Separate variants and exact attributes#

A Phase 2 Doppler, the base Doppler, and another phase are separate markets. Calculate current and historical features on the exact variant series. Sparse variant coverage means fewer independent sources may be available, which should lower confidence rather than trigger a base-item comparison.

Generic price data also cannot establish the premium of a rare paint seed or sticker combination. An asset priced above the generic skin may be correctly valued for attributes outside the series. Use individual inspection or conditional-order data before classifying that premium as anomalous.

Avoid common false positives#

  • A game update, case change, or broad market move can reprice many related items at once.
  • A real sale can appear before an archive refresh reaches the API.
  • Low-volume items can move between widely separated listings without coordinated activity.
  • Steam can diverge from cash marketplaces because wallet funds and cash have different settlement.
  • Foreign-currency marketplace prices are returned in USD, so a currency move can affect cross-market differences.
  • A source can be freshly collected while its own updated_at remains old.

Use the detector to queue review, lower a valuation's confidence, require more evidence, or temporarily exclude a source from an automated price. Do not use one flag alone as proof of fraud or as a reason to identify an actor.

References: current prices, OHLC history, CSFloat completed sales, liquidity, and timestamp semantics.