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.
No targets set for the current month. Add rows to the Targets sheet with property_id + year + month + target_revenue + target_occupancy_pct.
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.
Not enough data yet for the active filter. Try the “All Data” preset.
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
No actionable gaps right now.
Your current base prices are within 8% of the ZSG engine’s recommended rates for the next 30 days — or this property doesn’t have a live base price loaded yet (e.g. PriceLabs market data still warming up). See the Rate Engine tab for the full date-by-date view.
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.
Set your posture with the slider — Conservative = smaller raises, Aggressive = larger raises (it only scales the upward moves, never the protective drops).
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).
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.
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.
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.
Not enough data yet. Need historical Daily_Performance, current Reservations, and PriceLabs_Listings to run the engine. Some properties may show only partial recs while data fills in.
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.
Not enough data yet for the active filter.
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.
Select a single property (top bar) to see its room-type breakdown.
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.
Need at least one matching date in both 2025 and 2026 to render this chart.
Compression Alerts
Properties at high on-the-books occupancy for upcoming windows (avg across 7d / 30d / 60d). Source: your Reservations data ÷ inventory.
No property is pacing above 75% OTB occupancy in the 7/30/90-day windows — demand is moderate, not pushing rate ceilings. (This is a window average; see Peak Demand Dates below for individual hot dates.)
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.
No upcoming dates above 80% on-the-books yet.
Pickup Velocity — last 30 days, net of cancellations
Daily new bookings (bars) with cancellations and a 7-day rolling average. Source: your Reservations data.
No reservations booked in the last 30 days. Confirm reservations cache loaded.
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).
Reservations not loaded yet.
Soft Dates — Act Now
Upcoming close-in dates pacing soft on the books — the mirror of Compression Alerts. Where to push demand this week.
No soft close-in dates right now.
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 track25%+ behind50%+ behindover-pace
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.
No applied recommendations have matured yet. As you Apply rate recs on the Rate Engine tab and their stay dates pass, this scorecard fills in — tracking achieved ADR, occupancy, and dollars earned above baseline.
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.
No restriction recommendations — pace is healthy and unconstrained.
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.
No revenue at risk — projected revenue meets or exceeds LY across the horizon.
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.
No monthly targets configured in the Targets sheet for the current month.
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.
Click Regenerate to draft a 30-day action 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.)
Editing actions is available in the Claude app (admin connection).
No tracked actions yet. Add one above, or pull from the AI checklist.
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.
No stop-sell triggers — no dates show extreme compression with enough runway to wait.
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.
No upcoming events in your Events list (within the active property scope).
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.
Insufficient reservations data to compute lead-time bucket pace.
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.
Insufficient cancellation history to model risk. Need at least 20 historical cancellations.
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.
No completed events with revenue data yet. Demand attribution requires events with end_date in the past and at least some Daily_Performance rows in that window.
Events
Demand events & holidays that feed the Predictive tab and rate engine. Refreshed automatically each month; add, edit, or remove events below.
Editing events is available inside the Claude app (admin connection). The hosted/login build is read-only until the write-access cutover ships.
Add Event
Tracked Events
No events for this scope yet. Add one above, or wait for the monthly auto-refresh.
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.
Insufficient reservations history for 12-month mix evolution.
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).
Gross ADR vs Net ADR (after commission) per channel. Surfaces the “OTA looks great until you strip commission” effect. Sorted by net ADR descending.
No reservations data available.
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.
No reservations in this window.
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.
No on-the-books reservations in this window.
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...
Market Occ Today
-
Market Occ Next 7d
-
Market Median Rate (30d)
-
Market Rate Band (30d)
-
25th–75th %ile
Market Occupancy — Next 90 Days
Forward market occupancy. In single-property view it overlays your OTB and the market last year so you can see if you\u2019re keeping pace with a market that\u2019s itself up or down vs LY.
Market Rate — Next 90 Days — PriceLabs percentile price band
Shaded band = market 25th\u201375th percentile nightly rate · solid = median · dashed = 90th percentile.
Future Occupancy Heatmap — Next 60 Days
Daily market occupancy by property. Darker = more booked. Hover a cell for the date and value.
Market Booking Pace — This Year vs Last Year
Pick a stay month. The chart shows how the market filled up as the stay date approached — this year's pace overlaid on last year's, so you can see if the market is ahead, behind, or on track.
Pickup & Cancellation Velocity — Last 30 Days
Rolling 30-day new bookings and cancellations per market (today only).
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
No competitor roster tracked for this property yet. Market positioning above is automated from PriceLabs.
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
Top upcoming dates where your OTB vs LY at the same days-out shows the largest gap. Action-ranked.
No anomalies yet — either pace is tracking LY closely, or LY history is too thin to compute gaps.
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
No PriceLabs pacing data yet. The daily sync runs at 6am HST. To run now, open PriceLabs Sync - Listings Snapshot in n8n and click Execute Workflow.
[diag hidden in v39 - re-enable by removing this style block if you ever need to debug pacing curve internals again]
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.
No reservations data available.
Length-of-Stay Distribution
Distribution of nights per stay. Long-tail bookings (5+ nights) are where LOS restrictions matter most. Respects property filter.
No reservations data available.
Pacing Health by Stay Date
Pills: on track25%+ behind50%+ behind · scroll within the frame for all stay dates
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.
Edit Property
Identity
Read-only when editing
Cascades to Daily and Rates if changed
Which client owns this property
Capacity
Contact
About
Delete this property?
This marks as Deleted. It will be hidden from the dashboard. Daily and Rates history are preserved. Reversible by editing the row in Google Sheets.
Saving updates Master_Properties via n8n.
Comp Set
No competitor roster tracked for this property yet. Market positioning above is automated from PriceLabs.