| Severity | Code | Message | Context |
|---|---|---|---|
| no findings โ engine ran clean | |||
Engine: python3 ~/.claude/scripts/booking-gaps.py --report
Capture (writes to dashboard-data/latest/): ~/.claude/scripts/dashboard-capture.sh booking-gaps
{
"skill": "booking-gaps",
"today": "2026-04-28",
"windows": {
"30d": [
"2026-04-28",
"2026-05-28"
],
"60d": [
"2026-04-28",
"2026-06-27"
],
"90d": [
"2026-04-28",
"2026-07-27"
]
},
"properties": [
{
"listing_id": 487778,
"name": "Blau Haus",
"tier": null,
"next_30d": {
"total_days": 30,
"empty_nights": 26,
"occupancy_pct": 13.3,
"orphan_runs": [],
"opportunity_runs": [
{
"start": "2026-04-28",
"nights": 11,
"max_min_stay": 2
},
{
"start": "2026-05-11",
"nights": 4,
"max_min_stay": 2
},
{
"start": "2026-05-17",
"nights": 11,
"max_min_stay": 3
}
]
},
"next_60d": {
"total_days": 60,
"empty_nights": 52,
"occupancy_pct": 13.3,
"orphan_runs": [],
"opportunity_runs": [
{
"start": "2026-04-28",
"nights": 11,
"max_min_stay": 2
},
{
"start": "2026-05-11",
"nights": 4,
"max_min_stay": 2
},
{
"start": "2026-05-17",
"nights": 17,
"max_min_stay": 3
},
{
"start": "2026-06-07",
"nights": 20,
"max_min_stay": 2
}
]
},
"next_90d": {
"total_days": 90,
"empty_nights": 82,
"occupancy_pct": 8.9,
"orphan_runs": [],
"opportunity_runs": [
{
"start": "2026-04-28",
"nights": 11,
"max_min_stay": 2
},
{
"start": "2026-05-11",
"nights": 4,
"max_min_stay": 2
},
{
"start": "2026-05-17",
"nights": 17,
"max_min_stay": 3
},
{
"start": "2026-06-07",
"nights": 50,
"max_min_stay": 3
}
]
}
},
{
"listing_id": 343880,
"name": "The Ridge House",
"tier": null,
"next_30d": {
"total_days": 30,
"empty_nights": 17,
"occupancy_pct": 43.3,
"orphan_runs": [],
"opportunity_runs": [
{
"start": "2026-05-11",
"nights": 17,
"max_min_stay": 2
}
]
},
"next_60d": {
"total_days": 60,
"empty_nights": 40,
"occupancy_pct": 33.3,
"orphan_runs": [],
"opportunity_runs": [
{
"start": "2026-05-11",
"nights": 22,
"max_min_stay": 2
},
{
"start": "2026-06-08",
"nights": 18,
"max_min_stay": 2
}
]
},
"next_90d": {
"total_days": 90,
"empty_nights": 52,
"occupancy_pct": 42.2,
"orphan_runs": [],
"opportunity_runs": [
{
"start": "2026-05-11",
"nights": 22,
"max_min_stay": 2
},
{
"start": "2026-06-08",
"nights": 18,
"max_min_stay": 2
},
{
"start": "2026-06-28",
"nights": 4,
"max_min_stay": 2
},
{
"start": "2026-07-19",
"nights": 8,
"max_min_stay": 2
}
]
}
},
{
"listing_id": 341135,
"name": "Porter's Lodge",
"tier": null,
"next_30d": {
"total_days": 30,
"empty_nights": 26,
"occupancy_pct": 13.3,
"orphan_runs": [
{
"start": "2026-04-28",
"nights": 3,
"max_min_stay": 1
}
],
"opportunity_runs": [
{
"start": "2026-05-03",
"nights": 5,
"max_min_stay": 1
},
{
"start": "2026-05-10",
"nights": 18,
"max_min_stay": 3
}
]
},
"next_60d": {
"total_days": 60,
"empty_nights": 53,
"occupancy_pct": 11.7,
"orphan_runs": [
{
"start": "2026-04-28",
"nights": 3,
"max_min_stay": 1
}
],
"opportunity_runs": [
{
"start": "2026-05-03",
"nights": 5,
"max_min_stay": 1
},
{
"start": "2026-05-10",
"nights": 18,
"max_min_stay": 3
},
{
"start": "2026-05-29",
"nights": 15,
"max_min_stay": 1
},
{
"start": "2026-06-15",
"nights": 12,
"max_min_stay": 2
}
]
},
"next_90d": {
"total_days": 90,
"empty_nights": 81,
"occupancy_pct": 10.0,
"orphan_runs": [
{
"start": "2026-04-28",
"nights": 3,
"max_min_stay": 1
}
],
"opportunity_runs": [
{
"start": "2026-05-03",
"nights": 5,
"max_min_stay": 1
},
{
"start": "2026-05-10",
"nights": 18,
"max_min_stay": 3
},
{
"start": "2026-05-29",
"nights": 15,
"max_min_stay": 1
},
{
"start": "2026-06-15",
"nights": 25,
"max_min_stay": 3
},
{
"start": "2026-07-12",
"nights": 15,
"max_min_stay": 2
}
]
}
},
{
"listing_id": 222900,
"name": "Cherrytown Chalet",
"tier": null,
"next_30d": {
"total_days": 30,
"empty_nights": 20,
"occupancy_pct": 33.3,
"orphan_runs": [],
"opportunity_runs": [
{
"start": "2026-05-02",
"nights": 12,
"max_min_stay": 2
},
{
"start": "2026-05-17",
"nights": 8,
"max_min_stay": 3
}
]
},
"next_60d": {
"total_days": 60,
"empty_nights": 44,
"occupancy_pct": 26.7,
"orphan_runs": [],
"opportunity_runs": [
{
"start": "2026-05-02",
"nights": 12,
"max_min_stay": 2
},
{
"start": "2026-05-17",
"nights": 8,
"max_min_stay": 3
},
{
"start": "2026-05-31",
"nights": 4,
"max_min_stay": 2
},
{
"start": "2026-06-07",
"nights": 20,
"max_min_stay": 2
}
]
},
"next_90d": {
"total_days": 90,
"empty_nights": 74,
"occupancy_pct": 17.8,
"orphan_runs": [],
"opportunity_runs": [
{
"start": "2026-05-02",
"nights": 12,
"max_min_stay": 2
},
{
"start": "2026-05-17",
"nights": 8,
"max_min_stay": 3
},
{
"start": "2026-05-31",
"nights": 4,
"max_min_stay": 2
},
{
"start": "2026-06-07",
"nights": 50,
"max_min_stay": 3
}
]
}
},
{
"listing_id": 369689,
"name": "Goat Hill Cottage",
"tier": null,
"next_30d": {
"total_days": 30,
"empty_nights": 15,
"occupancy_pct": 50.0,
"orphan_runs": [
{
"start": "2026-05-02",
"nights": 2,
"max_min_stay": 2
},
{
"start": "2026-05-08",
"nights": 3,
"max_min_stay": 2
},
{
"start": "2026-05-14",
"nights": 1,
"max_min_stay": 1
}
],
"opportunity_runs": [
{
"start": "2026-05-17",
"nights": 5,
"max_min_stay": 2
},
{
"start": "2026-05-24",
"nights": 4,
"max_min_stay": 3
}
]
},
"next_60d": {
"total_days": 60,
"empty_nights": 32,
"occupancy_pct": 46.7,
"orphan_runs": [
{
"start": "2026-05-02",
"nights": 2,
"max_min_stay": 2
},
{
"start": "2026-05-08",
"nights": 3,
"max_min_stay": 2
},
{
"start": "2026-05-14",
"nights": 1,
"max_min_stay": 1
},
{
"start": "2026-06-07",
"nights": 1,
"max_min_stay": 1
}
],
"opportunity_runs": [
{
"start": "2026-05-17",
"nights": 5,
"max_min_stay": 2
},
{
"start": "2026-05-24",
"nights": 11,
"max_min_stay": 3
},
{
"start": "2026-06-16",
"nights": 9,
"max_min_stay": 3
}
]
},
"next_90d": {
"total_days": 90,
"empty_nights": 52,
"occupancy_pct": 42.2,
"orphan_runs": [
{
"start": "2026-05-02",
"nights": 2,
"max_min_stay": 2
},
{
"start": "2026-05-08",
"nights": 3,
"max_min_stay": 2
},
{
"start": "2026-05-14",
"nights": 1,
"max_min_stay": 1
},
{
"start": "2026-06-07",
"nights": 1,
"max_min_stay": 1
}
],
"opportunity_runs": [
{
"start": "2026-05-17",
"nights": 5,
"max_min_stay": 2
},
{
"start": "2026-05-24",
"nights": 11,
"max_min_stay": 3
},
{
"start": "2026-06-16",
"nights": 9,
"max_min_stay": 3
},
{
"start": "2026-06-30",
"nights": 15,
"max_min_stay": 3
},
{
"start": "2026-07-22",
"nights": 5,
"max_min_stay": 3
}
]
}
},
{
"listing_id": 396986,
"name": "Wanderwood Lodge",
"tier": null,
"next_30d": {
"total_days": 30,
"empty_nights": 20,
"occupancy_pct": 33.3,
"orphan_runs": [
{
"start": "2026-05-03",
"nights": 3,
"max_min_stay": 2
},
{
"start": "2026-05-07",
"nights": 1,
"max_min_stay": 2
}
],
"opportunity_runs": [
{
"start": "2026-05-10",
"nights": 5,
"max_min_stay": 2
},
{
"start": "2026-05-17",
"nights": 11,
"max_min_stay": 3
}
]
},
"next_60d": {
"total_days": 60,
"empty_nights": 38,
"occupancy_pct": 36.7,
"orphan_runs": [
{
"start": "2026-05-03",
"nights": 3,
"max_min_stay": 2
},
{
"start": "2026-05-07",
"nights": 1,
"max_min_stay": 2
}
],
"opportunity_runs": [
{
"start": "2026-05-10",
"nights": 5,
"max_min_stay": 2
},
{
"start": "2026-05-17",
"nights": 11,
"max_min_stay": 3
},
{
"start": "2026-05-30",
"nights": 13,
"max_min_stay": 2
},
{
"start": "2026-06-14",
"nights": 5,
"max_min_stay": 2
}
]
},
"next_90d": {
"total_days": 90,
"empty_nights": 40,
"occupancy_pct": 55.6,
"orphan_runs": [
{
"start": "2026-05-03",
"nights": 3,
"max_min_stay": 2
},
{
"start": "2026-05-07",
"nights": 1,
"max_min_stay": 2
},
{
"start": "2026-07-21",
"nights": 1,
"max_min_stay": 2
},
{
"start": "2026-07-26",
"nights": 1,
"max_min_stay": 2
}
],
"opportunity_runs": [
{
"start": "2026-05-10",
"nights": 5,
"max_min_stay": 2
},
{
"start": "2026-05-17",
"nights": 11,
"max_min_stay": 3
},
{
"start": "2026-05-30",
"nights": 13,
"max_min_stay": 2
},
{
"start": "2026-06-14",
"nights": 5,
"max_min_stay": 2
}
]
}
},
{
"listing_id": 493486,
"name": "Timberledge Cabin",
"tier": null,
"next_30d": {
"total_days": 30,
"empty_nights": 9,
"occupancy_pct": 70.0,
"orphan_runs": [],
"opportunity_runs": [
{
"start": "2026-05-19",
"nights": 9,
"max_min_stay": 3
}
]
},
"next_60d": {
"total_days": 60,
"empty_nights": 39,
"occupancy_pct": 35.0,
"orphan_runs": [],
"opportunity_runs": [
{
"start": "2026-05-19",
"nights": 39,
"max_min_stay": 3
}
]
},
"next_90d": {
"total_days": 90,
"empty_nights": 69,
"occupancy_pct": 23.3,
"orphan_runs": [],
"opportunity_runs": [
{
"start": "2026-05-19",
"nights": 69,
"max_min_stay": 3
}
]
}
},
{
"listing_id": 422513,
"name": "Hommel House",
"tier": null,
"next_30d": {
"total_days": 30,
"empty_nights": 23,
"occupancy_pct": 23.3,
"orphan_runs": [
{
"start": "2026-04-29",
"nights": 2,
"max_min_stay": 2
},
{
"start": "2026-05-25",
"nights": 3,
"max_min_stay": 3
}
],
"opportunity_runs": [
{
"start": "2026-05-04",
"nights": 18,
"max_min_stay": 2
}
]
},
"next_60d": {
"total_days": 60,
"empty_nights": 48,
"occupancy_pct": 20.0,
"orphan_runs": [
{
"start": "2026-04-29",
"nights": 2,
"max_min_stay": 2
}
],
"opportunity_runs": [
{
"start": "2026-05-04",
"nights": 18,
"max_min_stay": 2
},
{
"start": "2026-05-25",
"nights": 9,
"max_min_stay": 3
},
{
"start": "2026-06-07",
"nights": 19,
"max_min_stay": 2
}
]
},
"next_90d": {
"total_days": 90,
"empty_nights": 69,
"occupancy_pct": 23.3,
"orphan_runs": [
{
"start": "2026-04-29",
"nights": 2,
"max_min_stay": 2
},
{
"start": "2026-07-26",
"nights": 1,
"max_min_stay": 2
}
],
"opportunity_runs": [
{
"start": "2026-05-04",
"nights": 18,
"max_min_stay": 2
},
{
"start": "2026-05-25",
"nights": 9,
"max_min_stay": 3
},
{
"start": "2026-06-07",
"nights": 19,
"max_min_stay": 2
},
{
"start": "2026-06-29",
"nights": 11,
"max_min_stay": 3
},
{
"start": "2026-07-13",
"nights": 9,
"max_min_stay": 3
}
]
}
},
{
"listing_id": 429948,
"name": "Hilltop Oasis",
"tier": null,
"next_30d": {
"total_days": 30,
"empty_nights": 19,
"occupancy_pct": 36.7,
"orphan_runs": [
{
"start": "2026-04-30",
"nights": 1,
"max_min_stay": 1
},
{
"start": "2026-05-25",
"nights": 2,
"max_min_stay": 1
}
],
"opportunity_runs": [
{
"start": "2026-05-06",
"nights": 16,
"max_min_stay": 2
}
]
},
"next_60d": {
"total_days": 60,
"empty_nights": 40,
"occupancy_pct": 33.3,
"orphan_runs": [
{
"start": "2026-04-30",
"nights": 1,
"max_min_stay": 1
},
{
"start": "2026-05-25",
"nights": 2,
"max_min_stay": 1
}
],
"opportunity_runs": [
{
"start": "2026-05-06",
"nights": 16,
"max_min_stay": 2
},
{
"start": "2026-06-01",
"nights": 14,
"max_min_stay": 2
},
{
"start": "2026-06-18",
"nights": 7,
"max_min_stay": 2
}
]
},
"next_90d": {
"total_days": 90,
"empty_nights": 48,
"occupancy_pct": 46.7,
"orphan_runs": [
{
"start": "2026-04-30",
"nights": 1,
"max_min_stay": 1
},
{
"start": "2026-05-25",
"nights": 2,
"max_min_stay": 1
},
{
"start": "2026-07-25",
"nights": 2,
"max_min_stay": 2
}
],
"opportunity_runs": [
{
"start": "2026-05-06",
"nights": 16,
"max_min_stay": 2
},
{
"start": "2026-06-01",
"nights": 14,
"max_min_stay": 2
},
{
"start": "2026-06-18",
"nights": 7,
"max_min_stay": 2
},
{
"start": "2026-06-29",
"nights": 6,
"max_min_stay": 3
}
]
}
},
{
"listing_id": 505182,
"name": "Waterfall House",
"tier": null,
"next_30d": {
"total_days": 30,
"empty_nights": 28,
"occupancy_pct": 6.7,
"orphan_runs": [],
"opportunity_runs": [
{
"start": "2026-04-28",
"nights": 17,
"max_min_stay": 1
},
{
"start": "2026-05-17",
"nights": 11,
"max_min_stay": 3
}
]
},
"next_60d": {
"total_days": 60,
"empty_nights": 58,
"occupancy_pct": 3.3,
"orphan_runs": [],
"opportunity_runs": [
{
"start": "2026-04-28",
"nights": 17,
"max_min_stay": 1
},
{
"start": "2026-05-17",
"nights": 41,
"max_min_stay": 3
}
]
},
"next_90d": {
"total_days": 90,
"empty_nights": 88,
"occupancy_pct": 2.2,
"orphan_runs": [],
"opportunity_runs": [
{
"start": "2026-04-28",
"nights": 17,
"max_min_stay": 1
},
{
"start": "2026-05-17",
"nights": 71,
"max_min_stay": 3
}
]
}
},
{
"listing_id": 299281,
"name": "Jade Getaway",
"tier": null,
"next_30d": {
"total_days": 30,
"empty_nights": 19,
"occupancy_pct": 36.7,
"orphan_runs": [
{
"start": "2026-04-28",
"nights": 3,
"max_min_stay": 2
},
{
"start": "2026-05-25",
"nights": 2,
"max_min_stay": 2
}
],
"opportunity_runs": [
{
"start": "2026-05-05",
"nights": 9,
"max_min_stay": 2
},
{
"start": "2026-05-17",
"nights": 5,
"max_min_stay": 2
}
]
},
"next_60d": {
"total_days": 60,
"empty_nights": 44,
"occupancy_pct": 26.7,
"orphan_runs": [
{
"start": "2026-04-28",
"nights": 3,
"max_min_stay": 2
},
{
"start": "2026-05-25",
"nights": 2,
"max_min_stay": 2
}
],
"opportunity_runs": [
{
"start": "2026-05-05",
"nights": 9,
"max_min_stay": 2
},
{
"start": "2026-05-17",
"nights": 5,
"max_min_stay": 2
},
{
"start": "2026-06-02",
"nights": 25,
"max_min_stay": 3
}
]
},
"next_90d": {
"total_days": 90,
"empty_nights": 74,
"occupancy_pct": 17.8,
"orphan_runs": [
{
"start": "2026-04-28",
"nights": 3,
"max_min_stay": 2
},
{
"start": "2026-05-25",
"nights": 2,
"max_min_stay": 2
}
],
"opportunity_runs": [
{
"start": "2026-05-05",
"nights": 9,
"max_min_stay": 2
},
{
"start": "2026-05-17",
"nights": 5,
"max_min_stay": 2
},
{
"start": "2026-06-02",
"nights": 55,
"max_min_stay": 3
}
]
}
},
{
"listing_id": 340620,
"name": "Red Fox Stables",
"tier": null,
"next_30d": {
"total_days": 30,
"empty_nights": 11,
"occupancy_pct": 63.3,
"orphan_runs": [
{
"start": "2026-05-21",
"nights": 1,
"max_min_stay": 1
},
{
"start": "2026-05-25",
"nights": 3,
"max_min_stay": 3
}
],
"opportunity_runs": [
{
"start": "2026-04-28",
"nights": 7,
"max_min_stay": 2
}
]
},
"next_60d": {
"total_days": 60,
"empty_nights": 39,
"occupancy_pct": 35.0,
"orphan_runs": [
{
"start": "2026-05-21",
"nights": 1,
"max_min_stay": 1
}
],
"opportunity_runs": [
{
"start": "2026-04-28",
"nights": 7,
"max_min_stay": 2
},
{
"start": "2026-05-25",
"nights": 4,
"max_min_stay": 3
},
{
"start": "2026-05-31",
"nights": 27,
"max_min_stay": 2
}
]
},
"next_90d": {
"total_days": 90,
"empty_nights": 69,
"occupancy_pct": 23.3,
"orphan_runs": [
{
"start": "2026-05-21",
"nights": 1,
"max_min_stay": 1
}
],
"opportunity_runs": [
{
"start": "2026-04-28",
"nights": 7,
"max_min_stay": 2
},
{
"start": "2026-05-25",
"nights": 4,
"max_min_stay": 3
},
{
"start": "2026-05-31",
"nights": 57,
"max_min_stay": 3
}
]
}
},
{
"listing_id": 451270,
"name": "Blackberry Cottage",
"tier": null,
"next_30d": {
"total_days": 30,
"empty_nights": 30,
"occupancy_pct": 0.0,
"orphan_runs": [],
"opportunity_runs": [
{
"start": "2026-04-28",
"nights": 30,
"max_min_stay": 3
}
]
},
"next_60d": {
"total_days": 60,
"empty_nights": 60,
"occupancy_pct": 0.0,
"orphan_runs": [],
"opportunity_runs": [
{
"start": "2026-04-28",
"nights": 60,
"max_min_stay": 3
}
]
},
"next_90d": {
"total_days": 90,
"empty_nights": 90,
"occupancy_pct": 0.0,
"orphan_runs": [],
"opportunity_runs": [
{
"start": "2026-04-28",
"nights": 90,
"max_min_stay": 3
}
]
}
},
{
"listing_id": 290588,
"name": "Valley Vista",
"tier": null,
"next_30d": {
"total_days": 30,
"empty_nights": 18,
"occupancy_pct": 40.0,
"orphan_runs": [
{
"start": "2026-04-28",
"nights": 3,
"max_min_stay": 1
},
{
"start": "2026-05-25",
"nights": 3,
"max_min_stay": 3
}
],
"opportunity_runs": [
{
"start": "2026-05-03",
"nights": 4,
"max_min_stay": 1
},
{
"start": "2026-05-10",
"nights": 4,
"max_min_stay": 1
},
{
"start": "2026-05-17",
"nights": 4,
"max_min_stay": 1
}
]
},
"next_60d": {
"total_days": 60,
"empty_nights": 46,
"occupancy_pct": 23.3,
"orphan_runs": [
{
"start": "2026-04-28",
"nights": 3,
"max_min_stay": 1
}
],
"opportunity_runs": [
{
"start": "2026-05-03",
"nights": 4,
"max_min_stay": 1
},
{
"start": "2026-05-10",
"nights": 4,
"max_min_stay": 1
},
{
"start": "2026-05-17",
"nights": 4,
"max_min_stay": 1
},
{
"start": "2026-05-25",
"nights": 26,
"max_min_stay": 3
},
{
"start": "2026-06-22",
"nights": 5,
"max_min_stay": 1
}
]
},
"next_90d": {
"total_days": 90,
"empty_nights": 55,
"occupancy_pct": 38.9,
"orphan_runs": [
{
"start": "2026-04-28",
"nights": 3,
"max_min_stay": 1
}
],
"opportunity_runs": [
{
"start": "2026-05-03",
"nights": 4,
"max_min_stay": 1
},
{
"start": "2026-05-10",
"nights": 4,
"max_min_stay": 1
},
{
"start": "2026-05-17",
"nights": 4,
"max_min_stay": 1
},
{
"start": "2026-05-25",
"nights": 26,
"max_min_stay": 3
},
{
"start": "2026-06-22",
"nights": 8,
"max_min_stay": 1
},
{
"start": "2026-07-21",
"nights": 6,
"max_min_stay": 3
}
]
}
}
],
"skipped": [],
"validation": {
"skill": "booking-gaps",
"started_at": "2026-04-28T18:20:16.651746+00:00",
"checks_run": [
"properties",
"hostaway_auth",
"calendar_coverage"
],
"summary": {
"errors": 0,
"warnings": 0,
"info": 0
},
"findings": []
}
}