DashboardAboutHelp
Help Center

How to use HotelLens

Guide for admins loading data and owners reading results. Includes data file specification and sample.

On this page
Admin WorkflowImporting DataExporting DataData File SpecificationSample Data File
πŸ“Š Dashboard🏨 PropertyπŸ“‹ ScorecardsπŸ” Drift AnalysisπŸ”§ Asset ProtectionπŸ‘€ Accountability⚑ InterventionsπŸ“„ Reports
FAQ

Admin Workflow

HotelLens is designed for a two-person workflow: an admin populates data monthly, and an owner opens the dashboard to review results in 60 seconds.

Monthly admin steps: (1) Gather performance data from PMS, accounting, guest satisfaction system, and maintenance logs. (2) Update the JSON data file with the new month's numbers. (3) Upload via the Import button. (4) Verify the dashboard reflects the new data. (5) Notify the owner that the dashboard is updated.

Owner reads: Dashboard β†’ Scorecards β†’ Drift Analysis β†’ Interventions. That's the 60-second review. Deep-dive into Asset Protection and Accountability as needed.

Importing Data

Click "πŸ“ Import" in the topbar or the Data Input page. Select a JSON file. The dashboard refreshes immediately. The badge changes from "Demo Data" to "Custom Data."

πŸ’‘ Import replaces everything. Export first if you want to preserve current data.

Exporting Data

Click "πŸ“€ Export" to download the current dataset. File is named with the hotel name and today's date.

Data File Specification

JSON file with these top-level objects:

property β€” Hotel profile

FieldTypeDescription
nameStringHotel name
locationStringCity, State
classStringSegment (e.g., "Upscale Full-Service")
roomsNumberRoom count
ownershipTypeStringE.g., "Private Equity", "Family", "REIT"
managementCompanyStringManagement company name
gmStringGeneral Manager name
reportingPeriodStringE.g., "Jan 2026 – Dec 2026"
budgetRevPARNumberAnnual budget RevPAR target
budgetNOINumberAnnual budget NOI target
marketNotesStringMarket context and competitive notes

performance β€” Array of monthly performance records

FieldTypeDescription
monthString"Mon YYYY" format
occNumberOccupancy %
adrNumberAverage Daily Rate $
revparNumberRevenue Per Available Room $
revenueNumberTotal revenue $
noiNumberNet Operating Income $
budgetRev, budgetNOINumberBudget comparisons
forecastRev, forecastNOINumberManagement's forecast
discountPctNumberDiscount % on published rates
channelDirectNumber% of bookings from direct channels

labor β€” Array of monthly labor records

FieldTypeDescription
monthStringMonth label
laborPctNumberLabor cost as % of revenue
overtimePctNumberOvertime as % of total hours
fteCountNumberFull-time equivalent headcount
turnoverPctNumberMonthly staff turnover %
scheduledHours, actualHoursNumberSchedule vs actual hours worked

guest β€” Guest experience data with parallel arrays indexed by month

FieldTypeDescription
monthsArrayMonth labels
overallScoreArrayOverall satisfaction (0–100)
complaintsArrayMonthly complaint count
repeatIssuesArrayRepeat complaint count
serviceRecoveryMinArrayAvg service recovery time (minutes)
reviewScoreArrayOnline review score (1.0–5.0)
cleanlinessScoreArrayCleanliness score (1.0–5.0)

maintenance β€” Same parallel-array structure as guest

FieldTypeDescription
monthsArrayMonth labels
backlogItemsArrayOutstanding work orders
criticalRepairsArrayUnresolved critical repairs
pmCompliancePctArrayPreventive maintenance compliance %
roomsOOOArrayRooms out of order
deferredCapitalItemsArrayDeferred capital project count
monthlyCapexArrayMonthly capital expenditure $

scores β€” Object with six category keys, each containing score, grade, trend, weight, details

interventions β€” Array of intervention objects (id, issue, severity, recommendation, accountable, dueDate, status, impact)

reviews β€” Array of review objects (type, date, score, reviewer, notes)

Sample Data File

Minimal template with 2 months of data. Save as .json and upload to test.

{ "property": { "name": "Sample Hotel", "location": "City, ST", "class": "Select-Service", "rooms": 120, "ownershipType": "Family", "managementCompany": "Self-Managed", "gm": "Jane Doe", "reportingPeriod": "Jan–Dec 2026", "budgetRevPAR": 95, "budgetNOI": 1800000, "marketNotes": "Suburban market." }, "performance": [ {"month":"Jan 2026","occ":65,"adr":140,"revpar":91,"revenue":327600,"noi":120000,"budgetRev":340000,"budgetNOI":130000,"forecastRev":335000,"forecastNOI":125000,"discountPct":10,"channelDirect":45}, {"month":"Feb 2026","occ":68,"adr":142,"revpar":96.6,"revenue":347760,"noi":132000,"budgetRev":350000,"budgetNOI":135000,"forecastRev":348000,"forecastNOI":133000,"discountPct":11,"channelDirect":43} ], "labor": [ {"month":"Jan 2026","laborPct":30,"overtimePct":3.5,"fteCount":60,"turnoverPct":3,"scheduledHours":9600,"actualHours":9800}, {"month":"Feb 2026","laborPct":29.5,"overtimePct":3.2,"fteCount":60,"turnoverPct":2.8,"scheduledHours":9600,"actualHours":9750} ], "guest": { "months":["Jan 2026","Feb 2026"], "overallScore":[85,84], "complaints":[8,9], "repeatIssues":[1,1], "serviceRecoveryMin":[15,16], "reviewScore":[4.2,4.1], "cleanlinessScore":[4.3,4.2] }, "maintenance": { "months":["Jan 2026","Feb 2026"], "backlogItems":[5,6], "criticalRepairs":[0,1], "pmCompliancePct":[90,88], "roomsOOO":[2,2], "deferredCapitalItems":[1,1], "monthlyCapex":[15000,14000] }, "scores": { "revenueDiscipline":{"score":72,"grade":"B","trend":"stable","weight":20,"details":"ADR holding. Discount % acceptable."}, "costLabor":{"score":75,"grade":"B","trend":"stable","weight":20,"details":"Labor controlled. Overtime low."}, "guestExperience":{"score":80,"grade":"B","trend":"stable","weight":15,"details":"Satisfaction steady. Complaints low."}, "assetProtection":{"score":78,"grade":"B","trend":"stable","weight":20,"details":"Backlog manageable. PM compliance good."}, "leadershipExecution":{"score":70,"grade":"B","trend":"stable","weight":15,"details":"Budget accuracy reasonable."}, "ownerRisk":{"score":82,"grade":"B","trend":"stable","weight":10,"details":"No hidden risks detected."} }, "interventions": [], "reviews": [] }

πŸ“Š Dashboard

Shows the composite Management Grade (A–F, 0–100), trend signal (improving/stable/declining), top alerts from drift analysis, KPI cards for RevPAR, occupancy, NOI, labor, guest score, maintenance backlog, and turnover. The scorecard summary shows all six category bars.

🏨 Property

Hotel profile and targets. Static reference information.

πŸ“‹ Scorecards

Each of the six categories is shown with its score, letter grade, trend, weight, and a detailed narrative explanation of why the grade was assigned. The composite grade is calculated as a weighted average.

πŸ” Drift Analysis

The core differentiator. Detects contradictions between metrics: RevPAR up but guest scores dropping, labor controlled but maintenance backlog growing, occupancy high but discounting heavy. Each drift shows the two conflicting metrics, severity, and a plain-English interpretation.

πŸ”§ Asset Protection

Monthly trend table for backlog, critical repairs, PM compliance, rooms OOO, deferred capital, and capex. Alerts fire when PM compliance drops below 70% or capex is cut more than 60% from period start.

πŸ‘€ Accountability

Structured management reviews with scores and narrative. Full 12-month revenue performance table showing actual vs budget vs forecast, discount %, and direct channel share.

⚑ Interventions

Recommended owner actions. Each has severity, recommendation, accountable party, due date, status, and expected impact. These are the conversations ownership needs to have.

πŸ“„ Reports

Executive summary and scorecard. Report templates for owner summary, drift analysis, asset risk, intervention log, full data export, and quarterly ownership packet.

FAQ

Who enters the data?
An admin, analyst, or asset manager loads data monthly via JSON upload. The owner simply reviews the dashboard.
Is my data stored on a server?
No. Everything runs in your browser. Use Export to save locally.
How are the scores calculated?
Scores are entered in the JSON data file based on your analysis of the underlying metrics. The composite grade is auto-calculated as a weighted average of the six category scores.
What is drift analysis?
It detects contradictions between metrics. When RevPAR looks good but guest experience is collapsing, or labor is "controlled" but maintenance is deferred β€” those are drift signals that reveal hidden management problems.
Can I use this for multiple hotels?
In this version, each instance tracks one hotel. Create separate JSON files for each property. Multi-property portfolio view is planned for a future release.

Need help?

Questions about setup or data formatting?

alain@heailtcaire.ai