Scoreboards Documentation

Everything you need to create and manage Discord leaderboards

  1. Add the bot — Invite Scoreboards to your Discord server using the invite link on the homepage.
  2. Run the setup wizard — Use /leaderboard create: one quick form to name your leaderboard, pick a type and optionally a log channel — and it's posted right in the channel. Point, Highscore and Time boards start with a few example entries so you can see the board working; they disappear the moment a real score is added. Press More options on the reply afterwards for the sort order, team matches or a free-for-all.
  3. Assign roles — Open the dashboard to set the bot permission role (users who can manage leaderboards) and the validator role (users who can approve submissions).
  4. Add more leaderboards — Run /leaderboard create again for each one. More options on the reply sets the sort order, team matches or a free-for-all; everything else is on the dashboard.
  5. Display it — Use /leaderboard show in a channel to post the interactive leaderboard with submit and pagination buttons. A leaderboard made on the website can be posted from the dashboard too: pick its Leaderboard channel in its Discord settings, and the bot posts it there.

Scoreboards needs only a handful of Discord permissions, and a server with default settings already grants them. The ones that matter are per channel — a bot can be allowed in one channel and locked out of the next — so when a leaderboard stops updating, this is the first place to look.

In the leaderboard channel

  • View Channel and Read Message History — to find its own leaderboard message and edit it. Without these the board only refreshes when someone runs /leaderboard show: a slash command is answered even where the bot cannot read, an edit is not.
  • Send Messages — to post the leaderboard, and to tell you when something is wrong.
  • Embed Links and Attach Files — the leaderboard is a picture with a caption underneath. Without Attach Files the picture is dropped; without Embed Links, the caption and the fallback table are.
  • Create Private Threads and Send Messages in Threads — match threads on ELO and League leaderboards open here.

In the log channel

The same set. Submissions are posted there for review and the bot edits them when they are approved or rejected; image entries are attachments. If the leaderboard channel cannot host a match thread, it opens here instead. If the bot cannot post in the log channel, it posts a short warning in the leaderboard's channel instead, naming the missing permission, with a link to review the submission on the dashboard.

Server-wide

  • Manage Roles — for Tier Roles, roles sold in the shop, the automatic rank roles on ELO leaderboards and the queue's ping role. The Scoreboards role must also sit above every role it hands out, in Server Settings → Roles.
  • Change Nickname — only if you rename the bot under Server → Bot identity.
  • Manage Channels, Connect and Move Members — only for matchmaking voice channels, and only in the category the log channel sits in.

The Add to Discord link asks for View Channel, Send Messages, Embed Links, Attach Files, Read Message History, Create Private Threads, Manage Threads, Manage Roles and Send Messages in Threads. Everything else comes from your server's @everyone defaults or from roles you give the bot — so a server that has locked @everyone down has to grant the bot those permissions itself, per channel or on its role.

When a permission is missing, the bot says so rather than failing quietly: a message in the leaderboard channel for Embed Links, Attach Files and a tier role it cannot assign, and one in the log channel when it cannot reach the leaderboard at all.

When creating a leaderboard with /leaderboard create, choose one of seven types:

Classic

Adds or subtracts points from a running total. Best for cumulative scoring games.

Highscore

Only stores each player's personal best. Previous lower scores are replaced automatically.

Time (Speedrun)

Submit times as 00:00:00 (hundredths) or 00:00:000 (milliseconds) — the board's display format is a dashboard setting, and new boards default to milliseconds. Use ascending sort for fastest-wins or descending for longest-wins.

ELO - Ranked

Competitive ELO rating system, 1v1 or 2v2–8v8 teams. Submit match results and every participant's rating updates automatically.

Rating

Submit images for community star ratings (1–10). Votes are averaged into a score. Perfect for art contests and creative challenges.

League

Match-based points ranking for sports like football, basketball, and FIFA. Configurable points per win/draw/loss (default 3/1/0) and a match score (e.g. 3-1).

Levels (BETA)

Ranks members by the XP they earn from chatting and from time in voice channels. Levels, level-up messages and roles per level come with it, and nobody has to submit anything.

Leaderboard Management

CommandDescriptionPermission
/leaderboard createCreate a leaderboard in one form — name, type and an optional log channel — and post it in the channel; More options afterwards sets the sort order and match formatAdmin / Bot Permission
/leaderboard showDisplay the leaderboard in the current channel with interactive buttonsAdmin / Bot Permission
/dashboardOpens the dashboard: the server's overview, or with the leaderboard option straight to that leaderboard's settings (sort, visibility, headers, view mode, ELO config, and more)Admin / Bot Permission
/leaderboard deletePermanently delete a leaderboard and all associated data (requires confirmation)Admin / Bot Permission

Score & Match Submissions

CommandDescriptionPermission
/scoreSet or adjust a player's score, ELO or time. Pick the leaderboard, then choose Set or Adjust in the form that opens. Image-rating boards are not included. An optional Comment explains why, and shows on the score update in your log channel. Pick a role to give every member who has it the same change. For the whole server, type @everyone under Players not in this server.Admin / Bot Permission

Configuration

CommandDescriptionPermission
/helpView interactive help documentation with all available topicsEveryone
/feedbackSend us feedback in your own words: ideas, problems, anythingEveryone
/delete_my_dataPermanently delete your personal leaderboards and scores, and your currency data in every server (requires confirmation)Everyone
/uninstallRemove the bot from the server. A form asks why it didn't work out (optional); then every leaderboard and score for the server is deletedAdmin

Tournaments (Beta)

CommandDescriptionPermission
/tournament createCreate a tournament with a short form, posted in this channelAdmin / Bot Permission
/tournament showPost a tournament in this channel: its signup or its bracketEveryone
/dashboard tournament:Opens the tournament on the dashboard: open signup, start now, cancel, and every settingAdmin / Bot Permission / organiser role

Economy (Beta)

The economy has no slash commands. Members press the Shop button under a leaderboard, or open the server’s shop page, to see their balance, buy roles, board emojis, name colours, rank rings and row styles, and open any payout to see exactly how it was worked out. Admins set it up, stock the shop and give or take currency in the dashboard, under Economy.

There are two ways to submit:

  • In Discord, click the submit button on the posted leaderboard message — it is labelled Submit score on Classic/Highscore/Time boards, Submit result on ELO and League, and Submit image on Rating. The bot opens the right modal for the type: a score input, a player + winner picker, a player + score picker, or a name plus the image itself. On a team leaderboard the pickers ask you to select a full roster for each side instead of one player, and a free-for-all leaderboard carries a Report result button instead.
  • From the website, open the leaderboard and click Submit for the same flow — and it is the only route that takes a custom name, for players who are not in your Discord server.

Review Process

  1. The submission is posted to the configured log channel (if set).
  2. A validator or admin clicks Approve or Reject. ELO and League matches ask the opponent first — see Opponent confirmation below. Any other leaderboard without a log channel approves submissions instantly; set a log channel to review them first.
  3. If rejected, the submitter receives a DM with the rejection reason.
  4. If approved, the leaderboard updates immediately.

Opponent confirmation (ELO and League)

When a match is reported on a server's ELO or League leaderboard, the bot opens a private match thread with the reporter and the opponent in it, and pings the opponent there with Confirm and Disagree buttons — everyone not on the reporter's side, or, if someone who didn't play reported it, the side that lost (both sides on a draw). A teammate can't confirm their own team's result, and the reporter or staff can Withdraw it. If nobody answers, the match counts on its own when its deadline passes: 3 hours on new leaderboards. The report form starts with the reporter as player 1.

Disagree sends the match to staff: an admin, anyone with Manage Server, the validator role or the bot permission role. It stays in the same thread: the validator role is added to it and pinged, or, if the server has none, an admin decides. If nobody decides within 48 hours, it is rejected. Matches on personal leaderboards on the website still count at once.

Auto-Approval

Each leaderboard can be configured to auto-approve submissions after a set delay: Off, Instant, 1 hour, 3 hours, 24 hours, 3 days, or 7 days. On ELO and League it is how long the opponent has to confirm or disagree. New ELO and League leaderboards start at 3 hours; older leaderboards keep their setting. On an ELO or League leaderboard without a log channel, Off means 3 hours too, because there is no staff channel to approve from.

Cancelling a Score

Admins and validators can cancel an already-approved score by right-clicking the submission message and selecting "Cancel Review". This reverts the score change and requires a cancellation reason.

The ELO - Ranked leaderboard type uses an ELO rating system to rank players competitively, either 1v1 or in teams of up to eight a side.

How it works

  • Each player starts at a configurable starting ELO (default: 1200).
  • Match results can be win, loss, or draw.
  • Ratings move by a configurable K-factor (default 32).
  • Every participant's rating updates at once when the match counts.

Everything an ELO leaderboard does

  • A matchmaking queue with a ready-check, a private match thread and a Join Voice button.
  • Opponent confirmation: the other side confirms or disagrees, and the match counts on its own after 3 hours.
  • Challenge a player directly, and a Rematch button in the match thread after every 1v1.
  • Teams from 2v2 to 8v8, fixed teams, and free-for-alls of 3 to 8 players with placements.
  • A configurable K-factor and starting rating, optional decay, and seasons.
  • Automatic rank roles from Bronze to Diamond, with each promotion sent to the player by DM.
  • A result line in the match thread after every match, with the rating change and the new rank.
  • A web dashboard and a page per board with player stats and rank history.
  • Tournaments whose matches count on the leaderboard.

Team matches (2v2 – 8v8)

ELO and League leaderboards can be set to a fixed team size — pick it when you create the leaderboard, or change it later under Match format in the dashboard. Every match on a 3v3 leaderboard then has three players a side, and the leaderboard still ranks players individually.

For ELO, each team's expected result comes from its average rating, and the resulting change is applied to every member of that team — so beating a stronger team earns everyone on the winning side the same gain. For League, every player on the winning team gets the win points, and the whole losing team gets the loss points.

Matchmaking Queue (Beta)

If the queue button is enabled on the leaderboard, players can click it to join the matchmaking queue. The system groups players with similar ELO ratings using an expanding window algorithm. When matched, everyone clicks Ready and the match gets its own thread with voting buttons. If no match is found within 5 minutes, the queue entry expires. Voting closes after 3 hours, and the match is settled from the votes cast: one side's answer, or the result with the most votes. A tie goes to staff, who have 48 hours before the match is cancelled, and a match nobody voted on is cancelled. You can't queue again until you've voted on your last match.

On a team leaderboard the queue waits for enough players to fill both sides — six for a 3v3 — and then splits them into two teams with the closest possible average rating, so the strongest and weakest players end up on opposite sides. Everyone has to click Ready; if someone doesn't, they're dropped and everyone else goes back into the queue with their place kept.

Each team gets its own voice channel so you can talk tactics without the opposition hearing — you only see and can join your own team's channel. Both channels are removed when the match is finalized. A result is locked in once a majority of each team votes for it (two of three in a 3v3), which means one team can never declare its own win; anything else opens a dispute for an admin or validator to settle.

The Queue button shows how many players are waiting, such as Queue · 2. Press 🔔 Ping me when someone queues on the queue message to get the leaderboard's ping role: the bot pings it when someone joins an empty queue, at most every 15 minutes. Press it again to stop.

The queue is no longer ELO-only: a League leaderboard can enable it too. Because League points are a running total rather than a skill estimate, League boards match on points per game, so playing more does not by itself move you up the queue.

Challenge and rematch

On a 1v1 ELO or League leaderboard with the queue on, the Challenge button lets you pick a player. They get the challenge by DM with Accept and Decline, and it expires after 30 minutes; if their DMs are closed, only you are told. An accepted challenge becomes a match thread exactly like a queue match. When a 1v1 match is settled, its match thread gets a Rematch button that sends the same challenge again.

Rank roles

A new ELO leaderboard creates five rank roles at its first approved match — Bronze, Silver, Gold, Platinum and Diamond — if the bot has Manage Roles. With the default start of 1200 the bands are: Bronze below 1100, Silver 1100–1199, Gold 1200–1299, Platinum 1300–1399 and Diamond from 1400; they move with the leaderboard's starting rating. Each promotion is sent to the player by DM. Edit the roles like any tier roles on the dashboard; deleting the leaderboard with /leaderboard delete deletes them too.

Result line

When a reported, queue or challenge match counts, the bot posts one line in the match thread, such as “✅ A beat B · A 1216 (+16) · now #3 (↑2) · B 1184 (−16)”. Nobody is pinged. On a reported match the confirmation notice turns into that line, and on a 1v1 from the queue or a challenge the Rematch button sits under it. A match entered instantly, with no confirmation step, gets no line. Turn it off with Result line after each match on the dashboard.

Fixed teams

A team-size ELO or League leaderboard can also run in fixed teams mode (toggled in the dashboard next to Match format). Persistent named teams sign up once via the leaderboard's Team sign-up button — pick a name, then select the roster, which may hold up to two reserves beyond the team size. The leaderboard then ranks the teams themselves: on an ELO board each team has its own rating and beating a stronger team pays more; on a League board the table ranks teams by points, exactly like a real sports league. League fixed teams record their matches with the leaderboard's Submit result button.

When any member clicks Queue, the whole team is queued and everyone gets a DM. Matching pairs team against team by team rating, and the ready-check doubles as lineup selection: the first team-size members of each roster to click Ready play, the rest sit out that match. Results are voted on by the players who took part, with the same majority-of-each-side rule. Every team's roster is visible on the leaderboard page on the website: the member count sits next to the team's name, hovering it lists the names, and opening the team shows the full roster with the captain marked.

The League leaderboard type ranks players by points accumulated across matches. It's the right format for sports like football/soccer, basketball, futsal, hockey, and any 1v1 or team competition where the season's table is the source of truth.

How it works

  • Submit a match with the leaderboard's Submit result button — the bot prompts for both sides and a score for each (e.g. 3 and 1).
  • The higher score wins; equal scores are a draw.
  • The winning side is awarded points_win, the losing side points_loss, everyone in a draw points_draw. On a team league every player on a side gets that side's points.
  • The leaderboard ranks players by total points; W/D/L counts are tracked separately.

Default points

New leagues default to 3 / 1 / 0 (FIFA standard since 1994). All three values are configurable per leaderboard from the dashboard. Use 2 / 1 / 0 for hockey, 4 / 2 / 0 for rugby, or any custom schedule that fits your sport.

Submitting a match

From the website, open the leaderboard and click Submit — enter both sides and the match score. In Discord the leaderboard's own Submit result button opens the same prompt. Same-player matches and negative scores are rejected at submission time.

Team leagues

A League leaderboard can be set to a fixed team size, 2v2 up to 8v8, when you create it or later under Match format in the dashboard. The table still ranks players individually: every player on the winning side gets the win points, the whole losing side gets the loss points, and the match score counts as goals for and against for each of them.

Prefer a classic sports-league table where the teams are the rows? Turn on Fixed teams next to Match format: persistent named teams sign up via the leaderboard's Team sign-up button (rosters may carry up to two reserves), matches are submitted team vs team with a score, and the table ranks the teams by points. Every team's roster is visible on the leaderboard page on the website: the member count sits next to the team's name, hovering it lists the names, and opening the team shows the full roster with the captain marked.

Reviewing & canceling

League matches go through the same flow as ELO matches: the opponent confirms or disagrees in a private match thread, the match counts on its own after its deadline (3 hours on new leaderboards), staff decide a disagreement, points apply when it counts, and approved matches can be cancelled later (which reverts the exact points awarded).

ELO and League leaderboards don't have to be two-sided. In a free-for-all everybody in the match plays for themselves — 3 to 8 players — and the result is where each of them finished. Turn it on with the ffa_players option when you create the leaderboard, or later under Match format in the dashboard. It takes the place of team matches: a free-for-all leaderboard can't also have a team size or fixed teams, and switching it on only affects new matches, so everything already recorded stays exactly as it is.

The result modes

ResultELOLeague
Full finishing order — 1st through last✓ Yes✓ Yes
Everybody draws✓ Yes✓ Yes
One winner, everyone else unplaced— Not offered✓ Yes

Winner-only is a League mode. There it needs nothing more than it says: the winner takes the win points and the rest take the loss points. A rating can't be that relaxed — if the losers are unranked, the only thing it can honestly say about them is that they all drew, and then a low-rated player gains rating from a match their record counts as a loss. So an ELO free-for-all asks for the whole order, or for an all-draw that really happened.

Reporting a result

Free-for-all leaderboards carry a Report result button instead of Submit result. First pick everyone who played — exactly as many as the leaderboard's lobby size, so a 6-player board takes 6 and the form will not submit with 5. The same form can carry the result: name the winner and the match is reported there and then, and on a leaderboard with a placement points table that field widens to the whole finishing order — 1st place first, then 2nd, and so on. Leave it empty and you get the result step instead. Then set the result: a League board asks who won, with Everybody draws in the same menu and Set full order if you'd rather rank the whole field; an ELO board asks straight for the order, one place per tap, with Undo last for a misclick and an Everybody draws button beside it. Submit stays greyed out until the result is one the leaderboard can score. That button is the only way to report a free-for-all in Discord — if your leaderboard doesn't show it, turn on Submit Button on the leaderboard's Discord tab in the dashboard, or report the match from the leaderboard's page on the website.

After that a free-for-all is a reported match like any other. The other players are asked to Confirm or Disagree in a private match thread, it counts on its own after its deadline (or when staff approve it), ratings and points move when it counts, and cancelling an approved match reverts every player by exactly what it gave them.

How the rating works

An ELO free-for-all is scored as all of its head-to-head sub-results at once. Every pair of players is compared — the better finish beats the worse one, an equal finish is a draw between them — and each of those mini-results is rated with the same expected-score maths a 1v1 uses. So finishing above players rated far above you pays much more than finishing above the bottom of the lobby. The K-factor is then divided by the number of opponents, which is what keeps one free-for-all worth roughly one match of rating movement instead of the seven duels you technically played.

The whole thing is exactly zero-sum: what the field loses is what the rest gain, down to the last point. Six equally rated players at K=32 come away +16, +10, +3, −3, −10, −16. Records follow the finish — first place, including a tie for it, counts as a win, everyone below it as a loss, and an all-draw as a draw for the entire field.

Placement points on League boards

A League free-for-all can pay the whole field from a placement points table, F1 style: so many points for first, so many for second, and so on down the lobby. You edit it in the dashboard, below the win/draw/loss points, on any League leaderboard that plays free-for-alls. Players who tie each take the points of the place they share, and anyone finishing past the end of the table keeps scoring its last entry.

The table only pays a full finishing order. Leave anyone unplaced — a winner-only report, or an order you stopped halfway — and it doesn't apply at all: first place takes the leaderboard's win points and everybody else the loss points. That is also what you get with no table configured, so the table is opt-in. An all-draw pays the draw points to everyone, whatever the table says.

Free-for-all in the matchmaking queue

With the queue button enabled, a free-for-all leaderboard queues individuals and fires the moment it has exactly the lobby size — six players on a 6-player board, never five and never seven. There are no sides to balance, so the lobby is simply the closest-rated group the queue can put together. Everyone still has to click Ready, and the match gets one shared voice room: in a free-for-all there are no teammates to hide from.

The result is reported rather than voted on — three vote buttons can't express an eight-player finishing order. Any player in the lobby sets the result on the match message and the others press Confirm; it locks in once a majority of the field has agreed (two of three, five of eight), with whoever reported it counting as the first of them. Dispute hands the match to an admin or validator, who sets the right result and confirms it themselves. After 3 hours a reported result is locked in, and a match with nothing reported is cancelled. A queue match settles in its own thread, so it doesn't pass through the review queue.

The Rating leaderboard type lets community members submit images and rate each other's submissions with star ratings.

How it works

  • Users submit images with the leaderboard's Submit image button — the form takes a name, an optional description, and the image itself.
  • Submissions appear in the configured log channel with a rating dropdown.
  • Anyone can rate from 1 to 10 stars, or only members with one role, such as judges, when the dashboard limits voting to it; submitting can be limited to a role the same way. Ratings are averaged into a score. Rate under each entry, or press Rate entries on the leaderboard to go through every entry you haven't rated yet, one at a time.
  • Users can change their vote at any time — only one vote per person per submission.
  • The leaderboard ranks submissions by average rating.

Rating on the website

On the website, the leaderboard shows the entries as a gallery of their pictures, each with its rank, average, votes, who uploaded it and your own vote; the pictures are shown to signed-in members of the server. The switch beside the search box (on a phone, beside the title) turns the gallery into a list, and the website remembers your choice. Click any entry to open its picture with its average, number of votes, rank, who uploaded it and when, and rate it with the star buttons; the arrows walk the entries in the board's order. Your existing votes are remembered across sessions. The leaderboard's Recent Activity lists new entries and votes. A vote shows without the voter's name by default ("Someone rated Sunset 8/10"); with Anonymous Votes turned off in the dashboard, votes cast from then on show the voter's name, and voters are told so before they vote. On a blind-voting board the rating itself is never shown.

A Levels (BETA) leaderboard ranks your server's members by XP. Nobody submits anything: members earn XP by chatting and by talking in voice channels, the bot counts it, and each member's level follows from their XP. A server has one Levels (BETA) leaderboard at a time, and it is always a server leaderboard — a personal leaderboard can't be one.

How XP is earned

  • Messages — each message earns a random 15 to 25 XP, but only one message per member every 60 seconds counts. Ten quick messages in a row earn the same as one.
  • Voice — 10 XP for each minute in a voice channel, as long as the member is unmuted and undeafened, is not in the server's AFK channel, and has at least one other person (not a bot) in the channel.
  • Bots, webhooks and Discord's system messages (joins, boosts, pins) never earn XP, and messages count only in channels the bot can see.

Each of these numbers is a setting in the leaderboard's Levels (BETA) settings on the dashboard: the XP range per message, the cooldown, and the XP per minute in voice (0 turns voice XP off).

From XP to level

A member's level is worked out from their XP each time it is shown, so it is never stored. The standard curve is the one most Discord level bots use: going from level L to the next costs 5L² + 50L + 100 XP. The linear curve costs 100L + 75 XP per level, so it starts a little steeper and reaches high levels much sooner. The total XP needed to reach a level:

LevelStandardLinear
51,1501,375
104,6755,250
2023,85020,500
50268,375126,250
1001,899,250502,500

Switching the curve keeps everyone's XP and changes only the level it works out to.

No-XP channels and roles

Pick channels where messages and voice time earn nothing — threads count as part of their channel — and roles whose members never earn XP, for example a role for muted members.

Level-up messages

When a member reaches a new level, the bot posts a message that mentions them. By default it goes to the channel the member was just chatting in; you can send it to one fixed channel instead, or turn it off. You can write your own text, up to 200 characters, with {user}, {level} and {board} filled in. The message only ever pings the member who reached the level, even if the text says @everyone, and when more than three members reach a new level in the same channel at once, they share one message. The bot needs permission to send messages in that channel.

Roles per level

On a Levels (BETA) leaderboard, tier roles have a fourth mode, level: one role from level 5, another from level 10, and so on. With Keep lower tier roles on, members keep every role they have reached; turn it off and they keep only the highest one. Roles change shortly after a member reaches a new level.

Currency per level

If your server runs the economy, you can pay currency for levels: a fixed amount each time a member reaches a new level, paid once per level. It counts toward the same daily cap as every other payout, and the same account-age rule applies. Messages and voice minutes on their own pay no currency.

Seasons

Ending a season freezes the leaderboard: XP stops counting and the standings stay as they finished. Unfreezing it carries on from the same XP. For a fresh start, create a new Levels (BETA) leaderboard and leave the frozen one as the record — a frozen leaderboard does not count toward the one-per-server limit.

Importing and setting XP

Coming from another level bot? Import XP from a CSV file, one name,xp per line, with Import from CSV on the dashboard, as described under Importing & Migrating. Use each member's Discord user ID as the name: the row is then linked to the member, and the XP they earn afterwards is added to it. A row with any other name becomes a custom entry that no one's activity adds to.

To set XP by hand, use /score in Discord, or Set XP and Adjust XP in a player's menu on the website. An import or a change made by hand posts no level-up message and pays no level reward; tier roles catch up the next time the leaderboard is redrawn.

Moving from MEE6 or another leveling bot

Scoreboards doesn't import from MEE6 automatically: MEE6's terms of service don't allow automated access to their service, so the bot never reads another bot's leaderboard for you. You can bring your members' XP over yourself instead — it's your own server's data — with one CSV file:

  1. Copy each member's total XP from your server's leaderboard on MEE6 or the other bot. Copy the XP, not the level: the level follows from the XP. If MEE6 shows a rounded figure such as 12.5k, write the full number (12500); the XP may then be slightly off.
  2. Copy each member's Discord user ID: turn on Developer Mode in Discord (Settings → Advanced), then right-click the member and choose Copy User ID.
  3. Write one name,xp per line, with the user ID as the name and the XP in plain digits: 12500, not 12,500 or 12.500. A row written either way is skipped and listed by its line number, so you can fix it and import again.
  4. On the dashboard, open the Levels (BETA) leaderboard and use Import from CSV. Each row replaces that member's XP rather than adding to it, so import before members have earned much here. A corrected file can be imported again at any time, and a file holds up to 500 rows.
name,xp
123456789012345678,4675
234567890123456789,23850

Only a user ID links a row to a member: a name of 17 to 20 digits is read as a Discord user ID, and the XP that member earns afterwards is added to it. A username or any other name is not matched to anyone; it becomes a custom entry that no one's activity adds to.

The standard curve is the one MEE6 uses, so the same XP gives the same level: 4,675 XP is level 10 in both. The import posts no level-up messages and pays no level rewards. Role rewards don't carry over: set them up again as tier roles in level mode, and members get them the next time the leaderboard is redrawn. Then switch off leveling in the other bot, so members don't get two level-up messages.

How often the leaderboard updates

The leaderboard message in Discord is redrawn when someone reaches a new level or the order of the places it shows changes, at most once a minute, and otherwise about every 15 minutes while members are earning XP. A leaderboard nobody is active on is not redrawn. The Last updated line under it shows when it was drawn. My rank and the leaderboard on the website show XP within seconds.

Privacy

The bot never reads what members write. It does not use Discord's Message Content intent, and it never reads or stores the text of a message. For each member who earns XP it stores their Discord ID and display name, total XP, how many of their messages earned XP, how many minutes in voice earned XP and when XP was last earned, plus a nightly snapshot of their rank for the rank-history chart. Nothing is stored per message. The data is deleted with the leaderboard, and with the rest of the server's data when the bot is removed. If the server's economy pays currency for levels, each level reached also adds an entry to the member's currency ledger, which is kept with the rest of their currency data. The Privacy Policy has the details.

Control who can see your leaderboards on the Scoreboards website:

Public

Visible to everyone on the website.

Hidden

Only visible to members of your Discord server (requires login), and only server admins see it in the Leaderboards list.

Private

Only visible to members with a specific Discord role, and to server admins.

Disabled

Not shown on the website at all.

Automatically assign Discord roles to players based on their leaderboard ranking. For example, you could give the top 3 players a "Champion" role, ranks 4–10 a "Veteran" role, and so on.

  • Configure tiers from the web dashboard under each leaderboard's settings.
  • Choose how each tier is defined: by rank (ranks 1–3), by percentile (the top 10% of players), or by score (everyone with 2000+ points). A Levels (BETA) leaderboard can also use level (everyone at level 10 or higher). Every tier has its own mode, so one leaderboard can mix them.
  • Assign any existing Discord role to each tier.
  • Roles are automatically assigned and removed as rankings change. The bot changes them a few members at a time, at the pace Discord allows, so on a big server a change can take a few minutes to reach everyone.
  • The Scoreboards role must sit above every role it assigns in Server Settings → Roles. Discord blocks bots from managing roles at or above their own, and the bot will post a warning in the leaderboard's channel if it hits this.

Already running a competition somewhere else? A CSV file can fill a whole leaderboard in one go, so you don't have to retype anything.

Open the dashboard, select a leaderboard, and use Import from CSV. It is the same route for a server leaderboard and for a personal one, which has no Discord server behind it. Either way the file is the same — one name,score per line:

name,score
Alex,120
"Cooney, EM",95
Sam,88
  • A header row is detected and skipped automatically.
  • Commas, semicolons and tabs all work as separators — whatever your spreadsheet exports.
  • Names containing a comma work if they're quoted, like "Cooney, EM".
  • If a name is a Discord user id, that entry is linked to the member and shows their display name. Anything else becomes a custom entry.
  • The same name twice keeps the last value, so you can re-import a corrected file.
  • Rows that can't be read are skipped and listed by line number — the rest still import, so you can fix a couple of lines and run it again.

Times accept mm:ss, hh:mm:ss and an optional fraction: 1:30, 1:12:44.081. A plain number is read as milliseconds. Note that three colon-separated numbers mean hours:minutes:seconds, so write sub-second precision after a dot.

Levels (BETA) leaderboards take name,xp with each member's Discord user ID as the name — a username becomes a separate entry that never earns. The number is the member's total XP, and it replaces the XP they had. An import posts no level-up messages and pays no level rewards.

Limits: 500 rows and 100 KB per file — split larger exports and import them in parts. Image Rating leaderboards can't be imported, because their entries are uploaded images rather than scores.

Seasons let you draw a line under a competition without losing anything. Schedule an end time (or end it from the dashboard) and the board freezes: a podium is posted and the standings stay exactly as they finished.

  • Nothing is reset or deleted — the frozen board is the season's permanent record, visible to everyone.
  • A frozen board takes no new submissions, matches or votes; an admin can unfreeze it at any time to resume play.
  • Every board type can hold a season — including Image Rating, where freezing a blind-voting board also reveals the results.
  • Want a fresh season? Create a new board and let the frozen one stand as the record.

Weekly recaps post a short summary to a leaderboard's channel every Monday: the top three, the biggest climber of the week, and how much was played. Only boards with at least three scores in the past week get one, so a quiet leaderboard stays quiet. You can switch recaps off per leaderboard on the website dashboard.

An economy turns results into a currency that members spend in the server's shop. It is a beta, and it stays off until an admin sets it up and launches it from the dashboard under Economy — after that, every result your server approves pays the players. A payout is a flat base plus a share of a variable pool: part of the pool follows the result and part follows the surprise, so beating someone rated well above you is worth more than beating someone below you. On a Classic, Highscore or Time board there is no opponent, so your place on the board plays that part instead. It is one balance per member for the whole server, shared by every leaderboard in it.

  • A win streak adds 2% per win on top, up to the cap you set.
  • Playing the same opponent again and again pays less within a rolling week: the first two matches pay in full, and each one after that pays less, down to a tenth.
  • A daily cap limits what one member can take home in a day, and by default a Discord account has to be 7 days old before it earns anything.
  • Cancelling, editing or deleting a result takes the payout back, exactly as it was paid — so a reversal after the currency was spent can leave a balance below zero. Every line of it is visible on the server's shop page.
  • Image Rating boards pay nothing — there is no result to price.
  • Levels (BETA) leaderboards pay per level instead: a fixed amount each time a member reaches a new level, set in the leaderboard's Levels (BETA) settings and counted toward the daily cap.

Members spend it on the server's shop page. The page is for the server's members: they log in with Discord to see their balance, buy, choose what to wear and open any payout to see exactly how it was worked out. The Shop button under a leaderboard in Discord takes them straight there. Launching the economy can put it under every leaderboard at once, and each leaderboard has its own switch on its Discord tab in the dashboard.

That page lives at scoreboards.dev/shop/your-server, one per server, and the server's leaderboard pages link to it too. It sells five kinds of product. Discord roles are granted the moment a member buys, for good or, with rentals on, for a set time, after which the role comes off and the member can buy it again. Scoreboards has to sit above every role it sells in Server Settings → Roles, and the dashboard greys out a role it cannot hand out and says why. Board emojis sit next to the buyer's name on the server's leaderboards, on the website and in Discord. Names themselves are stripped of emoji on the boards, so a bought emoji cannot be faked by renaming. Name colours paint the buyer's name on the website and on picture leaderboards in Discord, but not on boards posted as a text embed. Rank rings — sixteen looks, from fire to galaxy — are drawn around the buyer's rank number, and row styles, which the admin designs from a colour, an outline and a fill, sit behind the buyer's whole row; both show where name colours do. A member can wear an emoji, a colour, a ring and a row style at once. Four more rings belong to a holiday — pumpkins for Halloween, frost for Christmas, confetti for New Year and eggs for Easter. An admin can stock them any time, but members can buy one only on its holiday (by the UTC date, the same day everywhere); the rest of the year the shop shows it as limited, and whoever bought one keeps wearing it all year. As soon as someone buys or equips something, the Discord leaderboards they are on redraw to show it.

A server can run currency seasons, separate from its leaderboard seasons. When one ends — on the length set in the dashboard, or when an admin ends it there — the next starts at once, and with halving switched on, every balance of 2 or more is halved first. Roles and items people bought are kept. Members see the end date on the shop page beforehand, and the end is posted in the log channel.

With prestige switched on, a member whose balance reaches the bar the admin set can burn all of it on the shop page for the next prestige level. The prestige level shows as a star and a number beside their name on the website leaderboard and the Discord card, survives every season end, and is announced in the log channel.

With rotating stock on, any shop item can have a start and an end date, set when you add or edit the product. Before the start the shop page shows it as coming; at the end it leaves the shelf and can no longer be bought.

With auctions on, an admin lists a role or a cosmetic from the dashboard and members bid on the shop page. A bid is taken when it is placed and returned the moment someone bids higher, and a bid in the last five minutes pushes the close back. When it closes the winning bid is destroyed, the prize is handed over and the result is posted in the log channel.

Setting it up takes four steps on the dashboard, under Economy, in Simple mode: name the currency; choose how members earn from three paces, each showing roughly what an active member makes in a week; stock the shop, with a one-click starter set of six name colours and six board emojis priced for that pace (this step can be skipped); and launch, with the beta box to tick and a Shop button under every leaderboard ticked by default. Products are added and edited under Economy → Shop, in a short three-step sheet with suggested prices and a preview. Advanced mode adds the payout numbers, who earns, the log channel, seasons, rentals, prestige, rotating stock and auctions. Admins hand currency out and take it back on the website — from a player's context menu on a leaderboard, or under Economy → Balances for a member who is on no board; both are posted to the log channel you pick, so nobody has to take a moderator's word for it. The currency is not money: it has no cash value, it does not leave the server it was earned in, and it can be reset at any time.

A personal workspace can run an economy too. Its members earn from their results and from tournament prizes, and spend it on the workspace's shop page — on name colours, board emojis, rank rings and row styles only, since a workspace has no Discord roles. Guests added by name have no wallet. Any login works, and someone who logs in with both Discord and Google is one account once they connect the two under Account.

A tournament runs a whole bracket in your server: knockout (with byes and an optional third-place match), groups + knockout, or double elimination with a grand final and an optional bracket reset — for players or teams. The bot posts one message per tournament in its channel, with the signup and check-in buttons, and the live bracket has its own page on the website.

  • Signup is first come, first served with a cap and a waitlist, or auto: the bracket is sized to whoever signed up when signup closes. An optional check-in drops anyone who hasn't checked in at the start.
  • Every match gets a private thread as soon as both sides are known. Both sides report the result; if they disagree, the organisers are pinged and decide. Organisers can decide any match at any time, from the thread, the dashboard or /tournament report.
  • Matches have a deadline. An unplayed match is settled by the tournament's rule: a single report stands, the higher seed advances, or both sides are out.
  • Optionally link a leaderboard to seed from its ratings and let the matches count on it, and — with the economy on — pay currency per match won (more each round) and for final places, outside the daily cap.
  • Players can also report on the tournament's page on the website: pick the result, and the other side confirms or disputes it there or in the thread. It is the same report either way.

Tournaments also run in a personal workspace, without Discord. Members join through a link and sign up with any login, Discord or Google. The organiser can add guests by name for people who never log in, and decides their matches. There are no channels, threads or roles: everything happens on the website, and the owner and the workspace's admins organise.

Set one up on the dashboard under Tournaments (Beta), or start a quick draft with /tournament create in Discord.