str-dynamic-pricing — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited str-dynamic-pricing (Agent Skill) and scored it 100/100 (green). The audit ran 55 deterministic rules across Security, Supply Chain, Maintenance, Transparency, and Community; it found 0 high-severity and 0 lower-severity findings. The full rule-by-rule trace and per-finding evidence are below. Free, methodology-open.
Findings & checks · 0 flagged
Every scanned point with the score it earned and what moved between them.
First recorded scan — no prior version to compare against.
The primary manifest — the file an agent reads to learn what this artifact does.
You generate nightly rates for STR listings. Flat-rate pricing in 2026 leaves measurable revenue on the table (industry data: dynamic-priced listings outperform flat-priced comparables by 20-40% on RevPAR). The discipline is reading the market — not just the calendar.
============================================================ === PRE-FLIGHT === ============================================================
Recovery:
============================================================ === PHASE 1: COMP SET DEFINITION === ============================================================
Build the comparable property set with these filters:
| Filter | Default |
|---|---|
| Geographic radius | 1.5 miles (urban), 5 miles (suburban), 15 miles (rural) |
| Bedrooms | Exact match OR ±1 (penalize 1-off variants) |
| Bathrooms | Exact OR +1 |
| Property type | Same (SFR / condo / cabin / townhouse) |
| Pool | Match required if subject has pool |
| Hot tub | Match required if subject has hot tub |
| Pet-friendly | Match required if subject is pet-friendly |
| Beachfront/lakefront | Match required if subject is waterfront |
| Rating | ≥ 4.5 stars (top quartile) for premium comping |
| Review count | ≥ 25 (filters new/unscored properties) |
| Listing age | ≥ 12 months (mature properties only) |
Comp set size: 10-30 properties is the sweet spot. < 10 = too thin (one outlier moves rates). > 30 = dilutes signal.
Refresh comp set monthly (listings come and go).
VALIDATION: Comp set has ≥ 10 properties with the required amenity matches.
============================================================ === PHASE 2: BASE RATE COMPUTATION === ============================================================
For each night, compute a base rate:
Base = median(comp_set_rates_for_same_DOW_in_window) × adjustment_factors
Adjustment factors:
Bedrooms vs comp median: × 1.0 for match, ± 0.10/bedroom
Reviews vs comp median: × 1.05 if ≥ 2× comp median (premium)
Rating vs comp median: × 1.07 if 5.0 with ≥ 50 reviews
Photos / staging quality: × 0.95 to 1.10 (manual override)
New-listing discount: × 0.85 for first 90 days, taper to 1.0 by day 180
Cost floor: max(base, cost_floor)For each Day-of-Week in each Month, derive a separate median. Saturday rates ≠ Tuesday rates ≠ Christmas Day rates.
VALIDATION: Base rate is bounded (no rate of $0 or $10,000 from a single outlier).
============================================================ === PHASE 3: SEASONALITY MULTIPLIERS === ============================================================
Three layers of seasonality:
Multipliers compound: Base × Annual × Monthly × DOW.
VALIDATION: Multipliers source-tagged so the user can override per market.
============================================================ === PHASE 4: EVENT-DRIVEN PRICING === ============================================================
Local events drive massive demand spikes. Maintain a market event calendar:
| Event Type | Default Multiplier | Notes |
|---|---|---|
| Major concert (arena scale) | 1.5-2.5× | Within 5 miles of venue |
| Conference (1k+ attendees) | 1.4-1.8× | Within radius depending on hotel inventory |
| Sports — championship game | 2.0-3.0× | Super Bowl, NCAA Final Four |
| Sports — regular season | 1.1-1.3× | NFL Sunday in NFL city |
| Festival (Coachella, SXSW) | 1.8-2.5× | Multi-day, regional |
| Wedding season weekend | 1.3-1.5× | Saturdays Apr-Oct in popular markets |
| Holiday (NYE, Christmas, July 4) | 1.5-2.0× | Country-specific |
Sources: Ticketmaster + Eventbrite + city tourism feed + manual local-knowledge override.
VALIDATION: Events within next 60 days are detected and applied. New event addition propagates within hours.
============================================================ === PHASE 5: LEAD-TIME + BOOKING-PACE PRICING === ============================================================
As the date approaches, rates should shift based on whether bookings are pacing ahead or behind:
| Lead time | Default behavior |
|---|---|
| 60+ days out | Hold premium rates (no discount). Capture early planners. |
| 30-60 days | Compare bookings-on-books vs prior-year-same-period. Hold or discount 5-10% if pacing -10% YoY. |
| 14-30 days | More aggressive discount if pacing behind: 10-20% off. |
| 7-14 days | Discount up to 25% on still-empty nights. Below cost floor → keep empty (lower than break-even isn't worth wear & tear). |
| 0-7 days | Last-minute discount up to 35% on still-empty Friday/Saturday/Sunday. Weekday nights often better left empty. |
| Gap nights (single between bookings) | Discount aggressively (-20-30%) — better to fill than have orphans. |
VALIDATION: Booking-pace lookup pulls actual current bookings + prior-year baseline before adjusting.
============================================================ === PHASE 6: MINIMUM-STAY OPTIMIZATION === ============================================================
Minimum-stay rules protect against orphans:
Generate min_stay_calendar.csv per night.
VALIDATION: No min-stay rule produces an unfillable orphan night.
============================================================ === PHASE 7: OUTPUTS === ============================================================
str-pricing-{listing-id}/
├── rate_calendar.csv # nightly rates for next 365 days
├── min_stay.csv
├── rate_changes.md # explanation per night (which rules applied)
├── forecast.md # 30/60/90-day occupancy + ADR + RevPAR forecast
├── weekly_report.md # last 7 days performance vs comp set
└── alerts.md # nights with >25% drift from prior, events found, comp set changesPush to PMS via API. Most channel managers accept a rate-push REST call per listing.
VALIDATION: Rate calendar has exactly 365 rows, no missing dates.
============================================================ === SELF-REVIEW === ============================================================
Common gap: chasing comp set into a price war. Set a floor and respect it.
============================================================ === LEARNINGS CAPTURE === ============================================================
~/.claude/skills/str-dynamic-pricing/LEARNINGS.md.
============================================================ === STRICT RULES === ============================================================
~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.