Volunteer Rota Builder
Paste the dates or shifts you need to cover, then your volunteers with the dates each one cannot do, and get a rota that fills every slot from whoever is actually free — never putting somebody on a date they ruled out. It shares the load by always picking whoever has done fewest so far, prints a count per person so the spread is visible instead of asserted, and shouts about any slot it could not fill rather than quietly leaving it short. You can also keep two people apart or insist a driver and a helper go together. Everything runs in your browser: no account, and no names leave your device.
Try it now
Worked example
Inputs
- Dates or slots to cover — one per line, exactly as you want them printed
Sun 5 Apr Sun 12 Apr Sun 19 Apr Sun 26 Apr Sun 3 May Sun 10 May Sun 17 May - Volunteers — one per line: name | the slots they CANNOT do, comma-separated
Ana | Sun 12 Apr, Sun 19 Apr Ben | Sun 26 Apr Cara Dan | Sun 5 Apr, Sun 3 May Erin | Sun 5 Apr, Sun 12 Apr Femi | Sun 10 May, Sun 17 May - People needed per slot
2 - Pairing rules — one per line: name | name | together (or: name | name | never)
Dan | Erin | together Ana | Ben | never
Frequently asked
How is this different from a chore rota?
A chore rota rotates jobs around a household who are all there every week, so a fixed shuffle is enough. A club rota is a harder problem: people are away. This tool takes each volunteer's unavailable dates and treats them as absolute, so the rota is built only from the people who can actually turn up — and where that leaves a gap, it says so.
Why does it ask when people CANNOT do rather than when they can?
Because that is the list people can actually give you. Someone knows they are away for two weekends in April; nobody is going to tick forty dates they could do. Anything not listed as unavailable is treated as available.
Is the workload shared out evenly?
Only within one very specific promise: if everyone is free for every slot, there are no pairing rules, and you need no more people per slot than you have volunteers, then every person's count is within one of every other person's. As soon as real unavailability is involved, no such guarantee is possible — somebody free for every date will do more than somebody free for two. That is why the tool prints a count per person, and names anyone carrying more than the rest along with how many slots they were the only one free for.
What happens if a slot cannot be filled?
It is printed short, in a block of its own, with the reason: nobody free, not enough people free, or the pairing rules left no workable combination. It is never filled by scheduling somebody who said they could not come.
Can I keep two people apart, or insist two are on together?
Yes — one rule per line, as "name | name | never" or "name | name | together". Where a rule cannot be honoured the tool says so plainly instead of quietly ignoring it: a group tied together that is bigger than the number needed per slot is dropped with a note, and if the same two people are listed as both "together" and "never", the "never" is kept and the "together" is dropped. Because the rota is filled slot by slot, a slot that could only work with some different combination is reported short rather than searched for.
Does it understand the dates?
No, and it does not try. The slots are plain labels printed in the order you typed them, so "Sunday morning", "Fixture 3" and "Sun 5 Apr" all work the same way. That also means a volunteer's unavailability has to be spelled the same as the slot — anything that does not match is listed as unmatched rather than silently dropped.
How does it decide who gets a slot?
Whoever has done fewest slots so far. If two people are level, it goes to whoever is free for fewer slots overall — someone who can only manage one date should get that date rather than lose it to someone free for all of them — and anything still level is settled by the order you typed the names.
Will it give me a different rota if I run it again?
No. Same input, same rota, character for character. There is no randomness anywhere in it — a rota that reshuffles every time you press the button is one nobody will trust.