How to Find CS2 Skin Arbitrage Across Marketplaces
Updated
API reference: GET /v1/prices/latest · GET /v1/liquidity/items
GET /v1/prices/latestsupplies normalized asks and bids across six marketplaces, which can identify candidates where one source's acquisition ask is below another source's exit bid.
Two low asks show a shopping comparison. An arbitrage candidate needs an observed exit quote, so the destination side should be a bid, not another listing.
Quote coverage for an arbitrage screen
BUFF, Youpin, and Steam provide ask, bid, ask_volume, and bid_volume. CSFloat and C5Game provide asks and bids without bid volume. Skinport provides asks, listing counts, listing statistics, and rolling sale windows, but no bid.
All prices are normalized to USD and each source object includes updated_at and collected_at. Supported Doppler, Gamma Doppler, and Case Hardened phases or tiers are priced independently under variants.
Screening cross-market routes
For every exact base or variant identity, pair a positive cash-market ask with a different cash source's positive bid. Reject stale rows using collected_at, discard a source when its bid is above its own positive ask, and calculate the gross spread.
Apply the actual buy fee, sell fee, conversion cost, deposit or withdrawal cost, and any route-specific restrictions outside the API. Rank only the remaining net-positive candidates and keep the source timestamps beside them.
Join candidates to GET /v1/liquidity/items when the screen needs a sale-activity check. The absolute liquidity bucket and estimated_sale_time provide context about how often the item sells at a competitive listing price.
Applicable endpoints
| Endpoint | Returns | Plans |
|---|---|---|
GET /v1/prices/latest |
Current all-source asks, bids, volumes, and variants | All plans |
GET /v1/liquidity/items |
Daily liquidity and estimated sale time | Scale, Enterprise |
Why a positive quote spread can fail
- Top-of-book fields do not expose destination depth for every source. CSFloat and C5Game have no
bid_volume, so they cannot prove that a chosen quantity can exit. - C5Game ask and bid observations come from independent collection passes. A crossed pair is a stale-data warning, not an opportunity.
- A current bid can change while an item is transferred or held. The API does not model execution latency or account restrictions.
- Variant identity must remain exact. A Ruby ask cannot be paired with a base Doppler bid.
Start with the six-market price comparison when the goal is acquisition shopping rather than a two-sided route.