Built by a curler, for curlers. No accounts. Your roster stays in your browser — refresh the page to erase it. Anonymous, cookieless visit analytics only.
Paste one player per line. Format:
Name, primary, secondary, flags, experience
(everything after the name is optional). Flags: flex, recent.
Experience is an optional integer 1–10 or a prefixed form like exp:7.
Example: Sarah, third, skip, flex, 8
Import players from an Excel workbook (.xlsx) or
CSV (.csv) file. Each sheet is treated as a competition
or league. The file must have a Name column and may
optionally include Position and Experience
columns — extra columns are ignored.
Position is matched case-insensitively to
skip / third / second / lead. Leave the cell blank, or type
any (also flex, flexible,
anywhere, or *) for a player who can be
placed anywhere.
Experience (also recognised: Level,
Skill, Rating, Grade) is an
integer 1–10 used by the Balance draw by → Experience mode.
Blank cells default to 5 (median) so unrated rosters still balance
sensibly. Values outside 1–10 are ignored.
💡 Tip for the fairest, most varied draws: only mark
the players who must be Skips in the Position
column and leave everyone else blank. Locking players to Third / Second
/ Lead reduces the number of valid team combinations, so the same
lineups tend to repeat. Skip designation is the only position the
algorithm treats as a hard constraint — everything else balances best
when the generator is free to shuffle.
Select one sheet to add its players to the currently active tab, or select
multiple sheets to create a separate competition tab for each
sheet — so Trophy 1 and Trophy 2 stay as independent draws.
Everything is parsed locally in your browser — the file
is never uploaded anywhere.
Name
Position
Experience
Sheet
No players yet. Add some above to get started.
2 · Teams
No draw yet
Competition:Click a tab to switch between draws
Balance draw by:
…
Drawing names…
Substitutes
Players who couldn't be placed on a complete team this draw.