Hotel staff scheduling with AI works when you give it rules, not a request. Turn each department's cover into a formula the occupancy forecast drives: housekeeping hours from departures and stayovers, breakfast staff from last night's occupied rooms, front desk cover from the check-out and check-in peaks. Then add availability and rest rules, and test the draft before publishing.
Most hotel rotas fail in one of three ways. They copy last week's pattern instead of this week's forecast. They staff breakfast from tonight's occupancy instead of last night's. Or someone asks an AI for "a fair rota" with no hard rules and trusts what comes back. Software roundups compare apps, but an app can only enforce rules that exist in writing, so that is where this starts.
Three departments, three different demand signals
A single occupancy percentage cannot drive all three departments, because each reacts to a different number from your property management system (PMS):
| Department | What drives the work | When it peaks | Number to pull from the PMS |
|---|---|---|---|
| Front desk | Departures in the morning, arrivals in the afternoon | 07:30 to 10:30 and 15:00 to 19:00 | Today's departures and arrivals, plus any group booking |
| Housekeeping | Departures (full clean) and stayovers (light service) | 10:00 to 16:00 | Departures, and stayovers (rooms occupied last night minus departures) |
| Breakfast | Guests who slept here last night and eat breakfast | 07:30 to 09:00 | Rooms occupied last night, then your own take-up counts |
The gap between those signals is biggest at weekends. Picture a Sunday with 50 per cent occupancy tonight after a full house on Saturday night: housekeeping and breakfast are at their busiest of the week, the desk is flat out until 11:00 and quiet by evening, and an occupancy-percentage rota would send half the team home.
Turn occupancy into cover levels you can defend
Here is a 40-room hotel, invented for illustration. Every constant below is an input to replace with your own, and the first two you should time rather than guess: time ten departure cleans and ten stayover services in your own rooms and use the averages.
- Departure clean: 32 minutes. Stayover service: 16 minutes.
- Fixed housekeeping work (public areas, laundry handling, linen cupboard): 3.0 hours a day.
- Allowance for late checkouts and re-cleans: 10 per cent on top.
- One full shift gives 7.0 productive hours (7.5 paid, after trolley set-up and handover); a half-shift gives 3.5.
- Breakfast: 1.6 guests per occupied room, 70 per cent of them eat breakfast. Staff: two up to 35 covers, three above.
- Front desk: one person on early (07:00 to 15:00), late (15:00 to 23:00) and night (23:00 to 07:00). A second early person when departures reach 15; a mid-shift person (11:00 to 19:00) when arrivals reach 15.
Feed those to the AI and let it build the sheet, because writing formulas is the part it does well. As of October 2026, Claude's pricing page lists file creation on every plan, and ChatGPT's lists data analysis on every plan (limited on Free), so either can usually hand back a spreadsheet file. In any assistant you can instead ask for the table and the formulas written out and paste them in.
I run a 40-room hotel. Build a spreadsheet with one row per day for the next 7 days.
I will type three numbers per day: rooms occupied last night, departures, arrivals.
Calculate:
- stayovers = rooms occupied last night minus departures
- housekeeping hours = (departures x 32/60 + stayovers x 16/60 + 3) x 1.1
- half-shifts needed = ROUNDUP(housekeeping hours / 3.5, 0)
- breakfast covers = rooms occupied last night x 1.6 x 0.70, rounded
- breakfast staff = 2 if covers are 35 or fewer, otherwise 3
- front desk: a second early person if departures are 15 or more; a mid-shift person if arrivals are 15 or more
Put every constant (32, 16, 3, 1.1, 3.5, 1.6, 0.70, 35, 15) in a labelled Inputs block so I can change it.
Flag any day where a number is within 2 of a threshold.
For the week below, that sheet returns the following. Check one row by hand before trusting the rest. Thursday: 12 departures at 32 minutes is 6.4 hours, 18 stayovers at 16 minutes is 4.8 hours, plus 3.0 fixed makes 14.2 hours; with the 10 per cent allowance that is 15.6, which is 4.46 half-shifts, rounded up to 5.
| Day | Rooms occupied last night | Departures | Stayovers | Arrivals | Housekeeping hours (with allowance) | Half-shifts | Breakfast covers | Breakfast staff |
|---|---|---|---|---|---|---|---|---|
| Mon | 20 | 9 | 11 | 15 | 11.8 | 4 | 22 | 2 |
| Tue | 26 | 8 | 18 | 10 | 13.3 | 4 | 29 | 2 |
| Wed | 28 | 10 | 18 | 12 | 14.4 | 5 | 31 | 2 |
| Thu | 30 | 12 | 18 | 16 | 15.6 | 5 | 34 | 2 |
| Fri | 34 | 11 | 23 | 14 | 16.5 | 5 | 38 | 3 |
| Sat | 37 | 13 | 24 | 16 | 18.0 | 6 | 41 | 3 |
| Sun | 40 | 26 | 14 | 6 | 22.7 | 7 | 45 | 3 |
Read the Sunday row. Only six arrivals, so the desk is quiet by evening, yet it needs seven half-shifts of housekeeping and three people at breakfast. A rota built from tonight's 50 per cent occupancy would miss all of that.
Front desk: staff the two peaks, not the whole day
A desk double-staffed from 07:00 to 23:00 pays for a second person through hours when nobody is arriving or leaving, and a desk with one person all day fails at 08:30 and 16:30. The rule in the example staffs the baseline (one person per shift, plus a night auditor) and adds a second person only for the window that needs one: another early starter when departures reach 15, or a mid-shift person from 11:00 to 19:00 when arrivals reach 15, which covers the check-in rush.
Look at Friday. It has 14 arrivals, one under the threshold, so the rule leaves the desk single-staffed through the check-in rush on a night with 37 rooms occupied. That is why the prompt asks the sheet to flag any day within 2 of a threshold. A flag is a question for the manager ("do I know of an early arrival, a group or a wedding party?"), not a decision. If the answer is yes, the day gets a mid-shift by hand.
Two front-desk details are easy for an AI draft to get wrong. The night auditor's shift starts on one calendar day and ends on the next, so the weekly hours and the days-in-a-row count need to attach it to the day it starts. And the handover is paid time: if the early person leaves at 15:00 and the late person arrives at 15:00, nobody is handing over unless you add ten minutes of overlap to the rule.
Housekeeping: hours first, heads second
The mistake is to start with headcount ("we need three attendants on Sundays") and then find work to fill the day. Start with hours: they come straight from the sheet, and you convert them to shifts last. The conversion matters, because rounding up to whole heads is where hotels quietly overspend. Thursday needs 15.6 hours. Two full shifts give 14.0 productive hours, so you are short; a third full shift gives 21.0 and leaves 5.4 hours idle. A half-shift on top of two full ones gives 17.5, which covers it with 1.9 spare.
That is why the sheet counts in half-shifts: two full shifts plus one half-shift beats three full shifts by 4.0 paid hours on a day that doesn't need them. Across the week, the half-shift method uses 134 paid hours (16 full shifts at 7.5 hours and four half-shifts at 3.5). The flat "three attendants every day" rota uses 157.5, and still leaves Sunday short: it supplies 21.0 productive hours against the 22.7 needed once the late-checkout allowance is included.
Room allocation is a separate job from headcount. Deciding which attendant starts with which rooms, so that early arrivals get clean rooms first, is covered in allocating rooms by arrival time. Feed that tutorial's output the shift counts from this sheet, not the other way round.
Breakfast: last night's occupancy and the 07:30 spike
Breakfast is the department where the wrong occupancy figure does the most damage. Guests eating at 07:30 slept here last night, so the covers forecast for any morning comes from the night before. On Sunday that means Saturday night's 40 rooms: 40 x 1.6 x 0.70 is 44.8, or 45 covers. Using Sunday night's 20 rooms instead gives 22 covers and a two-person team. The real morning needs three people for the 07:30 to 09:00 rush.
The two multipliers, 1.6 guests per room and 70 per cent eating, come from you, not the AI. Count covers and in-house rooms for four weeks and divide. If breakfast is included in the room rate the take-up is high and steady; if it is a paid extra it moves with price, weather and who is staying, so keep the counts by day of the week and by room type.
Two edge cases need a manual override in the sheet: a group booking with an early departure (a 06:30 coach means a 06:00 set-up), and an event breakfast. Both belong on a short "overrides" tab that the AI reads, because it can't see them in the PMS summary. For the other half of the breakfast question, ordering and waste, see predicting buffet demand from occupancy, which starts from the same covers number.
Split shifts, stacked shifts and the 30-minute break
A split shift has an unpaid gap in the middle: breakfast from 06:30 to 10:30, home, back for 16:30 to 20:00. The paid time is 7.5 hours but the person is committed for 13.5. They are unpopular with staff, they make a protected rest before the next early start hard to keep, and they are the first place an AI draft hides a breach. So the base rota bans them and tells the AI what to do instead.
The alternative is a stacked shift, where the breakfast person carries straight on into a housekeeping half-shift. In the example, that is 06:30 to 10:30 on breakfast, a 30-minute unpaid break, then 11:00 to 14:30 on rooms. The paid time is the same 7.5 hours, the person is committed for 8, and the housekeeping half-shifts on Wednesday, Thursday, Friday and Sunday are filled without adding a fifth attendant. It needs two conditions: breakfast staff trained to turn a room (a skills tag in the staff table), and a rule that the rooms part is only ever one half-shift of 3.5 hours.
Some hotels do have a real second service, such as an evening bar or dinner. Allow genuine splits as a named exception: at most one per person per week, a gap no longer than six hours, never before an early start the next day, and only with the person's agreement. How restaurant tools handle the same rules, including swap requests, is compared in AI scheduling apps for restaurants.
Rest rules to give the AI as hard constraints
The model has no idea what your contracts, local employment rules or any collective agreement require. If you leave rest rules out, it will produce a rota that looks fair and breaks them. If you put them in as wishes ("try to give people enough rest"), it will trade them off against cover. Write them as two lists, hard and soft, with numbers. The values below are examples to replace; have an employment adviser confirm your hard rules once, then reuse the card every week.
HARD RULES (never break; if cover can't be met without breaking one, say so and stop)
1. At least 11 hours between the end of one shift and the start of the next, counting across weeks.
2. At most 5 working days in a row, counting across weeks.
3. At least 2 days off in every 7.
4. Full-time staff: no more than 40 paid hours a week. Part-time: contracted hours, plus or minus 2.
5. No split shifts (a gap of more than 60 minutes inside one shift).
6. Only roles on the person's skills list. Stacked shifts need the "rooms" skill.
7. Cover for each day and shift matches the cover sheet exactly.
8. Approved leave and fixed days off are blocked.
SOFT RULES (try in this order; list any you could not meet)
1. At least one weekend day off in every two weeks for each person.
2. Requested days off, then preferred shifts.
3. Same shift type on consecutive days where possible.
4. Spread late and weekend shifts evenly over four weeks.
5. Prefer a stacked breakfast and rooms shift to a separate short shift.
Give the AI staff codes (FD1, HK2, BR3) rather than names, with each person's skills, contract hours, blocked days and requests. It needs nothing else, and it shouldn't have performance notes or personal details; availability and skills are the only things a rota should be built on. Then ask for the draft in a fixed shape:
You are drafting next week's hotel rota. Use ONLY the three tables I paste: the cover sheet (required people per shift per day), the staff table (codes, skills, contract hours, blocked days) and the rule card.
Output:
1. A grid with one row per staff code and one column per day, each cell a shift code (E, M, L, N, F, B, B+R) or blank.
2. Paid hours per person.
3. Every cover gap or soft rule you couldn't meet, with the reason.
If you can't meet the cover without breaking a HARD rule, don't break it. Leave the gap and tell me.
Check the draft twice, once with AI and once with formulas
Run a second prompt in a fresh chat, so it isn't defending its own work: "Audit this rota against the rule card. List every breach as person, day, rule number and evidence. Don't fix anything. Then count people per shift per day against the cover sheet." Treat that as a second opinion. The first opinion is a formula sheet, which doesn't get tired. Paste the grid in long form (one row per person per shift, sorted by person, then start) and add four columns:
A: Person B: Date C: Start time D: Span in hours (8 for an 8-hour shift including its break)
E: Start =B2+C2
F: End =E2+D2/24
G: Rest gap =IF(A3=A2,(E3-F2)*24,"")
H: Rest flag =IF(AND(G3<>"",G3<11),"REST","")
I: Run =IF(A3=A2,IF(B3-B2=1,I2+1,1),1)
J: Run flag =IF(I3>5,"RUN","")
Type 1 in I2 to start the run count. Columns G to J give you the two rules that break most often, rest between shifts and days in a row, with no AI involved. Because a night shift's end is its start plus eight hours, the formulas handle the shift that crosses midnight without special cases. If you want help writing similar checks, prompts for Google Sheets covers how to ask for formulas and test them.
The sample week, built and checked
This is the week from the cover table, rostered by the method above (illustrative). Each grid was run through the rest-gap and run-length formulas, wrapping from Sunday back to Monday so that next week's start was included. Dashes are days off.
Front desk
Shift codes: E is 07:00 to 15:00, M is 11:00 to 19:00, L is 15:00 to 23:00 and N is 23:00 to 07:00, starting that evening. Day shifts include a 30-minute unpaid break, so they pay 7.5 hours; the night shift pays all eight, because the auditor can't leave the desk.
| Person | Mon | Tue | Wed | Thu | Fri | Sat | Sun | Paid hours |
|---|---|---|---|---|---|---|---|---|
| FD1 | E | E | E | E | E | - | - | 37.5 |
| FD2 | L | L | L | - | - | E | E | 37.5 |
| FD3 | M | - | - | L | L | L | L | 37.5 |
| FD4 | - | - | - | M | - | M | E | 22.5 |
| N1 | N | N | N | N | - | - | - | 32.0 |
| N2 | - | - | - | - | N | N | N | 24.0 |
Cover check: Monday has an early, a mid, a late and a night; Tuesday and Wednesday an early, a late and a night; Thursday and Saturday add a mid-shift for the 16 arrivals; Sunday has two earlies for the 26 departures. The tightest rest gap in the grid is 12 hours (FD3's Sunday late to Monday mid-shift, and FD4's Saturday mid to Sunday early), and nobody works more than five days in a row, including FD2 (Saturday to Wednesday) and FD3 (Thursday to Monday).
Housekeeping
F is a full shift, 08:30 to 16:30 with a 30-minute unpaid break. The half-shifts for Wednesday, Thursday, Friday and Sunday come from the stacked breakfast shifts below.
| Person | Mon | Tue | Wed | Thu | Fri | Sat | Sun | Paid hours |
|---|---|---|---|---|---|---|---|---|
| HK1 | F | F | F | F | - | - | F | 37.5 |
| HK2 | F | F | - | - | F | F | F | 37.5 |
| HK3 | - | - | F | F | F | F | - | 30.0 |
| HK4 (weekend) | - | - | - | - | - | F | F | 15.0 |
Breakfast
B is 06:30 to 10:30. B+R is breakfast, a 30-minute break, then rooms from 11:00 to 14:30.
| Person | Mon | Tue | Wed | Thu | Fri | Sat | Sun | Paid hours |
|---|---|---|---|---|---|---|---|---|
| BR1 | B | B | B+R | B | B | - | - | 23.5 |
| BR2 | B | B | - | - | B+R | B | B | 23.5 |
| BR3 | - | - | B | B+R | B | B | B | 23.5 |
| BR4 (weekend) | - | - | - | - | - | B | B+R | 11.5 |
Housekeeping gets two full shifts Monday to Friday and three at the weekend, plus the four stacked half-shifts. Breakfast gets two people Monday to Thursday and three from Friday. In all, the week uses 393 paid hours: 191 on the desk, 120 in housekeeping and 82 in breakfast, which includes the 14 hours of stacked rooms work.
One thing the rules didn't fix is fairness. FD1 never works a weekend, while FD2, FD3 and FD4 work both days. That is week one of a three-week pattern. The soft rule "one weekend day off in every two weeks" is what makes the AI rotate it in weeks two and three, so keep the previous weeks in the prompt.
What the AI's first draft broke, and which check caught it
The grids above are the corrected versions. The first draft the AI returned for this week, from the same cover sheet and rule card, broke things in ways that are typical (illustrative, but each is the kind of fault a checker is there to catch):
- A short turnaround. FD3 had a Sunday late shift followed by a Monday early start, an 8-hour gap against the 11-hour rule. The REST flag in the formula sheet lit up on it. An audit prompt can miss this kind of breach when the two shifts sit on different rows of a grid, which is one reason to keep the formula check.
- A double booking. BR2 was entered twice on Friday: breakfast from 06:30 to 10:30, and a rooms half-shift starting at 10:00, half an hour before breakfast ended. The rest-gap column showed a negative number, and counting rows per person per date showed two on one day.
- A quiet shortfall. Sunday housekeeping had three full shifts and no half-shift: 21.0 productive hours against 22.7 needed. Every individual rule was satisfied, so only the comparison with the cover sheet caught it. Add a final line to your audit prompt: compare supply with need for every day.
- A long week. The draft gave FD1 the Saturday early on top of Monday to Friday: six days in a row and 45 paid hours against the 40-hour cap. The weekly total per person (a SUMIFS over a paid-hours column) showed 45.0, and the run flag fired on the sixth day. Always attach a night shift to the day it starts, too, or its hours land in the wrong week.
None of these needed AI to fix. They needed the rules in writing and a check that doesn't depend on the same model's judgement. Run the checks, give the failures back to the AI with "fix only these, change nothing else", and run the checks again, until they come back clean.
When the spreadsheet is no longer enough
A sheet with a rules block and a checker is cheaper and easier to adjust than most scheduling software, and it forces you to write down the rules you would need to configure in any tool. Move when the administration around the rota takes more of your week than building it: swap requests by phone message, hours tracked by hand, overtime noticed after payroll, staff asking where the rota is. How AI scheduling compares with a plain spreadsheet for a small team, including where each one stops being worth it, is set out in AI shift scheduling versus a rota spreadsheet.
Whichever route you take, the cover rules in this tutorial are the part that carries over. They also feed the other documents a rota depends on: the handover note at each shift change, and the procedures each role follows, written in hotel SOPs for check-in, housekeeping and night audit.
Hotel rota questions the sample week doesn't answer
Can ChatGPT make a staff rota for a hotel?
Yes, as a first draft. Give it the cover needed per day, each person's availability and skills, and your rules written as hard and soft. It will produce a grid, but it can break a rest rule without warning, so run the draft through a checker sheet or a second audit prompt before anyone sees it.
How many rooms can one housekeeper clean in a shift?
It depends on room type, layout, your standard and how many are departures rather than stayovers, so no single figure is safe to copy. Time ten departure cleans and ten stayover services in your own rooms, use those averages in the cover sheet, and review them each season.
What do I do when someone calls in sick?
Keep a ranked call-out list per department with who can cover which shift, and a standing rule for what gets dropped first: for example stayover service before departure cleans. Paste the gap and the list into the AI and ask for the three options that break the fewest rules, then check them against the rest-rule sheet.
When is a spreadsheet not enough?
When shift swaps, a time clock, publishing to staff phones or overtime alerts take more of your week than building the rota does. Until then, a sheet with a rules block and a checker is cheaper and easier to adjust. Use the same rule card when you compare dedicated scheduling tools.
Further reads
- Artificial Intelligence Workforce Automation: Rotas, Timesheets, Leave — Extend the rota into timesheets and leave
- Retail Staff Scheduling: Build a Rota From Hourly Till Sales With AI — Same demand-driven method, using hourly till sales
- How to Build a Restaurant Staff Rota With AI Demand Forecasts — Cover levels from covers forecasts in a restaurant
- How Can AI Help Hotels? Housekeeping Checks and Maintenance Requests — Where AI helps housekeeping checks and maintenance
- Where Should a Small Hotel Start With AI? — Choose the first AI job for a small property
- Hotel Shift Handover Notes With ChatGPT: From Desk Logs to a Daily Report — Draft the handover note for each shift change
- Restaurant Labour Cost Percentage: Test Rota Changes With AI First — Test a rota change against labour cost before using it
- How to Use AI in the Hospitality Industry: Small Hotel and Café Jobs — A 12-room hotel with a café ranks four AI jobs by hours back and risk, with prompts and fixes for guest messages, review replies, rotas and menus.
- AI for Golf Course Management: Can It Plan Staffing Around Weather? — Export past rounds, add the weather, and let ChatGPT or Gemini turn each forecast into a weekly staffing sheet for the pro shop, starter, bar and range.
- Pet Boarding Software: Can AI Forecast Holiday Demand and Staffing? — Turn three years of boarding bookings into a holiday forecast, a staffing sum and waitlist rules, with the checks that keep AI honest.
- AI Tools and AI Development: The Complete 2026 Guide — the AI hub, including every tutorial in the AI-for-business series.
Sources: the spreadsheet formulas follow standard Excel and Google Sheets behaviour; file-creation and data-analysis availability from the Claude and ChatGPT pricing pages. Every cover rule, time, threshold and headcount in the examples is an illustrative input to replace with your own measurements.