Skip to main content

How attribute & float buckets are built

How the per-attribute (float / fade / pattern) buckets on the attribute-price endpoints are constructed, and why bucket widths differ per market.

Buckets are not an invented Skinpricer scheme. Each market is bucketed to match how that market itself segments the data, then anchored to the standard CS2 exterior bands.

buff163: Buff's own native float ranges

We ingest Buff's native float feed, so the float buckets ARE Buff's own non-uniform ranges (not fixed-width). The bands per exterior:

Factory New (FN)0 to 0.01, 0.01 to 0.02, 0.02 to 0.03, 0.03 to 0.04, 0.04 to 0.07
Minimal Wear (MW)0.07 to 0.08, 0.08 to 0.09, 0.09 to 0.10, 0.10 to 0.11, 0.11 to 0.15
Field-Tested (FT)0.15 to 0.18, 0.18 to 0.21, 0.21 to 0.24, 0.24 to 0.27, 0.27 to 0.38
Well-Worn (WW)0.38 to 0.39, 0.39 to 0.40, 0.40 to 0.41, 0.41 to 0.42, 0.42 to 0.45
Battle-Scarred (BS)0.45 to 0.50, 0.50 to 0.63, 0.63 to 0.76, 0.76 to 0.90, 0.90 to 1

steamcommunity, marketcsgo, csfloat, dmarket: uniform 0.01 bins

These markets use uniform 0.01-wide bins across 0 to 1: bucketIndex = floor(floatValue * 100), min = index/100, max = (index+1)/100. e.g. Field-Tested on Steam is 0.15 to 0.16, 0.16 to 0.17, … 0.37 to 0.38. That's finer than Buff and a different scheme. Never assume a fixed bin width across markets.

Shared rules

Exterior clamping: every float bucket is scoped to the item's exterior band; a bucket never crosses an exterior boundary. Bands are half-open [min, max) (minInclusive: true, maxInclusive: false).

Beyond float: items are also bucketed by fade percentage and by pattern / paint-seed tier (Doppler phases and gems appear as variant / tag buckets). An item can carry combined float+fade ranges in one bucket.

Always read the per-bucket dimensions object for the exact min/max + inclusivity; don't infer bounds from the bucket label, since widths differ per market.

How do your buckets compare to other APIs?

They are not a single shared scheme. We mirror each market's own segmentation, so Buff buckets are non-uniform while Steam / others are uniform 0.01-wide. Normalize on dimensions.float.min / dimensions.float.max rather than matching labels across markets.

These buckets power /v1/attribute-prices/latest, its history, and the buff163-scoped latest / history reads.

Usage & licensing

Access to the API and its data is governed by our Terms of Service. You may not resell or redistribute the data, use it to build a competing service, or exceed your plan’s rate limits, and you must attribute SkinPricer as the source wherever the Terms permit you to display it. Abuse may be throttled or suspended.