Reports
Five housekeeping reports — productivity, quality, readiness, occupancy discrepancy and supply cost — with their filters, columns, CSV exports and printing.
Reports (/housekeeping/reports) is where the day is closed and the month is argued about. Five tabs sit side by side: Productivity, Quality, Readiness, Discrepancy and Consumption cost. Each answers a different question — who cleaned how much and how fast, how good the cleans were, whether rooms were ready before the guests arrived, where the PMS and the attendant disagreed about who was in the room, and what the linen and amenities cost.
Every table on these pages carries an Export CSV button, and Print report in the header prints the tab you are looking at with the report name and date range at the top.
Where it lives
Open Housekeeping in the sidebar, then the Reports tab. Reports need housekeeping: read. Resolving a discrepancy needs housekeeping: verify; without it that column simply is not drawn.
Picking the dates
Choose a tab first, then narrow it. The date control sits directly under the tab bar and changes meaning with the tab:
| Tab | Control | Default |
|---|---|---|
| Productivity | Date range | The last 30 days, ending today. |
| Quality | Date range | The last 30 days, ending today. |
| Consumption cost | Date range | The last 30 days, ending today. |
| Readiness | Date | The shared housekeeping date — the one the Board and Inspections are on. |
| Discrepancy | Date | The same shared date. |
A line beside the picker restates what you are looking at — Quality · Mar 1, 2026 – Mar 31, 2026 — and the same line heads the printout. Changing the single Date here also changes the date on the Board, Assignments and Inspections, because they share one day.
Each tab shows a skeleton while it loads, its own empty state when the period has no data, and the server's message in a red banner if the report cannot be built.
Productivity
Rooms per attendant, and how the real time compared with the estimate. It counts every task scheduled in the range that reached Cleaned or Inspected, plus the ones that were Skipped, grouped by the attendant it was assigned to. Tasks that were never assigned to anyone aggregate into their own row.
Three stat cards head the tab: Rooms completed (the total across everyone), Avg variance vs estimate in minutes, and Average skip rate. Below them, Average minutes vs estimate draws one pair of bars per attendant — the estimate and the actual — and colours the actual bar differently when the room ran long.
The table, By attendant, exports as housekeeping-productivity.csv:
| Column | What it shows |
|---|---|
| Attendant | The staff member, or the unassigned bucket. |
| Rooms completed | Tasks that reached Cleaned or Inspected. |
| Rooms skipped | Tasks that ended Skipped. |
| Avg actual | Mean recorded minutes, rounded. |
| Avg estimated | Mean credit minutes from the service standard or preset. |
| Variance | Actual minus estimated, signed — +7 min means rooms are running over. |
| Skip rate | Skipped rooms as a percentage of the attendant's work. |
Tasks with no recorded actual minutes — anything completed without ever being started on a phone — are left out of the averages rather than counted as zero, so a dash means "no measurement", not "instant".
Quality
Inspection outcomes over the range. An inspection here means a task that reached Inspected (passed) or Failed, verified inside the range. Two stat cards: Inspection pass rate and Inspections completed. With no inspections in the period the pass rate reads — rather than 0%, and the tab shows No quality data — Inspection results will appear here once rooms are verified.
Top failed checklist items charts and tables the ten items inspectors failed most often, exporting as housekeeping-quality-failed-items.csv:
| Column | What it shows |
|---|---|
| Checklist item | The item's label as it was snapshotted onto the task. |
| Failures | How many inspections marked it Fail. |
Because the label is snapshotted, renaming an item on its template splits it into two rows here for the period that spans the rename.
Rework rate by attendant exports as housekeeping-quality-rework.csv:
| Column | What it shows |
|---|---|
| Attendant | Who cleaned the room. |
| Inspected | Their rooms that were decided in the range. |
| Failed | How many were failed. |
| Rework rate | Failed as a percentage of inspected. |
Readiness
One day at a time: were rooms ready before the guests turned up. Two stat cards — Rooms ready (day total) and Arrivals expected — then Rooms ready by hour, a chart of rooms released against the cumulative arrivals curve, with a sentence under it: By the 15:00 check-in hour, 24 of 31 arrivals had a ready room.
When fewer rooms were ready by the check-in hour than there were arrivals, an amber Readiness lagged banner appears above the chart. The check-in hour comes from the property's configured check-in time.
Hour by hour exports as housekeeping-readiness.csv:
| Column | What it shows |
|---|---|
| Hour | 0–23, in the property's own time zone. |
| Rooms ready | Rooms released to Ready during that hour. |
| Arrivals (cumulative) | The running arrivals count, capped at the day's total. |
A room counts in the hour its inspection passed, and only if that moment fell on the property-local day you selected — a room verified at 00:20 belongs to the next day's readiness, not this one's.
Discrepancy
Rooms where the attendant found something different from what the PMS believed. One row per genuine disagreement between the room's occupancy status and the Guest in room flag the attendant set while working it; rooms that agree are not listed. Only tasks that got past Pending or Assigned count, because an untouched task carries a default, not an observation.
Rooms the attendant found differently exports as housekeeping-discrepancies.csv:
| Column | What it shows |
|---|---|
| Room | The room number, ascending. |
| PMS says | Occupied or Vacant from the room record. |
| Attendant found | Occupied or Vacant from what was recorded in the room. |
| Task type | Full clean, Touch up and so on. |
| Status | Open, or Resolved with the resolution note underneath. |
| Action | Resolve — only with housekeeping: verify, and only on an open row. |
Resolve opens Resolve room 204? — Confirm the occupancy mismatch has been checked. This is recorded against the task. An optional Note answers What did you find? and is what the row shows afterwards. Resolving records the check; it does not change the room's occupancy, which only reservations move.
Consumption cost
What housekeeping actually used, priced at what the property paid for it. Two stat cards — Total supply cost and Cost per occupied room — then Cost by category, exporting as housekeeping-consumption-cost.csv:
| Column | What it shows |
|---|---|
| Category | The stock item's category from the Stores catalogue. |
| Units consumed | Units recorded against housekeeping tasks in the range. |
| Cost | Units multiplied by the item's unit cost. |
| Unpriced items | Items consumed with no unit cost set, shown in amber. |
When anything was consumed without a price, an amber line above the table says so — 3 items consumed without a unit cost set — excluded from the cost totals above. Fix those in the Stores catalogue and the totals become real.
Two things to know about the arithmetic. It uses unit cost — what you pay a supplier — never the guest-facing price, so this is a cost report and not a revenue one. And only movements sourced from housekeeping and of kind consumed or wasted are counted; a stock-count correction is not consumption and is left out.
Amounts are unformatted
Costs on this tab are printed as plain numbers — 184.50 — without a currency symbol or thousands separators. Read them in the property's own currency.
Exporting and printing
- Export CSV sits above each table and downloads exactly the rows on screen, under a fixed filename per table. The export writes the underlying values, so a percentage exports as its raw fraction and an enum as its stored value rather than the label the table shows.
- Print report prints the active tab, tables and charts, headed Housekeeping reports with the tab name and the dates. Tabs, filters and the Resolve buttons are left out of the printout.
Tips
- Read Productivity and Quality together. An attendant who is fast on Avg actual and high on Rework rate is not fast; they are being inspected twice.
- Readiness is a yesterday report. Look at it the morning after a lagged day, find the hour the curve flattened, and fix the assignment that caused it on Assignments.
- Clear the discrepancy list daily. An open mismatch usually means a missed check-out or a guest who moved rooms — both cost money if they sit until month end.
- Top failed items is a checklist problem before it is a people problem. One item failing across every attendant usually means it is worded badly or weighted wrongly in Housekeeping settings.
Related
Lost and Found
Log what housekeeping finds in a room, store it, claim and return it to the guest, or dispose of it once the retention window has passed.
Housekeeping Settings
Inspection rules, generation, service standards, checklists, sections, the shift roster, par levels and task presets — and what each one changes.

