Zenshin Group
Zenshin Group · Revenue Management v176

Hotel Revenue Management Dashboard

Portfolio performance, forecast and rate optimization across all properties
Sources: Master_Properties · Daily_Performance · Rates_Plans_and_Forecast
Loading data... - rows -
Working on
Quick range:

Daily Briefing command center

Your morning read: what stands out across the data and the top 3 moves for today. Auto-published each morning by a scheduled task; hit Generate to refresh it now.
No briefing yet — click Generate, or wait for the morning auto-run.
Total Revenue
-
 
Portfolio Occupancy
-
 
Avg ADR
-
 
Paid ADR REV ONLY
-
 
Avg RevPAR
-
 
Date Range
-
 

Monthly Goal Progress

Month-to-date actual revenue and occupancy vs target, with linear projection to end-of-month. Targets are managed in Supabase.

Daily Revenue and RevPAR

Total revenue (bars) and RevPAR (line) over the selected window

Channel Mix

Share of room nights by booking channel

Performance by Property

Per-property breakdown for the selected date range. Respects the active property filter — pick a single property to scope, or “All Properties” to see the full portfolio side-by-side.
Where rates stand

Rate Calendar — Next 60 Days

Your typical DOW × month base ADR per day per property. Cells colored by rate quartile within each property (light = soft days; dark = peak rate). Hover for ZSG recommended rate + delta. Stars mark event days.

Day-of-Week ADR Heatmap

Weighted average ADR by month and day-of-week. Compare with the DOW Occupancy heatmap on the Occupancy & Pickup tab — high occupancy + low rate is the classic under-priced signal. Respects active property + date filters.
What needs attention

Rate Gap Alerts

Upcoming dates where the ZSG engine’s recommended rate is more than 8% off your current base price. Sorted by size of gap. Scroll within the frame; the full date-by-date engine is on the Rate Engine tab.
Legend ↑ raise under-priced ↓ lower over-priced ≥20% gap (urgent) 8-20% gap
How this tab works — the ZSG closed loop (click to expand / collapse)
1 · Review. For every stay date the engine blends our recency-weighted ADR baseline, seasonality, live on-the-books pace, market compression (PriceLabs) and event uplift — capped by ZSG guardrails (max +30% / −15%, floor 80% of trailing-90 ADR). Low-confidence rows are flagged; the validation banner calls out anything outside the rules before you act.
2 · Tune. Use the aggressiveness slider to set posture, and lock any row you have finalized so refreshes don’t move it.
3 · Act. Apply means “I am setting this rate in the PMS / PriceLabs.” Dismiss means “not acting” (add the reason). Every click is written to a permanent audit log with the rate, the baseline and the timestamp — Undo writes a “cleared” record; history is never deleted.
4 · Execute. Use the Rate Plan bar above to print the branded PDF checklist and enter the rates in the PMS.
5 · Measure. Once an applied date passes, it lands in the Recommendation Scorecard (Decision Support tab): achieved ADR vs the rate you set, occupancy on the night, realized lift. Logged actions and their outcomes also appear automatically in the weekly report’s RM Decision Log.
Rate Plan
Compile the engine’s current recommendations — with your posture and locks applied — into a ZSG-branded rate plan to print or export for entry into your PMS / PriceLabs.
Loading recommendations…
Act
Recommendations follow ZSG strategy: preserve ADR — channel-manage (restrictions, member rates, packages) before cutting rate. The only exception is closing an OTA-off gap.

ZSG Rate Engine beta

Second-opinion rate recommendations from a rules-based engine that combines your historical ADR, pace vs LY, market compression, and DOW seasonality. How to tune.
ⓘ How to use the Rate Engine (click to expand)

The engine gives a second-opinion recommended rate for each upcoming date. It starts from your baseline ADR (recency-weighted, by day-of-week × month) and stacks rule-based adjustments — pace vs last year, market compression, day-of-week, and demand events — then applies guardrails (max move + ADR floor). It does not push rates anywhere; it’s a decision aid.

  1. Set your posture with the slider — Conservative = smaller raises, Aggressive = larger raises (it only scales the upward moves, never the protective drops).
  2. Read each row: Base ADR → Recommended → Δ%, the $ impact, a Confidence flag (how much comparable history backs it), any suggested Restriction (MinLOS/CTA), and the Why (which rules fired).
  3. Lock 🔒 the dates you’ve decided on so the posture slider stops moving them while you tune the rest. Locks persist on this device; use Unlock all to clear.
  4. Apply a rec to log your decision (or Dismiss to pass). This records it to your audit trail and feeds the Recommendation Scorecard on Decision Support. It does not change your PMS — you still set the rate in your PMS/PriceLabs.
  5. Export CSV (top or bottom) to hand the plan to whoever loads rates.

Strategy guardrail: preserve ADR — channel-manage (restrictions, member rates, packages) before cutting rate; the only reason to cut is to close an OTA-off gap.

Export CSV ↓
Conservative Recommended Aggressive
Recommended (1.0×)

Day-of-Week Occupancy Heatmap

Average occupancy % by month and day-of-week. Reveals recurring weak days for rate strategy. Respects active property + date filters.

Room-Type Performance

Bookings, room-nights, ADR and revenue by room type for the selected property over the active date range (by arrival date). Computed from your reservations; cancellations and no-shows excluded.

Same Time Last Year (STLY) Pace

This year vs last year occupancy and revenue at each calendar date. Shows where you’re ahead or behind 2025’s pace.

Compression Alerts

Properties at high on-the-books occupancy for upcoming windows (avg across 7d / 30d / 60d). Source: your Reservations data ÷ inventory.

Peak Demand Dates — individual dates ≥80% OTB, next 90 days

Specific high-demand dates the window averages don\u2019t surface — where to push rate and tighten restrictions.

Pickup Velocity — last 30 days, net of cancellations

Daily new bookings (bars) with cancellations and a 7-day rolling average. Source: your Reservations data.

Forward Occupancy vs Market — next 90 days

Your on-the-books occupancy by stay date vs the PriceLabs market occupancy line. Below market = pace headroom; above = outpacing (consider rate).

Soft Dates — Act Now

Upcoming close-in dates pacing soft on the books — the mirror of Compression Alerts. Where to push demand this week.

Forecast

Reservation-grain projection · pickup math from LY same-days-out · DOW × month ADR pattern
30-Day Forecast Revenue
-
 
60-Day Forecast Revenue
-
 
90-Day Forecast Revenue
-
 

Pace to Goal & Confidence

Forecast vs budget target (where set), a worst/likely/best range, and how much is already on the books.

Forward Forecast

Projected revenue, RevPAR, and occupancy. Dashed gray = last year actual at the same lead time.

Forecast Health by Date

Sorted by largest gap vs LY (most behind first). Pills: on track 25%+ behind 50%+ behind over-pace
Export CSV ↓

ZSG Read of the Day

A plain-English read on what is happening across the portfolio. Cached once per day - hit Refresh to regenerate.
Open the Insights tab to generate a read on today's data.

Ask the Dashboard AI

Ask anything about your live data — pace, soft dates, where to push rate, channel mix, events. Answers come only from this dashboard’s current numbers and honor the property filter.

Key Insights

Auto-generated from the latest synced data, refreshed each load.

Recommended Pricing Actions

Top recommendations from the ZSG Rate Engine across the next 60 days. Tune rules at ZSG_RATE_RULES in the source.
How this tab works — the ZSG closed loop (click to expand / collapse)
1 · Review. Restriction recommendations (min-stay / closed-to-arrival) are computed per date from OTB pace, day-of-week patterns and market signals — the Posture selector makes them fire more or less. Revenue-at-Risk, Pickup-to-Goal and the ROI Simulator quantify each move before you commit.
2 · Act. Apply / Dismiss each restriction — every decision is written to the same permanent audit trail as rate actions. Lock rows you have finalized; save ROI scenarios to compare promotions side-by-side.
3 · Compile. The Decision Support Action Plan bar at the top exports everything applied, locked and saved as one branded PDF checklist — the badge counts your logged decisions. “Clear all” resets the working list; the audit history is kept.
4 · Measure. The Recommendation Scorecard above shows how matured rate decisions actually played out (achieved ADR vs rate set, realized lift). All logged actions + outcomes roll into the weekly report’s RM Decision Log and a summary line in monthly / annual client reports.
Decision Support Action Plan
Compile every decision on this tab — applied & locked restrictions, saved ROI scenarios, open action items, and the AI checklist — into one printable checklist for the current property scope.
No decisions logged yet

Recommendation Scorecard closed loop

How applied rate recommendations actually played out once the stay date passed: achieved ADR vs the rate you set, occupancy on the night, and dollars earned above the engine’s baseline. The engine’s own track record — populated as you Apply recommendations on the Rate Engine tab.

Restriction Recommendations

Suggested length-of-stay and arrival restrictions per date based on OTB pace + DOW + market signals. Apply / Dismiss logs each decision to an audit trail (owner only); Posture tightens or loosens how eagerly restrictions fire; Lock 🔒 pins a date against posture changes.
Export CSV ↓

Revenue at Risk — Next 60 Days

Dollar value of below-pace dates (projected revenue lower than LY same-day), with a 50% recoverable estimate. Drives urgency on the dates where intervention pays.

Pickup-to-Goal Pace Tracker

For each property's current-month revenue goal: the daily pickup pace required from today to hit the goal, vs. recent actual daily pickup. Flags dates that mathematically can't be saved without intervention.

Promotion ROI Simulator

Project occupancy lift and revenue impact for a hypothetical discount on a date range. Pickup lift scales with the chosen demand sensitivity. The discount applies to all on-books revenue in the window, so the projection already accounts for dilution. Honors the active property filter.
Pick a date range and a discount, then click Calculate to see the projected impact.

ZSG Action Checklist — Next 30 Days

AI-generated, property-specific action plan grounded in this dashboard's data: compression, soft pace, rate engine signals, channel mix, and ZSG rate philosophy. Regenerate after the data refreshes for a fresh plan.

Action Tracker

Track decisions to completion — owner, due date, status. Edits save to Supabase. (Editing in the Claude app; hosted build is read-only until the write cutover.)

Stop-Sell Triggers

Dates where holding rate firm (or closing low-rate inventory) is mathematically the right move. Fires when OTB ≥ 90% with 14+ days to arrival — you have time to wait for higher-rate pickup.

Upcoming Demand Events forward

Events still ahead, with the DOW×month baseline for their dates, your current OTB pace vs that baseline, and the lift the same-named event delivered last time. Tells you if you’re priced up for known demand.
Export CSV ↓

Lead-Time Bucket Pace

For arrivals in the next 30 days: distribution of OTB bookings across booking lead-time buckets, compared to the same arrival window last year. Tells you whether unusual pace is from recent or advance pickup.

Cancellation Risk Scoring

Historical cancel rates per (channel × lead-time bucket) applied to your OTB book for the next 30 days. Hedges pace forecasts against expected attrition.
Export CSV ↓

Demand-Driver Attribution

For each completed event: revenue lift attributable to it (vs. DOW × month baseline), plus an ADR-vs-occupancy capture read. Ranks events by their actual demand impact.
Export CSV ↓

Events

Demand events & holidays that feed the Predictive tab and rate engine. Refreshed automatically each month; add, edit, or remove events below.

Add Event

Tracked Events

Channel Mix Evolution — Last 12 Months

Share % of bookings by channel bucket over the past 12 months. Trend up on Direct = winning back direct demand; trend up on OTA = losing ground / overpaying for distribution.

Channel Performance — Gross vs Net

Per-channel performance over your loaded booking window (recent ~18 months of arrivals plus on-the-books reservations — not full all-time history): bookings, room nights, gross revenue, gross ADR, commission, true net ADR, net revenue, cancellation rate, and average booking lead time. Channel mix and net-rate comparisons here are representative; for exact period revenue use Overview or Reports (PMS-accurate daily data). Commission rates come from the live Commission Rates table below (editable).
Export CSV ↓

True Net Rate by Channel

Gross ADR vs Net ADR (after commission) per channel. Surfaces the “OTA looks great until you strip commission” effect. Sorted by net ADR descending.

Channel Shift ROI Calculator

Model the impact of shifting bookings between channels. Useful for evaluating direct-channel investments (loyalty programs, BAR parity, member rates). Honors current property filter. Commission rates are synced from Supabase.
Pick a source and target channel, set a shift %, and click Calculate.

Cost of Distribution — the OTA Tax

Commission you’re paying to distribute, by channel. This is the prize pool for shifting business to direct.

Forward Channel Mix — OTB by Channel

Where your upcoming on-the-books room-nights are coming from — vs your trailing-12-month mix. Watch for OTA creep on future demand.

Commission Rates admin

Per-channel commission % used for all net-ADR and net-revenue math. Edits save to Supabase and recompute the tab. (Editing works in the Claude app; the hosted build is read-only until the write cutover.)

Rate Management Philosophy

How Zenshin Group approaches pricing — the standard our rate decisions are measured against.

System Health

Live row counts, data recency, and daily-data coverage straight from Supabase. Use this when numbers look stale or a property looks empty.

Materialized View Data

Pre-aggregated tables that power Channel Mix, Pickup Velocity, Forecast ADR base, and OTB widgets. Refreshed automatically nightly at 3:45 AM HST. Use the button after a manual upload to force fresh numbers in the dashboard immediately.

Data Source Row Counts

What's currently loaded into this dashboard session. Compare against your sheet to spot ingestion drops.

Daily Data Coverage — Last 24 Months

For each property, which months have at least 1 row of Daily_Performance. Empty cells = potential ingestion gaps. Hover for row count.

Market

PriceLabs Market Dashboard data · Last refresh:
Loading market data...

Comp Set

Live market positioning from PriceLabs neighborhood data (synced nightly to Supabase). The competitor roster below is reference context.
Market Median (30d)
-
 
Your ADR (30d)
-
 
Rate Position
-
 
Occ Index (MPI)
-
 

Strategic Read

Select a property in the bar above to see its market position narrative.

Comp Composition

Active0
Watching0
Drop0
Empty slots0

Rate Positioning vs Market — your booked rate vs the market percentile band, next 90 days

Rate distribution chart will appear here
Once low_rate and peak_rate are populated for active comps in the Comp_Set sheet, this section will render a horizontal bar chart showing each comp's range with your property highlighted. Pull rates from PriceLabs Market Dashboards (live in 24 hours).

Ranked Comps

Pacing

ZSG pacing analysis from your reservation-grain data + PriceLabs listings snapshot (synced from Supabase). · Last PL sync:

ZSG Daily Pace Calendar — Next 60 Days

Your current OTB occupancy per day per property. Darker = more booked. Hover for TY vs LY at same booking window. · ★ = event date

ZSG Pace Anomalies beta

Export CSV ↓
Top upcoming dates where your OTB vs LY at the same days-out shows the largest gap. Action-ranked.

ZSG Pace by Channel — Next 30 Days

OTB room-nights for the next 30 stay days, decomposed by channel bucket. Pickup velocity (7/14/30-day booking pace) now lives on the Occupancy & Pickup tab.

PriceLabs Pacing (raw snapshot)

Forward pace per listing from the latest PriceLabs sync. Useful for tracking per-listing pace where ZSG aggregates roll up.
Avg Occ Next 7d
-
 
Market Next 7d
-
 
Pacing vs Market
-
 
Listings Tracked
-
 

Pacing by Listing — Next 7 Days

Dark bar = your occupancy · Light bar = market

Recommended Actions

Loading...

Forward Pacing — All Listings

Pacing Curve

Reservation-grain pacing · this year vs last year same days out · synced from Supabase
This year OTB nights
-
 
LY same days out
-
 
Gap vs LY
-
 
Gap %
-
 

OTB Nights by Stay Date

Solid line = this year on the books today · Dashed = last year on the books at the same lead time

Booking Pace Curve — cumulative build-up by days before arrival, this year vs last

Booking Lead Time Distribution

How far in advance bookings are made (booked_at → arrival_date). Drives min-stay rules, rate fences, and channel timing strategy. Respects property filter.

Length-of-Stay Distribution

Distribution of nights per stay. Long-tail bookings (5+ nights) are where LOS restrictions matter most. Respects property filter.

Pacing Health by Stay Date

Pills: on track 25%+ behind 50%+ behind · scroll within the frame for all stay dates
Export CSV ↓

Monthly Performance Report

Client-ready report for a single property and month. Preview live, export as a .doc that Word opens natively. Edit recommendations + tone in Word, then Save As .docx to send to the client.
Preview
Pick a property and month, then click Refresh preview.