Skill Rating — OpenSkill, Glicko-2 & Elo from match results avatar

Skill Rating — OpenSkill, Glicko-2 & Elo from match results

Pricing

from $0.20 / 1,000 match rateds

Go to Apify Store
Skill Rating — OpenSkill, Glicko-2 & Elo from match results

Skill Rating — OpenSkill, Glicko-2 & Elo from match results

Turn a match log into skill ratings and a leaderboard with OpenSkill (patent-free TrueSkill alternative), Glicko-2 or Elo, plus win probabilities. Singles, doubles, teams, free-for-alls and draws. $0.20 per 1,000 rated matches.

Pricing

from $0.20 / 1,000 match rateds

Rating

0.0

(0)

Developer

Lai Keith

Lai Keith

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

4 hours ago

Last modified

Categories

Share

Skill Rating: OpenSkill, Glicko-2 and Elo ratings from match results

Skill Rating is an Apify Actor that turns a match log (who played, who won, optional timestamps) into skill ratings and a leaderboard using OpenSkill, Glicko-2 or Elo, and predicts the win probability of any matchup. It handles singles, doubles, teams, free-for-alls, draws and weighted matches, and you pay only for matches rated: $0.20 per 1,000.

What does Skill Rating do?

You give it your match history as JSON. It replays the matches in order (or by timestamp) and returns:

  • One dataset row per player: rank, rating, μ (skill), σ (uncertainty), games, wins, losses and draws, ready to export as CSV, JSON or Excel.
  • An OUTPUT record with the full ratings. Pass its players object back next time to continue: rating in two runs gives exactly the same result as one run over the whole history.
  • Win probabilities: list hypothetical matchups in predict and get each team's chance of winning plus a 0–1 match-quality score (1 = perfectly balanced). Not charged.
  • Optional per-match history: each match's expected win probability before it was played and how much every rating moved.
AlgorithmBest for
openskill (default)Teams, doubles and free-for-alls. Bayesian μ/σ ratings (Weng-Lin), the patent-free TrueSkill alternative
glicko21v1 with uncertainty: rating, deviation and volatility, as used in chess
eloThe classic single number with a K-factor; simplest to explain

When should I use it?

  • Game leaderboards and matchmaking: rate players from match logs and pair them with balanced opponents.
  • Sports clubs, leagues and ladders: table tennis, padel, chess, darts, pool, five-a-side, esports.
  • AI model and prompt evaluation: treat each model as a player and each pairwise judgement as a match (Chatbot-Arena style), with σ showing which rankings are still uncertain.
  • A/B and preference tests: rank options from head-to-head votes.

If you need ratings from your own code on every match, use the Skill Rating API instead. It runs the same engine behind a REST endpoint.

Input

{
"algorithm": "openskill",
"matches": [
{ "teams": [["ana"], ["ben"]], "winner": 0, "timestamp": "2026-10-01T18:00:00Z" },
{ "teams": [["ana", "dan"], ["ben", "cat"]], "winner": 0, "timestamp": "2026-10-02T19:00:00Z" },
{ "teams": [["ana"], ["dan"]], "ranks": [0, 0], "timestamp": "2026-10-03T18:00:00Z" },
{ "teams": [["ben"], ["cat"]], "winner": 0, "weight": 0.5, "timestamp": "2026-10-03T18:45:00Z" }
],
"predict": [[["ana"], ["cat"]]]
}
FieldRequiredDescription
matchesyesYour match history. Up to 5,000 per run
matches[].teamsyes2 to 8 teams of 1 to 8 player ids. Singles: [["ana"], ["ben"]]
matches[].winnernoIndex of the winning team (default 0)
matches[].ranksnoFinishing position per team, lower is better. Equal ranks are a draw: [0, 0]. Use it for free-for-alls
matches[].weightno0.1 to 3: how much the match counts (friendly 0.5, final 2)
matches[].timestampnoISO 8601 or epoch ms. If every match has one, matches are rated in time order; otherwise in list order
algorithmnoopenskill (default), glicko2 or elo
playersnoThe players object from a previous run's OUTPUT, to continue where you left off
predictnoMatchups to predict from the final ratings, each a list of teams
paramsnoAlgorithm parameters, e.g. {"k": 24} for Elo
includeHistorynoAdd per-match expected win probability and rating changes to OUTPUT

Limits per run are the same as the API's per request: 5,000 matches, 2,000 players and 2 MB of JSON input. For a longer history, split it over several runs and pass players from each run's OUTPUT into the next.

Output

One dataset row per player (this is the real output for the Actor's example input):

{ "rank": 1, "player": "ana", "rating": 8.0511, "mu": 30.5018, "sigma": 7.4836, "games": 4, "wins": 3, "losses": 0, "draws": 1, "algorithm": "openskill" }

rating is what to show users. For OpenSkill it is the conservative μ − 3σ, so new players start near 0 and climb as the Actor becomes sure of them; for Glicko-2 and Elo it is the rating itself (new players start at 1500).

The OUTPUT record holds players (μ, σ, games, display per player), the leaderboard, predictions such as { "teams": [["ana"], ["cat"]], "win_probability": [0.7329, 0.2671], "quality": 0.2907 }, and history when requested.

How much does it cost?

It's pay per event: $0.20 per 1,000 rated matches ($0.0002 per match), plus a little Apify platform usage. Predictions are free. Invalid input fails before anything is charged, and if you set a maximum spend on the run, the Actor rates only as many matches as the limit covers.

FAQ

How do I calculate Elo or Glicko-2 ratings from a spreadsheet of match results? Turn each row into {"teams": [["player1"], ["player2"]], "winner": 0} (or "ranks": [0, 0] for a draw), paste the list into matches, pick the algorithm and run. Export the dataset as CSV or Excel.

How do I rate doubles or team games? Use OpenSkill (the default) and list each team's players: [["ana", "ben"], ["cat", "dan"]]. Each player's rating moves according to their own uncertainty.

What is a patent-free alternative to TrueSkill? OpenSkill. It gives the same kind of μ/σ team ratings, while Microsoft permits the TrueSkill brand only for Xbox Live games and non-commercial projects.

Can I add new matches later without re-rating everything? Yes. Pass the players object from the last run's OUTPUT along with only the new matches. The result is identical to re-rating the full history.

Is my data stored? Results stay in your own Apify storage under your account's retention settings. Matches are rated inside the run and are not sent to any other service.

  • Skill Rating API: the same engine as a REST API on RapidAPI, from free for 200 requests a month; each request rates up to 5,000 matches.
  • Free Elo rating calculator: win probability and new ratings for a single game, in your browser.
  • keith-apis-mcp: an MCP server that gives AI assistants rating and win-probability tools.