OTA ↔ PMS reconciler
Every morning an agent proves last night's OTA bookings landed in the PMS correctly, before I have had coffee.
Booking.com and Expedia reservations flow into Mews automatically, but 'automatically' fails quietly. A missed charge, a cancel that did not sync, a wrong fee. Across the portfolio and two OTAs, that is a lot of surface I cannot eyeball nightly.
How it works
A read-only Python job on the mini pulls last night's arrivals from each OTA extranet and from Mews (API where enabled), normalizes them, and reconciles charges, cancels, no-shows, and fees. It flags HIGH and MEDIUM discrepancies to me over Telegram and email, and publishes a recon board behind Cloudflare Access.
- Auth is seeded persistent Chrome profiles per site, real Chrome over CDP to defeat anti-bot.
- A keepalive touches each OTA session on a schedule and alerts the moment one lapses.
- A two-phase single-session design pulls every property inside one browser login to avoid tripping fraud detection.
Live, firing around 8:30am. Most of the engineering went into session durability. OTA extranets put a human-verification wall at login that automation cannot pass, so a seeded session that periodically needs a manual reseed is just reality. It degrades safely, one alert and no cascade, when a session lapses.
A reconciler is exactly the work a controller's clerk used to do by hand. Now it is a nightly agent that only pings me on a real exception. Same coverage, less of my attention, fewer exceptions over time.