How Counterwatch calculates stats
Every community win rate, counter, synergy, and tier ranking on counterwatch.gg is derived from the same underlying dataset. This page spells out where that data comes from, how we turn it into rankings, and the one place the numbers can mislead if you read them wrong.
Where the data comes from
The Counterwatch app is a free Windows desktop application distributed via Overwolf. When a player installs it and plays Overwatch or Marvel Rivals, the app records the outcome of each match along with picks, role composition, map, and game mode. That data is sent to our servers on opt-in. Every community stat you see on the website is computed from those matches.
We do not scrape public APIs. We do not rely on user-submitted results. We do not estimate. The numbers are real match outcomes from real players who chose to share them.
Shrunk win rate in plain English
Every win rate on the site is shrunk, not raw. Shrinkage solves the small-sample problem: a hero with five matches at 100% win rate is not actually the strongest hero in the game, and naive ranking would crown them S-tier anyway.
Bayesian shrinkage fixes this. We blend each hero's raw win rate with a neutral 50% baseline, weighted by how many matches feed the sample. The formula:
shrunk = (rawWinRate × matches + 0.5 × 400) / (matches + 400)
The 400is a tuned prior weight. Think of it as 400 imaginary 50/50 matches we add to every hero's record before computing the win rate.
Worked examples:
- 5 games at 100% raw shrinks to (5 × 1.0 + 400 × 0.5) / (5 + 400) = 50.6%. Basically the baseline. Fluke does not land S-tier.
- 10,000 games at 55% raw shrinks to (10,000 × 0.55 + 400 × 0.5) / 10,400 = 54.8%. Barely moves. Real signal survives.
The result: a hero sitting at 60% across 15 matches reads identically to a hero at 50.7% once shrinkage runs. If you want to rank S-tier, you need both a strong raw win rate and enough community data to trust it.
Sample thresholds and filters
Every hero row on the tier list is computed across the matches that matched your filters: game (Overwatch or Marvel Rivals), mode (5V5, 6V6, Stadium, or Marvel Rivals Standard), game type (Ranked, Unranked, Stadium Ranked, Stadium Unranked, Competitive, Quick Match), and rank division (Bronze through Champion on OW, Bronze through Eternity on MR).
The minimum match threshold for display is deliberately low, so we show every hero even when their sample is thin. The shrinkage prior takes care of the “what if a rare hero looks 80% on 10 games” problem by pulling them close to 50% until they've played enough. Every hero's detail page shows the underlying match count so you can tell at a glance whether a placement is confident (tens of thousands of matches) or provisional (a few hundred).
Refresh cadence
The website's community aggregates refresh daily, once per early-UTC morning. Today's tier list reflects yesterday's matches.
The in-game overlay in the Counterwatch app is live. It reads the current match state as it happens and surfaces swap suggestions in real time. The website's aggregate numbers and the overlay's live state are two different things. When copy on the site says “live”, we mean the overlay; when it says “daily”, we mean the website.
Historical data and the sparsity caveat
Counterwatch has around a year of tracked matches, and our tracked daily active user count has grown roughly five times over that period. That means raw pickrates from earlier in the year come from a smaller tracked population than today's pickrates. Cross-season pickrate deltas are therefore directional, not precise. Read the trend direction, not the magnitude.
Shrinkage auto-compensates for small samples: smaller populations get pulled toward the 50% baseline more aggressively. So current-season win rates remain trustworthy regardless of DAU growth. Only cross-period pickrate comparisons carry the caveat. The 6-month trend on the most-played maps page is the most visible place this shows up.
What we don't do
- No curated opinions. No “our tier list experts ranked these heroes.” Every placement is computed from match data.
- No scraped data. The numbers are real match outcomes from opted-in Counterwatch app users, not estimates, not pulled from a third-party API.
- No per-player ratings. This site ranks heroes, maps, and compositions. If you want to look up your own matches or a friend's profile, you need a profile-lookup tool, which is not what we do.
- No predictions about individual skill. A hero's win rate is the community average. Your win rate on that hero is a different number and it always matters more.
Try it for yourself
The easiest way to see the methodology in action is to browse the live data:
- Overwatch tier list: filter by rank, watch shrinkage flatten small-sample heroes.
- Marvel Rivals tier list.
- Overwatch team builder: see how we score counters, synergies, and map performance into a single win-chance prediction.
- The Counterwatch app: the in-game overlay and second-screen window that run the same numbers live during your matches.