Random team generator — split a list of people into fair teams

Paste one name per line, choose how many teams you want or how big each team may be, and the tool shuffles everyone and deals them out so no team is more than one person bigger than another.

Live demo · real result from this tool
Split by

Press Generate to create a result.

Processed on your device — nothing is uploaded.

How to use the random team generator

  1. Paste or type the names in People, one per line. Blank lines are skipped.
  2. Under Split by, choose Number of teams or Team size.
  3. Enter the Number of teams (2 to 50), or the People per team (at most) (1 to 100).
  4. Press Generate teams. Each team appears on its own line with its size, and a table below can be copied or downloaded as teams.csv.

What it does and when to use it

Use this for a PE lesson, a five-a-side game, a pub quiz, a hackathon or workshop breakout rooms: paste the class list or sign-up sheet, decide how many teams the game allows, and read out the result.

If your groups need names such as Red, Blue and Green, or should be called rooms or tables, the random group assigner lets you type the group names. Once you have teams, the tournament bracket generator can draw the fixtures, and the spinner wheel is a fun way to pick which team starts.

How it works

The tool shuffles the whole list with a Fisher–Yates shuffle. Each swap uses a random whole number from crypto.getRandomValues, so every order of the list is equally likely.

It then deals the shuffled names like playing cards: the first name to Team 1, the second to Team 2, and so on, going back to Team 1 after the last team. Dealing this way is what keeps the sizes within one of each other. If the list does not divide evenly, the extra people always land on the lowest-numbered teams.

In Team size mode the number of teams is the number of people divided by your limit, rounded up, and the teams are then balanced.

Worked examples

Twelve people, at most five per team. With the 12 sample names and Team size set to 5, the tool needs three teams (12 ÷ 5 = 2.4, rounded up). It deals four people to each, so the output reads Team 1 (4), Team 2 (4) and Team 3 (4). The names inside each team change every time.

Ten people in three teams. Ten names with Number of teams set to 3 always gives Team 1 (4), Team 2 (3) and Team 3 (3). Who ends up in the team of four is random.

Too few people. Two names and 3 teams returns “You asked for 3 teams but listed only 2 people.” instead of an empty team.

Limits and tips

  • At least two people are needed, and you cannot ask for more teams than people.
  • The same name typed twice counts as two people; clean the list with remove duplicate lines first.
  • If others will check the draw, agree the list and settings first and keep the first result.
  • To shuffle a list without splitting it, use the list shuffler.
  • Names are processed on your device and are not sent anywhere.

Frequently asked questions

Why is one team bigger than the others?
Your list does not divide evenly. Ten people in three teams cannot be 3.33 each, so the tool makes one team of 4 and two of 3. Sizes never differ by more than one person.
What does "People per team (at most)" do?
It works out the number of teams for you. The tool divides the number of people by your limit and rounds up, then balances the teams. Twelve people with a limit of 5 gives 3 teams of 4, not two teams of 5 and one of 2.
Is the split fair?
Yes. The list is shuffled with your browser's crypto.getRandomValues source before anyone is dealt out, so every person has the same chance of landing on any team.
Can I keep certain people apart or balance by skill?
No, it only knows names. For skill balance, sort players into tiers yourself, run each tier separately, then combine Team 1 from each run, and so on.

Written by the ToolsRift team · Last updated

Pages are drafted with AI assistance and checked by automated tests. How we write and check pages.

Was this tool useful?

Report a problem

Start typing to search every tool.

↑ ↓ to moveEnter to openEsc to close