CAGR explained: how to measure compound annual growth in CS2 skin investments
If you've ever seen "+8.8% per year" and "+65% over 6 years" reported for the same investment and wondered why both numbers exist — that's CAGR vs total return. CAGR is the standard finance metric for comparing returns across different time horizons. Why simple averaging of yearly returns lies, the actual formula with worked examples, and CAGRs for the 7 STI skin indices over 6 years.
The 30-second definition
CAGR stands for Compound Annual Growth Rate. It's the constant yearly return that, if compounded, would have produced the same final value as the actual investment over the same period. The formula:
CAGR = (end_value / start_value)^(1 / years) - 1
example:
start_value = $100
end_value = $200
years = 6
CAGR = (200/100)^(1/6) - 1
= 2^0.1667 - 1
= 1.122 - 1
= 12.2%/yearThat 12.2%/year compounded over 6 years equals 100% total return — which matches the actual gain. CAGR is the "equivalent constant rate" that bridges any total return and any time horizon into a single comparable number.
Why simple averaging lies
The naive way to compute "average yearly return" is to take the arithmetic mean of yearly returns. This is wrong and produces volatility drag — the gap between arithmetic and geometric returns that grows with volatility.
Worked example. Imagine a skin with two consecutive years:
- Year 1: +50%
- Year 2: -50%
Arithmetic mean: (+50% - 50%) / 2 = 0%. Looks break-even.
Reality: $100 × 1.5 × 0.5 = $75. You lost 25%.
CAGR: (75/100)^(1/2) - 1 = 0.866 - 1 = -13.4%/year. The honest number.
The arithmetic mean overstates the true return whenever returns fluctuate. The more volatile the asset, the larger the gap. For CS2 skins with annualized volatility of 25-50%, arithmetic- vs-CAGR gaps of 3-8 percentage points are common. Always use CAGR for return comparison, never arithmetic mean of yearly returns.
Why CAGR matters specifically for skin investments
The CS2 skin market has three properties that make CAGR particularly useful:
- Volatility is high — 25-50% annualized for STI tiers, even higher for individual skins. This amplifies volatility drag, so the gap between arithmetic mean and CAGR is large. Reporting arithmetic mean of yearly returns would significantly overstate the achievable performance.
- Time horizons vary — STI 30 has 6 years of history; STI Cases has 5 years (since March 2021); STI Stickers has 4 years. Comparing total returns across these is misleading. CAGR normalizes them all to a per-year basis.
- Asset class comparisons — CDI annualizes to ~10%/year over 2020-2026; S&P 500 to ~17%/year; Bitcoin to ~50%/year. Comparing skin returns to these requires the same per-year basis. CAGR is the lingua franca.
CAGRs across the STI family (2020-2026)
Live CAGR data for the seven STI indices, computed from monthly snapshots since each index's base date. Methodology details at /en/methodology.
| Index | Base date | Total return | CAGR |
|---|---|---|---|
| STI Cases | Mar 2021 | +788.9% | +47.5%/yr |
| STI 1000 | Apr 2020 | +75.3% | +9.8%/yr |
| STI 500 | Apr 2020 | +65.1% | +8.8%/yr |
| STI 30 | Apr 2020 | +37.5% | +5.5%/yr |
| STI Stickers | Jan 2022 | +28.6% | +6.2%/yr |
| STI 100 | Apr 2020 | +29.7% | +4.4%/yr |
| STI Agents | Jan 2020 | −0.8% | −0.2%/yr |
Three observations:
- STI Cases dominates with +47.5%/year CAGR, driven by structural scarcity (drop retired) plus post-CS2 demand surge. Comparable to Bitcoin in raw return.
- Skin tiers cluster around +5-10%/year CAGR — below CDI (~10%/year) and S&P 500 (~17%/year) over the same window.
- STI Agents flat-to-negative — character skins as collectible category never gained sustained traction. Useful as a control group: not all CS2 collectibles compound positively.
Cross-asset CAGR comparison
| Asset (2020-2026) | Total return | CAGR |
|---|---|---|
| Bitcoin | ~+990% | ~50%/yr |
| STI Cases | +788.9% (5yr) | +47.5%/yr |
| S&P 500 (USD) | +154.4% | ~17%/yr |
| CDI (BRL benchmark) | +77.3% | ~10%/yr |
| STI 500 (broad CS2 market) | +65.1% | +8.8%/yr |
| IPCA (BR inflation) | ~+30% | ~4.5%/yr |
Putting CAGRs side-by-side immediately exposes the trade-off space. Bitcoin and STI Cases both delivered ~50%/year — but with massively different volatilities and liquidity profiles. STI 500 beat IPCA (preserved real purchasing power) but lagged CDI (a brokerage account would have done better risk- free).
For an investor asking "was holding skins worth it?", CAGR is the first-order answer. For "was holding skins worth the volatility?", you also need risk-adjusted return — which brings us to Sharpe ratio.
CAGR vs IRR: which to use?
CAGR assumes a single deposit at the start and a single withdrawal at the end — pure buy-and-hold. If you bought a basket of 30 skins on January 1, 2020, and held until April 2026, CAGR works perfectly.
But most active traders deposit and withdraw capital across time. You bought 5 skins in 2020, sold 2 in 2022, bought 3 more in 2023, sold 1 in 2024. CAGR can't handle dated cash flows. The correct metric is IRR (Internal Rate of Return), which solves for the discount rate that makes the net present value of all cash flows equal zero.
Practical implementation: in Excel or Google Sheets, use XIRR with two columns — dates and signed cash flows (deposits negative, withdrawals positive, with the final portfolio value as the last positive cash flow). Both CAGR and IRR express returns as annualized percentages, but they answer slightly different questions:
- CAGR: "If I had invested $X at start and held, what annual rate would have produced my current portfolio value?"
- IRR: "Given my actual deposit and withdrawal schedule, what annual rate describes the time-weighted return on my capital?"
How to compute your portfolio's CAGR
If you bought once and held:
- Find your start value: total cost basis (sum of all purchases). For Steam-bought skins, your purchase history goes back several years — export it.
- Find your current value: mark-to-market each skin at current Steam (or CSFloat/ Skinport for high-end items) and sum.
- Find years elapsed: from first purchase date to today.
- Apply formula: CAGR = (current_value / start_value)^(1 / years) - 1.
For Skin Trackers users: portfolio value over time is tracked automatically via /inventario (Steam login imports purchase history + computes CAGR against multiple STI benchmarks).
Limitations: when CAGR misleads
- Sensitive to start/end dates — a skin measured from cycle bottom to cycle top will look amazing; the same skin measured top-to-bottom will look terrible. Always disclose the window. STI publishes from a fixed base date (April 2020) for transparency.
- Doesn't capture path-dependence — a portfolio with a -50% drawdown that recovered has the same CAGR as one that grew steadily. Pair CAGR with max drawdown or Calmar ratio for the fuller picture.
- Backward-looking only — past CAGR doesn't predict future CAGR, especially for assets with regime changes (CS2 launch, Operation cycles, F2P transitions). A skin's 5-year CAGR tells you what it did, not what it will do.
- Ignores fees — STI CAGRs are pre-fee. Net of Steam Market 15% fee and Brazilian 15% capital gains tax (when applicable), realized CAGR can be 30-50% lower than the index headline.
- Doesn't adjust for inflation — CAGR shows nominal returns. To know real returns, subtract inflation. STI 500 nominal CAGR of +8.8%/year minus IPCA ~4.5%/year leaves real CAGR of +4.3%/year — preserved purchasing power but didn't generate much real wealth.
Frequently asked
What is CAGR in plain English?
CAGR (Compound Annual Growth Rate) is the constant yearly return that, if compounded, would have produced the same final value as the actual investment over the same period. If a skin returned +50% in year 1, -30% in year 2, and +40% in year 3, the simple average of yearly returns is +20%, but the CAGR (which captures actual compounding) is much lower — around +14%. CAGR is the standard metric for comparing investments across different time horizons because it normalizes everything to an apples-to-apples annual rate.
Why does simple averaging of returns lie?
Volatility drag. Two consecutive returns of +50% and -50% don't average to 0% — they leave you with 75% of your starting capital (1.5 × 0.5 = 0.75). The arithmetic mean is 0%, but the geometric mean (which CAGR uses) is -13.4%/year. The more volatile the asset, the larger the gap between arithmetic and geometric means. For CS2 skins with 25-50% annualized volatility, arithmetic-vs-CAGR gaps of 3-8 percentage points are common. Always use CAGR for performance comparison.
What's the formula for CAGR?
CAGR = (end_value / start_value)^(1 / years) - 1. Example: skin worth $100 at start, $200 at end of year 6. CAGR = (200/100)^(1/6) - 1 = 2^(0.1667) - 1 = 1.122 - 1 = 12.2%/year. The formula assumes constant geometric compounding — appropriate for buy-and-hold positions. For portfolios with intermediate cash flows (deposits, withdrawals), use IRR (Internal Rate of Return) instead, which CAGR's geometric assumption can't handle.
What CAGR are CS2 skin indices generating?
Over 2020-2026 (6 years), the STI family CAGRs are: STI Cases +47.5%/year (driven by structural scarcity), STI 1000 +9.8%/year, STI 500 +8.8%/year (broad market), STI 30 +5.5%/year (blue chip), STI 100 +4.4%/year, STI Stickers +6.2%/year (since 2022), STI Agents -0.2%/year (since 2020). For comparison: S&P 500 ~17%/year, Bitcoin ~50%/year, Brazilian CDI ~10%/year. Most STI tiers underperformed CDI in absolute return but provided diversification benefit (low correlation with traditional assets).
How do I compute the CAGR of my own skin portfolio?
Three inputs needed: portfolio value at start, portfolio value now, and time elapsed in years. Apply CAGR = (current_value / start_value)^(1 / years_elapsed) - 1. If you've made deposits/withdrawals during the period, the simple CAGR formula doesn't work — you need IRR (XIRR in Excel/Google Sheets handles dated cash flows). For Skin Trackers users, /inventario tracks portfolio value over time and computes CAGR automatically against multiple STI benchmarks.
What's the difference between CAGR and IRR?
CAGR assumes a single deposit at the start and a single withdrawal at the end — buy-and-hold. IRR (Internal Rate of Return) handles arbitrary cash flow timing — useful for portfolios where you've added or removed capital during the period. For most casual skin investors who buy gradually and don't sell often, CAGR computed on year-end snapshots is a reasonable approximation. For active traders making frequent deposits/withdrawals, IRR is more honest. Both express returns as annualized percentages, but they answer slightly different questions.
What are the limitations of CAGR for alternative assets?
Three main caveats. First, CAGR is sensitive to start and end dates — a skin measured from cycle bottom to cycle top will look amazing; the same skin measured top-to-bottom will look terrible. Always disclose the window. Second, CAGR doesn't capture path-dependence — a portfolio with -50% drawdown that recovered has the same CAGR as one that grew steadily, but the lived experience is wildly different. Pair CAGR with max drawdown or Calmar ratio. Third, CAGR is a backward-looking statistic — past CAGR doesn't predict future CAGR, especially for assets with regime changes (CS2 launch, Operations cycles).
Should I always pick the asset with highest CAGR?
Usually no — high CAGR often comes with high risk. STI Cases has CAGR ~47.5%/year, which sounds incredible until you account for: liquidity (vending a Karambit is harder than vending an SPY ETF share), drawdowns (the index had -25%+ drawdowns multiple times), fees (Steam 15% fee compounds against CAGR), and realizability (the CAGR assumes you can buy the entire basket; in reality you'd own 5-10 cases). For risk-adjusted comparison, divide CAGR by volatility — that's the Sharpe ratio (see /en/blog/sharpe-ratio-cs2-skin-investors).
Where to go from here
- See live CAGRs for all 7 STI indices at /indices — comparison table with total return, CAGR, vol, Sharpe.
- Compute your portfolio's CAGR via /inventario — Steam login imports purchases automatically.
- For risk-adjusted return analysis (which brings volatility into the picture), see /en/blog/sharpe-ratio-cs2-skin-investors.
- For full methodology including how CAGR is computed in our pipeline (with edge cases for missing data), see /en/methodology.
Methodology note: CAGRs computed as (latest_value / first_value)^(1/years) − 1, where years = (latest_date − first_date) / 365.25. For non-leap-year approximation. Source code in src/lib/metrics.ts (open), raw data via /api/indices.