Going Beyond the Numbers
πŸ“Š Spreadsheet πŸ“„ Analysis Doc ⭐ GitHub
STR Portfolio Analysis

Going Beyond the Numbers

A market-context approach to dynamic pricing portfolio management β€” analyzing 20 STR properties across 6 international markets using health diagnostics, occupancy matrices, and lead-time classification.

Property-Level Analysis β€” All 20 Listings
Signal: Market:
ListingTypeHealthOcc 30dAdj 30dOcc 90d Min / Base% at MinLead TimeSignalRec %Recommendation
Market Overview β€” 6 Markets Analyzed
Methodology β€” Market-Context Framework
30-Day / 90-Day Occupancy Decision Matrix

The core diagnostic tool. Instead of a single score, we cross-reference near-term (30d) and forward-looking (90d) occupancy to determine the correct action β€” avoiding the common mistake of cutting base price during a normal seasonal dip.

90d Occ β‰₯ 30% (Healthy)
90d Occ < 30% (Low)
30d Occ β‰₯ 50%
(Booking)
🟒
STRONG
Demand confirmed. Maintain or raise base price β€” property is performing well.
🟒
SHORT WINDOW
Market books close-in. Low 90d is normal. No panic β€” demand materializes near check-in.
30d Occ < 50%
(Soft)
🟑
SEASONAL
Low season or off-peak. Don't cut base β€” use last-minute discounts. 90d shows future demand building.
πŸ”΄
INTERVENTION
Both windows weak. Base price reduction required. Validate with health score and market context.
⚠️ HOST ISSUE override: When % Blocked β‰₯ 50%, the signal becomes a host coaching conversation regardless of occupancy. The algorithm can't optimize inventory that isn't available.
Lead Time Classification

How far in advance guests book reveals the market's demand pattern and determines how urgently low occupancy should be treated.

Last-Minute (0–14d) β€” Guests book impulsively. Price sensitivity high.
Short Window (15–45d) β€” Urban/weekend pattern. Demand close-in.
Standard (46–90d) β€” Typical vacation planning window.
Advance (91–180d) β€” Seasonal/luxury, plans far ahead.
Far-Out (180d+) β€” Peak-season driven, books months ahead.
Health Score Thresholds

Platform-native metric measuring how close occupancy is to optimal neighborhood occupancy. Key nuance: high occupancy β‰  high health score β€” and vice versa.

80–100: Good β€” Maintain pricing strategy
60–79: Fair β€” Room for improvement
40–59: Poor β€” Intervention recommended
0–39: Critical β€” Urgent review required
πŸ’‘ Health Score is the primary signal for base price adjustment. Monitor every 2 weeks minimum. The score reflects market-relative performance, not absolute occupancy.
Min / Base Price Ratio

The minimum price as a percentage of base price determines how much room the dynamic pricing algorithm has to flex. A tight ratio handcuffs the algorithm.

< 50% β€” Wide spread. Algorithm has full flex.
50–75% β€” Moderate. Acceptable for most markets.
75–85% β€” Tight. Algorithm is constrained.
> 85% β€” Frozen. Effectively fixed pricing.
πŸ”‘ When Min/Base > 80% AND % at Min > 40%, the algorithm has stopped being dynamic. The most common fix: lower the minimum price, not the base.
Why Market-Context Over a Single Score

An initial approach considered was a weighted Intervention Score (0–100) combining health, occupancy, staleness, blocked %, and % at min into one number. While useful for quick triage, it has a critical flaw:

A single score can't distinguish between a ski resort in off-season (normal) and a listing that's genuinely failing. Both score high. Only one needs action.

The market-context approach uses the 30d/90d matrix, lead time classification, and market type to determine whether low metrics are expected or alarming. This prevents false positives and avoids unnecessary base price cuts during seasonal dips.

Adjusted Occupancy

Standard occupancy divides booked nights by total nights. This penalizes properties where hosts block significant calendar portions. Adjusted Occupancy reveals the true picture:

Adj. Occ = Booked Nights Γ· Available Nights (Total βˆ’ Blocked)

Example β€” Fall Ridge 412: Shows 10% occupancy, which seems critical. But 85% of nights are host-blocked. Adjusted occupancy is 67% β€” the available inventory IS booking. The problem is host behavior, not pricing.