Volunteer Shift Schedule Generator
Volunteer scheduling has one property paid rotas do not: almost everybody is unavailable for most of it. People offer two days out of five, and the job is to cover every slot from a patchwork of availability without asking the same three reliable people to do everything. This works from the availability you have, fills what it can, and shows plainly where the cover is genuinely short — which is the number a volunteer coordinator actually needs.
What this generator does
Turns availability into a schedule. The volunteer picker on this site chooses somebody at random for a single job; this covers a whole event. It never schedules anybody on a day they blocked, keeps the totals level so the willing few are not quietly carrying it, and reports unfilled slots as a recruitment problem rather than silently under-staffing a shift.
How to use this tool
- List volunteers, adding the days they cannot do after a colon.
- List the shifts as “Name, how many people”.
- Set how many days the event runs.
- Build it, then send people their days.
Understanding the controls
- Volunteers and the days they cannot do
- One per line, with unavailable days after a colon — “Ada: 3, 4”. For volunteers this is usually most of the list, and that is fine.
- Shifts and how many each needs
- One per line as “Name, number”. Two shifts a day covering morning and afternoon is the common shape.
- Days
- How long the event runs. The page shows the total slots that need covering.
- Clear days between shifts
- Usually zero for a short event — volunteers often want consecutive days. Raise it for something long enough that people need a break.
Worked examples
- 10 volunteers, 6 slots a day, 7 days
- Every slot filled, totals within one of each other.
- Half the team unavailable at the weekend
- The weekend is covered by whoever is left, or shown short.
- One volunteer available every day
- Not scheduled every day — the fairness ordering spreads it.
- More slots than availability
- The shortfall is counted and stated as a recruitment number.
Common use cases
- Staffing a festival, fete or open day from a sign-up sheet
- Covering a charity shop or a community space over a week
- Scheduling helpers for a school event where everybody has other commitments
- Working out whether you have enough volunteers before you promise the cover
- Rebuilding quickly when several people drop out at once
How this generator works
Every slot is filled from whoever is available that day and has not already been scheduled on it, preferring whoever has done fewest of that shift so far. Because availability is the binding constraint for volunteers rather than rest, the default gap is zero and the scheduler leans on the fairness ordering to spread the load. Where nobody is available, the slot is left short and counted, and the page states the total so it can be turned into a specific ask.
Randomness and fairness
Randomness breaks ties between volunteers who have done the same number of shifts, so the same availability produces a different but equally fair schedule each time. Availability and cover are hard constraints and are never affected by the draw.
For how randomness is produced across the whole site, see how Generate Random works.
Assumptions this tool makes
- Anybody can cover any shift, and everybody not marked unavailable is genuinely available.
- One shift per volunteer per day.
Limitations and good to know
- It has no concept of roles or training — anybody can do any shift, which is often untrue for a first-aider or a till.
- It cannot know who is reliable. Every volunteer is treated as equally likely to turn up.
- Shifts are whole days rather than hours, so a two-hour slot needs modelling as its own shift.
- Nothing is saved between visits, so copy the schedule before you close the page.
Common mistakes
- Entering availability instead of unavailability
- The list after the colon is days somebody *cannot* do. Getting it backwards produces a schedule that is exactly wrong.
- Treating a shortfall as something to solve by rebuilding
- If there is not enough availability, no arrangement of it will cover the slots. The number is the ask: that many more people, or that much less cover.
Practical tips
- Collect availability as unavailable days — people find that easier to give accurately.
- Send each volunteer only their own days; the full grid invites renegotiation.
- Build it again the moment somebody drops out rather than patching by hand.
Privacy and your data
Volunteer names and availability stay in your browser. Nothing is uploaded, nothing is stored between visits, and no name is written into the page address. Analytics records that the tool ran and how many assignments were made, never a name.
Frequently asked questions
- How is this different from the shift rota generator?
- Same underlying mechanics, different default shape. This one assumes availability is the binding constraint rather than rest, so it starts with no rest gap and more people, which is what volunteer scheduling actually looks like.
- Can I make sure specific people work together?
- Not here — there is no pairing constraint. Schedule the pair as a single named entry if they always work as one.
- What if somebody is available but never gets scheduled?
- That means there were enough people ahead of them on the fairness ordering. Over a longer event it evens out; over a short one, reduce the cover or accept it.
Related generators
- Shift Rota GeneratorBuilds a staffing rota that covers every shift, honours days off and rest gaps, and shares the unpopular shifts out.
- Volunteer PickerPicks one name from your list to volunteer for something.
- Duty Rota GeneratorBuild a duty rota across several rounds where everyone takes every duty once before anyone repeats one.