A deep clean rotation scheduler is one ranked list: every room sorted by days since its last deep clean, filtered to the rooms vacant tonight, capped at your crew's daily capacity. That algorithm fits in a spreadsheet. What kills most rotations is not the tracker but the promise behind it: a 120-room hotel on a 90-day cycle must complete 1.34 deep cleans per day on average, every day, including sold-out weeks, and a two-person team working 4 to 6 hours per room delivers about 2 per weekday. Run that math before building anything, because no software rescues a cycle the capacity never supported.

Every housekeeping department has a deep clean program on paper: mattress rotation, carpet extraction, high dusting, grout scrubbing, drapes to the cleaners. What most departments do not have is an answer to "when was 412 last done?" that survives a change of executive housekeeper. The program lives in a binder, a whiteboard grid, or one supervisor's memory, and when occupancy spikes for a season, the rotation quietly stops and nobody notices until the carpets tell you. This guide is the internal tool that fixes that: the math, the algorithm, and the build, whether you do it in Google Sheets in an afternoon or hand the spec to an AI coding agent. It is the hotel sibling of our housekeeping board build guide and shares its data model.

First, check the cycle is even achievable

The deep clean is a fundamentally different unit of work from daily service. According to SiteMinder's hotel housekeeping guide (siteminder.com), a checkout clean runs 30 to 45 minutes and a stayover service 20 to 30. According to William D. Frye, writing in The Rooms Chronicle (roomschronicle.com), a deep clean takes a total of 4 to 6 hours in the room, works best with two housekeeping employees working together, and pulls the room out of salable inventory while it happens. You cannot absorb that into the regular board; it needs its own schedule, its own capacity, and its own math.

The industry baseline for that capacity is well documented. According to the same Rooms Chronicle article, most hotels deep clean 0.5 to 1.5 percent of their guestroom inventory per day outside peak periods, so a 300-room hotel averages 2 to 3 rooms daily, normally on weekdays between 9am and 5pm, clustered on one floor so equipment does not travel and noise stays contained. And the cycle those daily numbers add up to is also documented: Frye reports most guestrooms are deep cleaned between two and four times a year depending on occupancy, and according to Breezeway's hotel housekeeping checklist guide (breezeway.io), a thorough deep clean should ideally be performed every three to six months for all guest rooms, with a more extensive annual pass for mattress flipping and professional carpet cleaning.

Now the worked example. Say you run 120 rooms and you want the strong version of the standard: every room deep cleaned every 90 days, with one dedicated two-person team at 2 rooms per day.

Feasibility worksheet120 rooms, 90-day cycle, one 2-person team
Rooms in inventory
120
Target cycleevery room, once per cycle
90 days
Required pace120 rooms ÷ 90 days
1.34 / day
Team capacity4 to 6 hours per room, two attendants working together
2 / workday
Workdays in the cycleweekdays only, per standard deep clean scheduling
≈ 64
Total slots64 workdays × 2 rooms
128 cleans
Verdict: achievable, with 8 slots of slack. 128 slots against 120 rooms is a 6 percent margin. One sold-out week costs 10 slots and erases it. The 90-day promise holds only if you protect the slots or add capacity when occupancy compresses.
+8 slots

Three honest conclusions fall out of that worksheet. First, the cycle is a capacity decision, not an aspiration: if you cannot fund roughly rooms ÷ cycle-days cleans per day after weekends and holidays, pick a longer cycle instead of silently missing a shorter one. Second, occupancy is a constraint on which rooms, rarely on how many: even at 85 percent occupancy, 18 of 120 rooms sit vacant on an average night, plenty to fill 2 slots, but a genuinely sold-out stretch takes your capacity to zero and the schedule has to bank slots before it arrives. Third, seasonality is your friend if you plan it: front-load the rotation in shoulder months so the high season inherits a young rotation rather than an overdue one. Note the interaction with your nightly numbers too, since a room blocked for deep cleaning comes out of the sellable count your room attendant quotas and forecasts are built on.

The daily selection algorithm

With the cycle proven feasible, the scheduler itself is almost embarrassingly simple. It is a round-robin driven by one number per room: days since the last completed deep clean. Every morning, run the same five moves.

120rooms
1. Rank every room by days since last deep clean, oldest first

This is the whole "algorithm." The room that has waited longest is always next in line. No clever weighting needed until the basics work.

≈ 22vacant
2. Filter to rooms vacant tonight

A deep clean needs the room empty all day, so the candidate pool is tonight's vacant rooms plus anything already out of order. Pull this from the PMS availability screen or the night audit report.

≈ 15usable
3. Remove rooms committed to arrivals or active maintenance

Vacant but assigned to a same-day arrival is not vacant for your purposes. Neither is a room engineering already has torn open. What survives is the usable pool.

2picked
4. Take the top N, where N is today's crew capacity

Capacity throttles the list, not the other way around. Prefer picks on the same floor: Frye's guidance is to cluster the day's rooms in one section so equipment, noise, and furniture moves stay contained.

Donestamped
5. Block the rooms, clean, then stamp the date

Front office blocks the picks for the day, the team works the task list, and completion writes today's date back to the room's record. Tomorrow's ranking rebuilds itself from that one write.

The elegance of ranking by age is that it self-heals. Miss a week because of a citywide sellout, and nothing needs replanning: the skipped rooms are now the oldest, so they float to the top of every subsequent day until the rotation catches up. A calendar-based plan ("room 101 on March 3") shatters the first time reality disagrees with it; a ranked list never does.

The same view, as the heat map your tracker should be able to show. Each cell is a room, colored by days since its last deep clean on a 90-day cycle. A healthy rotation looks evenly mixed; clumps of amber and red are the drift the daily algorithm exists to prevent. (Illustrative data.)

Rotation heat map: 120 rooms, 90-day cycleeach cell = one room, hover for detail
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
0 to 45 days 46 to 75 days 76 to 90 days (due) Over 90 days (overdue: 11 rooms, 9%)

The build, step by step

1

Define the deep clean task list per room type

The Rooms Chronicle article breaks a guest room deep clean into ten task areas: high dusting, light fixtures, window areas and drapes, servicing the bed (including rotating or flipping the mattress per the manufacturer's recommendations), washing walls and doors, cleaning furniture, engineering repairs done concurrently, shower curtain replacement, tile and grout scrubbing, and carpet shampoo or extraction. Write your version once per room type: a suite with a sofa bed and a kitchenette is a different task list, and a different time budget, than a standard king. If you also run vacation rentals, our deep cleaning checklist is free source material for the task content.

2

Set the cycle, and let the math set it with you

Pick the cycle from the worksheet above, not from ambition. The documented range is two to four deep cleans per room per year (The Rooms Chronicle) and every three to six months (Breezeway). A 90-day cycle you hit is worth more than a 60-day cycle you miss, because a missed cycle destroys the team's trust in the whole system. Separate programs can run on separate cycles: quarterly deep clean, semiannual drape cleaning, annual mattress replacement review. Each is just another date column and another ranking.

3

Build the tracker: a spreadsheet is a legitimate v1

One row per room, columns for room, type, floor, last deep clean date, and tonight's status. Three formulas do the work (Google Sheets or Excel 365, cycle length in H1, last-clean dates in column C, tonight's status in column E):

D2: =TODAY()-C2 gives days since. F2: =IF(D2>$H$1,"Overdue",IF(D2>$H$1*0.8,"Due soon","OK")) gives the status flag. And the daily pick list is one formula: =TAKE(SORT(FILTER(A2:E121,E2:E121="Vacant"),4,FALSE),2), which filters to vacant rooms, sorts by days-since descending, and takes the top 2. Add conditional formatting on the days-since column and you have the heat map above for free.

When to graduate: the sheet breaks down when several programs overlap (deep clean plus quarterly PM plus annual tasks), when multiple people edit it, or when nobody stamps completions reliably. That is the point to build the small app, on the same data model as the rest of your ops stack; see step 7's agent prompt.

4

Fold preventive maintenance into the same rotation

Frye describes deep cleaning as "really the combined process of repair and preventative maintenance": while housekeeping deep cleans, an engineer concurrently spot-repairs wall coverings, furniture, and fixtures, and the room does not return to salable inventory until those repairs are done. Exploit that. The room is already vacant, blocked, and torn down to the frame, so the marginal cost of running the PM checklist (outlets, lamps, PTAC filter, door lock, drain flow) in the same visit is near zero. In the data model this is simply a second recurring program attached to the same room, completed by a different department on the same day.

5

Coordinate with front office: block the room honestly

A deep clean day removes the room from sellable inventory, so give it the status that says so. In most PMS conventions that is OOO (out of order, removed from availability) rather than OOS (out of service, a flagged deficiency on a room that can still sell); our room status codes reference covers the distinction. Make the block a request the front office confirms, not a silent edit, and agree the return path in advance: Frye's rule is that the room goes back on sale only after both the cleaning and the concurrent repairs are complete. Booking the block the night before, from the ranked list, is what keeps revenue management from ever being surprised.

6

Log completion with photo documentation

A deep clean is the easiest clean in the building to fake on paper, because nobody re-checks behind the headboard for another 90 days. So the completion record should be evidence, not a checkbox: the date, who did it, which task list version, and photos of the work that hides (mattress tag after rotation, extracted carpet while damp, grout lines, the dusted vent). That photo set does double duty as a condition baseline: it is the documented state of the room at its best, which is what makes damage found later provable and dateable. This is exactly the class of documentation RapidEye reviews automatically for hotel and rental operators, so if your team is already capturing it, the review does not have to depend on a supervisor having time.

7

Audit drift monthly

Two numbers tell you whether the rotation is healthy: the overdue count (=COUNTIF(D2:D121,">"&$H$1)) and the oldest room's age (=MAX(D2:D121)). Review both monthly. Overdue count creeping up means capacity is short of the math; oldest-room age spiking means specific rooms keep losing the vacancy lottery, usually your best sellers, and they need a deliberate block rather than another spin of the round-robin. If the heat map shows a whole floor aging together, the clustering habit has quietly become a bias.

Hand it to your coding agent

If you are past the spreadsheet stage, the prompt below scopes the v1 app and points the agent at our hotel operations reference schema so it does not invent its own tables. Paste it into Claude, Cursor, or whatever you build with:

prompt for your coding agent
Build a deep clean rotation scheduler for my hotel.

First, fetch and read the reference data model:
https://rapideyeinspections.com/blog/hotel-operations-data-model/schema.sql

Use its room, room_status_log, hk_task, and pm_schedule tables
(drop the rest for now). Hard rules:
- pm_schedule defines each recurring program (deep clean every
  90 days, room PM every 90 days, drapes every 180). A room's
  "last done" date is derived from completed hk_task history,
  never stored as a mutable field someone can fat-finger.
- Daily selection: rank rooms by days since last completed
  deep clean, descending; filter to rooms vacant tonight per
  room_status_log and not assigned to an arrival; prefer same-floor
  groupings; take the top N where N is today's crew capacity.
- Completing a task writes an hk_task row with completed_at,
  who did it, the checklist used, and links to photo evidence.
  Append-only; corrections are new rows.
- Today's picks generate a room block request (OOO for the day)
  that front office confirms; the room returns to inventory only
  when the task, including maintenance items, is closed.
- All timestamps UTC.

Phase 1: the ranked daily pick list, a one-tap completion flow
that stamps date + photos from a phone browser, and a drift
dashboard (per-room heat map by days-since, overdue count,
oldest-room age). Seed 120 rooms across 4 room types with
randomized history so I can demo it immediately.

The reference schema this prompt fetches is documented in full, table by table, in our hotel operations data model. The same schema drives the housekeeping board build, so the two tools share rooms, statuses, and task history instead of becoming two more disagreeing systems. And if you run mixed portfolios, the STR equivalent of this whole exercise is the vacation rental ops platform guide, with deep clean frequency for rentals covered separately.


Quick FAQ

How often should hotel guest rooms be deep cleaned?

Between two and four times a year for most hotels, depending on occupancy. According to William D. Frye in The Rooms Chronicle, higher-occupancy hotels need the more frequent end of the range because occupancy drives wear on furniture, fixtures, and equipment. Breezeway's hotel housekeeping guide similarly recommends a thorough deep clean every three to six months for all guest rooms, plus a more extensive annual pass for mattress flipping and professional carpet cleaning.

How many rooms can a hotel deep clean per day?

Far fewer than turnover cleans. According to The Rooms Chronicle, a deep clean takes 4 to 6 hours per room versus roughly 30 minutes for daily service, works best with two attendants together, and most hotels deep clean 0.5 to 1.5 percent of inventory daily, so a 300-room hotel averages 2 to 3 rooms. Plan on about 2 rooms per weekday per dedicated two-person team.

Is a spreadsheet enough for a deep clean rotation, or do I need an app?

A spreadsheet is genuinely enough for one program at one property; the three formulas in step 3 cover a 100 to 200 room hotel. Build the app when several cycles overlap (deep clean, quarterly PM, annual tasks), multiple people edit, or you want completion logging with photo evidence and derived due dates on the shared schema from our hotel operations data model.

Should a room being deep cleaned be set to OOO or OOS?

OOO in most PMS conventions, because a deep clean genuinely removes the room from salable inventory for the day, which is what OOO means; OOS typically flags a minor deficiency on a room that can still sell. Conventions vary by PMS, so confirm yours; the distinction and the full code list are in our room status codes reference.

Sources

Sources are named at the publisher level with their root domain, rather than linked or titled; every figure is verifiable at the named source.

  1. The Rooms Chronicle, guest-room deep cleaning guidance (William D. Frye, Ph.D.)roomschronicle.com
  2. Breezeway, hotel housekeeping resourcesbreezeway.io
  3. SiteMinder, hotel housekeeping guidesiteminder.com

Keep reading