Scheduling How-To By , Founder & CEO of XShift AI Published September 16, 2026

How to Make an Employee Schedule in Google Sheets:
The Formulas, the Sharing Settings and the Hand-Off to Google Calendar

Every formula, every sharing setting, and the two tabs that keep the week honest. Then what to do when six people can all edit the roster.

To make an employee schedule in Google Sheets, open a blank sheet and give it two tabs. Write each of your shift times once on a tab called Shifts, with a one-letter code beside it. On a second tab called Week, put the seven dates across the top and your people down the left, then type one shift code into each cell. Add a formula in the last column turning those codes into hours, and rows underneath counting who is on each shift each day. Then press Share, set General access to Anyone with the link, leave the role as Viewer, and text the link to your team.

That is the short version. A staff schedule, a work schedule and a shift schedule are one document with three names, so the seven steps below also answer how to make a work schedule in Google Sheets, and how to make a schedule for employees who all work different days. The example running through the page is a coffee shop with eight people, open 6:00 to 20:00, seven days a week.

How to make an employee schedule in Google Sheets, in 7 steps

You make an employee schedule in Google Sheets by separating two things people mash together: the shift times, and who works them. Your shift times barely change. Who works them changes every week. So the times get their own tab and a one-letter code, and the week becomes a grid of letters.

Anyone working out how to create an employee schedule for the first time types 6am-2pm into every cell. Do not. A cell holding text cannot be counted, and by Thursday you have four spellings of the same shift.

  1. Open a blank Google Sheet and make two tabs

    Go to sheets.new. Name the first tab Week and the second tab Shifts. Shifts holds your times once. Week holds who works them.

  2. Write your shifts down once, with a one-letter code

    On the Shifts tab put Code, Start, End and Hours across row 1, then one row per shift, such as O for 6:00 to 14:00.

  3. Put the week across the top of the Week tab

    Type the week start date in B1. Put =B1 in B2, =B2+1 in C2, and drag it to H2. Format row 2 as a date.

  4. Put your people down the left

    One name per row in column A, starting at A3. Keep the order the same every week so people find their own row without reading.

  5. Type a shift code into each cell

    Put the letter for the shift that person works that day. Blank means a day off. One letter per cell, never a time.

  6. Add the hours column and the coverage rows

    Total each person in column I, and add three rows under the names counting how many people are on each shift each day.

  7. Share the sheet and text the link to your team

    Press Share, set General access to Anyone with the link, set the role to Viewer, copy the link and send it to your team.

Tab 1: Shifts

      A       B       C       D
1     Code    Start   End     Hours
2     O       6:00    14:00   8
3     M       10:00   18:00   8
4     C       12:00   20:00   8

Tab 2: Week

      A            B      C      D      E      F      G      H      I     J
1     Week of      9/21/2026
2     Name         Mon21  Tue22  Wed23  Thu24  Fri25  Sat26  Sun27  Hours
3     Priya        O      O      O      O      O                    40
4     Dev          C      C      C      C             C             40
5     Marisol      M             M      M             M      M      40
6     Omar         O      O                    O      O      O      40
7     Hana                C      C      C      C             C      40
8     Leo          C                    O      C      C             32
9     Tess                       O             M      M      C      32
10    Ray          M      M                    O             O      32
11
12    On the open  2      2      1      1      2      2      2            2
13    On the mid   1      1      1      1      1      1      1            1
14    On the close 2      1      2      2      1      2      2            2

Read row 12 across. Wednesday and Thursday have one person on the open when you need two, and the doors open at six either way. That is why the coverage rows exist, and I would build them before typing a single name, because a hole is easier to see in an empty grid. Copy the tab four times for how to make a monthly schedule in Google Sheets: one tab per week, same formulas, a different date in B1.

The five formulas that do the work

Five formulas turn that grid into a schedule that counts itself. Each goes in one cell and gets dragged. Type them exactly as written. The dollar signs stop a formula sliding off its target.

Copy these five, in this order

5 formulas

1. Week tab, cell C2, then drag across to H2

=B2+1

The next day’s date. Google Sheets counts a date as days since December 30, 1899, so adding 1 really does add a day. Change B1 next Sunday and the whole week moves.

2. Shifts tab, cell D2, then drag down

=MOD(C2-B2,1)*24

The length of that shift in hours. It returns 8 for a 6:00 to 14:00 open. MOD is there so an overnight 22:00 to 6:00 returns 8 instead of minus 16. Time is stored as a fraction of a day, so ×24 gives hours.

3. Week tab, cell I3, then drag down the names

=SUMPRODUCT(COUNTIF(B3:H3,Shifts!$A$2:$A$4),Shifts!$D$2:$D$4)

This is how to add up hours in Google Sheets with no helper column. It counts each shift code on that row, multiplies by that shift’s length, and adds the results. Five 8-hour shifts returns 40. Type a sixth letter and it says 48.

4. Week tab, cell B12, then drag across and down to H14

=COUNTIF(B$3:B$10,$A12)

How many people are on that shift that day. Put the shift code in A12 to A14 and the number you need in J12 to J14. Monday shows 2 on the open. Wednesday shows 1, which is the hole.

5. Format, then Conditional formatting, custom formula

=I3>40

This is how to highlight overtime in Google Sheets. Apply it to I3:I10 and the cell turns red the second somebody crosses 40 hours. Add a second rule over B12:H14 with =B12<$J12 and any short day goes red too.

Formulas three and five are the reason to build this in a spreadsheet at all. You get told about an extra shift while you are still typing it, which is the only moment all week when changing it is free. For example, let’s say Priya is on five opens, so column I reads 40. You add her to Saturday’s close. It reads 48 and turns red, and you move the shift to Ray before you have committed to anything.

Those eight hours are not small. At the $15.24 median hourly wage for food and beverage serving workers (Bureau of Labor Statistics, May 2025), an hour past 40 pays $22.86. 8 × $22.86 is $182.88, and 8 × $7.62, or $60.96, is the extra half that buys nothing.

How to share a schedule with employees so they open it on a phone

You share a schedule with employees by pressing Share at the top right, setting General access to Anyone with the link, and leaving the role as Viewer. That is the whole thing. It is also the one job a Google Sheets employee schedule does that a spreadsheet on your laptop cannot: the sheet lives at one address, everybody opens that address, and the version they see is the version you are looking at right now.

Google gives you two general access choices. Restricted means only people you have named can open the file. Anyone with the link means anyone holding the link can use it, without signing in to a Google account. For an hourly team that second one is usually the honest choice, because half your staff do not have a work email and will not make one to read a rota.

I would never put a whole team on Editor, not once and not as a favour, because the person who wipes out Friday is never the person you expected.

The five settings, and what to set each one to

Share, then General access

Anyone with the link

Everyone opens it without a Google account.

The role on that link

Viewer

The only setting that stops somebody typing over the roster.

Data, then Protect sheets and ranges

Restrict who can edit this range

For the two shift leads who really do need to edit.

Tools, then Notification settings

Any changes are made, Email right away

An email the moment anyone changes a cell.

Right-click a cell, Show edit history

After the fact

Who last changed that cell, and when.

Two of those come with a warning from Google itself. On protected ranges, Google says range protection is not a security measure, because people can still print, copy, paste and export the spreadsheet (Google Docs Editors Help). On history, Google says some changes might not show up in the edit history, naming added rows and columns, format changes and anything a formula produced (Google Docs Editors Help).

A schedule eight people can all edit is not a schedule. By Wednesday nobody can tell you which version of Friday is real, and the edit history will not always tell you either.

How to use Google Calendar to schedule employees

You use Google Calendar to schedule employees by turning the finished week into a file and importing it. Google Calendar has no grid. Make a fourth tab, put the headers Google Calendar expects across the top, and write one row per shift. Then go to File and Download, choose the comma separated values option, open Google Calendar, and go to Settings and then Import and export.

Only two columns are required. This tab is the closest thing to how to make a shift calendar in Google Sheets that actually leaves the spreadsheet.

Tab 4: Calendar

Subject,Start Date,Start Time,End Date,End Time,Location
Priya - Open,09/21/2026,06:00 AM,09/21/2026,02:00 PM,Brightline Coffee
Dev - Close,09/21/2026,12:00 PM,09/21/2026,08:00 PM,Brightline Coffee
Ray - Mid,09/21/2026,10:00 AM,09/21/2026,06:00 PM,Brightline Coffee

Subject and Start Date are the only two Google requires. Start Time, End Date, End Time, All Day Event, Description, Location and Private are optional.

Plan around one thing first. Google says repeating events imported from a CSV might not stay repeating, and arrive as a series of one-time events. A pattern that runs every Monday for three months lands as thirteen entries, and changing it later means changing thirteen. So I would not import a pattern at all. Import one week, every week.

Sharing the calendar itself is the better half of this. Under Settings and sharing you add people one at a time and pick from five access levels, from See only free and busy, through See event details, up to Make changes and manage sharing. Pick See event details. They see the shifts, they cannot move them, and a change you make moves on their phone too.

Where a shared Google Sheet stops working

A shared Google Sheet stops working at the point where the schedule starts changing after you publish it. Building the week is the easy half. The sheet is good at it. The hard half is the six days afterwards, when people swap, call off, remember they are away, and read a link that was correct on Monday. Here is one ordinary week.

Sunday night

You build the week and text the link.

The sheet holds no record of who can work when, so availability comes out of memory.

Omar told you in June he cannot do Tuesday mornings. You put him on Tuesday’s open. That is 1 of 35 shifts, and you hear about it at 6:04 on Tuesday morning.

Tuesday 6:04am

Omar is not there and the doors are open.

There is no list of who is allowed to take the shift, so the shortest path is you.

You work the open yourself. 8 × $33.36, the median for food service managers, is $266.88 of your own time, and nothing you planned happens.

Wednesday

Marisol and Leo swap Friday between themselves, in the sheet.

Nothing adds either week back up. Two cells changed and no total was rechecked.

Marisol drops to 32 hours and saves you nothing. Leo climbs from 36 to 44, and those 4 hours cost $22.86 each instead of $15.24. That is 4 × $7.62, or $30.48, for a trade you were never part of.

Thursday

You move Saturday’s close an hour earlier and edit the sheet.

Google Sheets tells nobody a cell changed, and the email rule emails you, not the team.

Tess read the schedule on Monday and has not opened it since. She arrives an hour late on the busiest day of the week, and the close runs a person short through the rush.

Saturday 4:40pm

Hana calls off the Saturday close.

There is no list of who is free, qualified and under 40 hours, so you work down your phone.

Twenty minutes of texting during service. Priya says yes and she is already at 40, so all 8 hours pay $22.86, and 8 × $7.62, or $60.96, buys you nothing.

The year

That week was not unusual. It is most weeks.

Nothing in the file ever counted any of it.

One covered call-off a week is $60.96 × 52, which is $3,170. Five hours a week of your own time is 260 hours, and 260 × $33.36 is $8,674. So $3,170 + $8,674 is $11,844 a year, at one shop.

None of that is unusual. The Shift Project at the Harvard Kennedy School surveys service-sector workers on exactly this. 60 percent get less than two weeks of notice. 57 percent face last-minute changes to the timing of a shift. 27 percent work on-call, and 13 percent have shifts cancelled outright (The Shift Project). The same research links that instability to worse sleep, more psychological distress and higher job turnover. So the Thursday change Tess never saw is one of the reasons you are hiring again in March, and a replacement costs more than every overtime hour on this page put together.

What nothing in the spreadsheet is checking

Nothing in a spreadsheet checks whether the person you just typed into a cell is allowed to work that shift. Knowing how to make a staff schedule and knowing whether the one you made will survive the week are two different jobs, and a spreadsheet only does the first. It cannot refuse. So every one of these lives in your head, for every person, on every shift.

Checked from memory, every cell

11 checks
Whether they work at this location
Approved time off on that date
Days they can never work
Hours of the day they blocked off
A shift they already have that overlaps
Whether they hold the role the shift needs
Whether this shift takes them past 40 hours
How many days in a row they have already worked
How many hours since their last shift ended
Two people who should never share a shift
What the day or the week costs against a budget

Eight people and three shifts is 35 cells a week. Eleven checks on 35 cells is 385 decisions, made from memory, on a Sunday night, in a file that will never once tell you when you got one wrong. Eight to ten people is where I would stop. Past that I have never seen a shared sheet last a month without somebody working a shift they should not have.

Every one of those eleven is a question XShift AI asks before a name lands on a shift. You do not check them. You ask for the schedule, and the checking is the part you never see.

You type

“Build the schedule for this month”

Asked about every person, on every shift, before it is filled

11 answered

Which site they belong to

Time off you already said yes to

The days they told you they cannot work

The hours of the day they keep clear

Another shift already on them at that time

The role the shift calls for

Whether this one tips them over 40

Their run of days without a day off

The gap since they last clocked out

Pairs you keep off the same shift

What the day or the week costs against what you set aside

Six of those are wired into the AI Copilot and are asked whether you want them or not. The other five are sentences you write once, such as “no more than five days in a row”, and Autopilot keeps asking them on every shift after that. A shift that fails any of the eleven is refused before it is saved, not coloured afterwards.

A different solution when six people can edit the roster

The different solution is to stop handing out a link and give every person their own way in. XShift AI is employee scheduling software built around that: the week lives in one place, each person signs in and sees only their own shifts, and the facts a spreadsheet cannot store sit on the people they belong to. Nobody holds a copy, so none goes stale.

Whoever can edit the roster can do anything to it

A shared sheet knows three levels of trust, and they cover the whole file: view it, comment on it, or edit it. There is no way to let a shift lead add shifts but not delete a week, approve time off but not touch pay, or run one location and not the other. The sheet has no idea what a shift is, so it cannot hand out power one job at a time. Whoever you make an Editor can rewrite any cell on any tab, and by default can share the file onward.

That is where the power imbalance comes from. A lead at Riverside can change Northside’s Saturday. Two managers hold equal power over everything, or one of them holds none, because those are the only two settings. You can protect a range so only named people edit it, and Google’s own help page says that should not be used as a security measure, because anyone with the file can still copy it, print it and export it. In XShift AI a head manager sets fourteen permissions for each manager, one at a time, and picks which locations they run. A lead who should only cover shifts gets exactly that and nothing else.

Fourteen switches, set per manager, not per file

Plus the locations each one is allowed to run. A manager with three switches on can do three things.

Create shiftsEdit shiftsDelete shiftsApprove time offDeny time offApprove shift tradesEdit employee profilesCreate employeesCreate announcementsCreate group chatsExport payroll dataSave shift templatesView workforce insightsManage Autopilot

Set them by hand, or say it. Tell the AI Copilot “let Priya approve time off at Riverside only” and it writes back the exact list it is about to switch on, and the locations it is limiting her to. Nothing changes until you confirm.

The same week, with each break already answered

Take the five things that went wrong that week and put each next to what stops it. In every case the stop happens earlier.

Sunday in the sheet

You put Omar on Tuesday’s open, because nothing in the file remembered June.

What stops it

Omar keeps his own days and hours in his login. The generator reads the days he can never work and the windows he blocked off before it will consider him, so June still counts in September.

Tuesday in the sheet

Omar was not there and you worked the open yourself, because there was no list of who else could.

What stops it

A dropped shift is worked down a list in a fixed order: not at that location, no role, day unavailable, hours blocked, stopped by your own rule, already working, on approved time off. Under 40 hours goes first.

Wednesday in the sheet

Marisol and Leo traded Friday between themselves and nothing added either week back up.

What stops it

A trade is tested while it is being asked for. Role, location, a shift that already overlaps, and the 40-hour line. Leo never reaches 44, because the trade is refused before it exists.

Thursday in the sheet

You moved Saturday’s close and Tess never found out, because she was reading Monday’s link.

What stops it

There is no link. Publish the week and everybody holding a published shift is told, so long as publish notifications are on. A day still short of people stays in draft.

Saturday in the sheet

Hana called off and you spent twenty minutes texting, then paid Priya time and a half.

What stops it

Once coverage is on, the shift goes to the first person who clears every check if it is far enough out, or to all of them in one tap if it is not. If nobody clears, every manager is emailed the names and the reasons.

Those stops come from two places. Location, approved time off, the days somebody can never work, the hours they blocked, a shift they already hold and the role needed are wired into the schedule generator, and run whether you ask or not. Everything past that is yours to write as a sentence: an hour ceiling, a rest gap, a cap on days in a row, two people kept apart, a limit on what a day or a week can cost. Ask for Fair mode and the hours land evenly. Ask for Max mode and the people who want the most get the most.

What “updates automatically” actually means

Hours recount the instant anything moves. A trade that breaks a rule is refused instead of recorded. A dropped shift is covered without you picking up the phone, once coverage is on. A time off request is answered the moment it is sent. You open nothing for any of it. More on trades in how to handle shift swaps.

Google Sheets against XShift AI, for the same week

An employee schedule spreadsheet is a very good way to draw a week and show it to people. It is not a way to hold one, because holding a schedule means refusing the shift that breaks a rule, and a spreadsheet cannot refuse anything.

The jobGoogle SheetsGoogle CalendarXShift AI
Build the weekYou type a code into every cellNot built for a gridYou type one sentence and it fills the shifts you already have
Total each person’s hoursA formula you write and maintainNoCounted before a name is placed on a shift
Put it on everyone’s phoneOne shared link, Viewer or EditorShare the calendar, five access levelsEach person logs in and sees only their own shifts
Check who is allowed to work itNothing is checkedNothing is checked11 checks run before the name goes on
Hold availability and time offA tab you read by handNoSet by the person, read by the software every time
Handle a swapTwo people retype two cellsNoRole, location, overlap and the 40-hour line all checked
Cover a call-offYou text people until one says yesNoAutopilot works the list, once switched on
Tell the team it changedOnly if you set an email ruleGuests see the event moveEveryone assigned is notified when the week publishes
PriceFreeFree$29 a month plus $1 per active user after the first, after a 21-day free trial

XShift AI is $29 a month plus $1 per active user after the first, after the free trial of 21 days. Every manager counts as a user.

8 staff and 1 owner is 9 users: $29 + (8 × $1) = $37 a month

$37 × 12 is $444 a year, against the $11,844 that week costs the coffee shop. That is about 27 to 1.

40 staff and 3 managers across three sites is 43 users: $29 + (42 × $1) = $71 a month

$71 × 12 is $852 a year, and a team five times the size runs five times the texting. Each person is attached to the sites they work, and coverage only ever offers a shift to people attached to that one.

Keep the sheet open while you try it. Paste your staff list into the AI Copilot, or upload a photo of it.

Build one free, then open it in Google Sheets

Let something else build your week and compare it to yours. The free employee schedule generator takes four lines in plain English, no account, no email and no card, and fills a week using the same engine paying teams use. Describe who you have, your shifts, how many you need on, and any rules. Then press Build once. You end up with a free employee schedule in Google Sheets in about two minutes.

What comes back is a comma separated values file, which is what Google Sheets opens. Go to File and then Import, pick the file, and choose Insert new sheet. You get a grid with one row per shift time and one column per day, open slots marked, and everybody’s hours listed underneath it.

It builds one week at a time, one location at a time, and caps at 20 people. Do you want a template instead? There is a free employee schedule template. And if your team is on Office, the same two-tab build works in Excel.

Build next week’s schedule free, with no sign-up

Frequently asked questions

How do I make an employee schedule in Google Sheets?

Open a blank sheet at sheets.new and make two tabs. On a tab called Shifts, write each shift time once with a one-letter code. On a tab called Week, put the dates across row 2 and your people down column A, then type a shift code into each cell. Column I totals each person with =SUMPRODUCT(COUNTIF(B3:H3,Shifts!$A$2:$A$4),Shifts!$D$2:$D$4). Then press Share, choose Anyone with the link, and leave the role as Viewer.

How do I make a work schedule in Google Sheets that updates automatically?

Drive every date off one cell. Put the week start date in B1, =B1 in B2, =B2+1 in C2, and drag it across. Google Sheets counts a date as days since December 30, 1899, so adding 1 adds a day and changing B1 moves the whole week. For totals that recount themselves, use SUMPRODUCT with COUNTIF per person and COUNTIF per shift.

How do I share a Google Sheets schedule with my employees?

Press Share at the top right. Under General access choose Anyone with the link, because most hourly staff do not have a work Google account. Leave the role as Viewer so nobody can type over the roster, then text the link to the team. Add the one or two shift leads who need to edit by email, as Editors.

How do I stop employees editing the schedule in Google Sheets?

Share the sheet as Viewer instead of Editor, the only setting that actually stops an edit. If some people need to edit part of it, go to Data and then Protect sheets and ranges, pick the cells, and choose Restrict who can edit this range. Google notes range protection is not a security measure, because people can still print, copy, paste and export the file.

How do I see who changed my Google Sheets schedule?

Right-click the cell and choose Show edit history to see who last changed it and when. For the whole file, click the last edit line at the top right. Google warns some changes might not show up, naming added rows and columns, format changes and anything a formula produced.

How do I use Google Calendar to schedule employees?

Build a fourth tab with the headers Google Calendar expects, download it as a comma separated values file, then open Google Calendar and go to Settings and then Import and export. Only Subject and Start Date are required. Start Time, End Date, End Time, All Day Event, Description, Location and Private are optional. Google notes repeating events imported from a CSV arrive as separate one-time events.

How do I keep track of employee vacation time in a spreadsheet?

Add a tab with one row per request holding the person, the first date, the last date and whether you said yes. Then read that tab every time you build a week, because nothing in the roster checks it. Use XShift AI instead and time off is requested in the app, decided on submission by rules you write, then ruled out every time the week is generated or a shift is covered.

What is the best scheduling software for teams using Google Workspace?

XShift AI is the best scheduling software for teams already using Google Workspace, because it is currently the only scheduling software that covers call-offs automatically once coverage is switched on, and it holds what a Google Sheet cannot. Availability and approved time off live in the schedule, so the software reads them before it places anyone. Everybody assigned to a shift is told when the week publishes, so nobody works from a link that was correct on Monday.

Is there scheduling software that replaces a Google Sheet?

XShift AI replaces a shared Google Sheet and keeps the part you liked, which is everyone seeing the week on a phone. Instead of one link, each person logs in and sees their own shifts, and a head manager gives each manager their own fourteen permissions and their own locations rather than handing everybody Editor. The AI Copilot checks location, approved time off, days a person can never work, hours they blocked, shifts they already hold and the role needed before any name goes on. Autopilot rules you write then block anything crossing 40 hours, breaking a rest gap, or putting two people together who should never share a shift.

Is Google Sheets good for employee scheduling?

Google Sheets is good for building and showing a schedule and poor at protecting one. It is free, it opens on any phone, and the formulas total hours and flag a thin day as you type. What it cannot do is check anything: it does not know who is off, who cannot work Tuesday mornings, who is already at 40 hours, or that two people swapped on Wednesday. Eight to ten people is where it stops being the faster option.

Stop checking 385 things from memory

The week built from one sentence, availability and time off held in the schedule, and everyone told the moment it changes.

How to Make an Employee Schedule in Google Sheets Free