gg
Home › Home › Volunteer Rota Builder
Home

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

Volunteer rota — 7 slots, 6 volunteers, 2 per slot ROTA Sun 5 Apr Ana, Femi Sun 12 Apr Ben, Cara Sun 19 Apr Dan, Erin Sun 26 Apr Ana, Femi Sun 3 May Ben, Cara Sun 10 May Dan, Erin Sun 17 May Ana, Cara Every slot is fully staffed. PER-PERSON COUNT Ana 3 (free for 5 of 7 slots) Ben 2 (free for 6 of 7 slots) Cara 3 (free for 7 of 7 slots) Dan 2 (free for 5 of 7 slots) Erin 2 (free for 5 of 7 slots) Femi 2 (free for 5 of 7 slots) SPREAD Nobody is more than one slot above the least-loaded volunteer (2). Nobody above is placed on a slot they listed as unavailable. That rule is never traded away to fill a gap — a slot that cannot be filled is printed as short instead. Same input, same rota. Nothing here is random: whoever has done fewest so far goes first, ties go to whoever is free for the fewest slots, and anything still tied is settled by the order you typed the names — so regenerating gives byte-identical output. Even loads: when every volunteer is free for every slot, there are no pairing rules, and you need no more people per slot than you have volunteers, every count above is within one of every other. Once real unavailability is involved no such guarantee holds, and the counts above — not this paragraph — are the honest answer. Pairing rules are applied slot by slot as the rota fills. Where a full slot would only be possible with a different combination, the slot is reported short rather than searched for. Slot labels are plain text. This tool never reads them as dates, so it cannot know which one is next week, and it will not reorder them. It runs in your browser — no account, and no names leave your device.

Inputs

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.

Related Home tools