1. Volunteers
Availability is a comma-separated list of weekdays (Sat, weekends), slots (AM), both together (Sat AM), dates (2026-10-10) or any. Leave it out to mean any time. max is the most shifts that person will take. not: lists roles they cannot do.
2. Shifts
Role and number are optional (one person, role "Volunteer"). A date like Saturdays 2026-10-10 to 2026-10-31 repeats the shift every Saturday in that range.
Enter your volunteers and shifts, then click Build the roster.
Your roster
| Date | Slot | Role | Volunteers | Filled |
|---|
Fairness
| Volunteer | Shifts | Their max | Flag |
|---|
One volunteer
| Date | Slot | Role | With |
|---|
Reminder messages
How it is built
Order: the shifts with the fewest available people for each place are filled first, so a hard-to-cover shift is not left until everyone is used up.
Picking: for each place it chooses the available person with the fewest shifts so far, then the one with fewer other options, then the one listed first. Nothing is random, so the same input always gives the same roster.
Repair: if a place is still empty, it tries moving one shift from a candidate to someone else who can do it, which frees the candidate for the empty place.
Balance: a last pass moves a shift from the busiest person to someone with at least two fewer shifts, as long as that person can do it. It never changes how many places are filled.
Checked: a separate validator re-reads the finished roster and confirms nobody is double-booked, over their maximum, or on a shift they said they could not do.
Common questions
How do I make a volunteer schedule for free?
Type one volunteer per line with the days they can do, like Ana: Sat AM, Sun; max 3. List your shifts one per line as date, slot, role and how many people you need. Click Build the roster and the page assigns people to shifts, flags any place it could not fill, and lets you download a CSV, calendar files and reminder messages.
How does it decide who gets which shift?
It fills the hardest shifts first, meaning the ones with the fewest available people for each place. For every place it picks the available person who has the fewest shifts so far. If a place is still empty it tries moving one of a candidate's shifts to someone else, and a final pass moves shifts from the busiest people to those with at least two fewer. There is no randomness, so the same input always gives the same roster.
Will it ever double-book a volunteer?
No. Nobody is put on two shifts in the same slot on the same day, or on two slots whose times overlap if you gave them times. A separate checker re-reads the finished roster and confirms nobody is double-booked, over their maximum, or on a shift they said they could not do.
What happens when there are not enough volunteers?
The places it cannot fill are listed with the reason, such as nobody available or everyone available already at their maximum, and they show as UNFILLED in the CSV. The report also lists who is over- or under-loaded so you know whom to ask for one more shift.
How do I send each volunteer their shifts?
Copy the reminder messages and paste them into email or a group chat, or download a calendar file for one volunteer and send it to them. The calendar file opens in Google Calendar, Apple Calendar and Outlook.
Can I share the roster setup with a co-organiser?
Yes. Copy share link puts your volunteers and shifts into the part of the web address after the hash, which browsers do not send to any server. Anyone you give that link to can open it and see the same names, so send it only to people who should see them.
Is my volunteer list uploaded anywhere?
No. Everything is calculated in your browser from what you type, nothing is sent to a server, there are no accounts, and it works offline once the page has loaded.