Skip to main content

$ cat /proof_of_work/turnover-agent · agent · telegram bot · sms automation

Turnover Agent

A property manager's rental turnovers, run by an agent: guest checks out, the cleaner gets a text, the agent tracks confirmation, escalates if anything stalls, and tells the manager when it's done. Nobody downloads an app.
Platform

Telegram bot for the manager, plain SMS texts for cleaners — plus a live web dashboard.

Stack

FastAPI, Supabase, Twilio SMS, LLM reply-reading, cron watchers — on a small VPS.

Status

Live in production — real turnovers, running daily since September 2026.

The problem. Every guest checkout starts a scramble: is the place clean before the next check-in? The manager was texting cleaners by hand, tracking replies by memory, and finding out about a missed clean when the guest was already at the door.

The build. An agent that watches the booking calendar for checkouts, then runs the loop by itself: it texts the cleaner the moment a turnover appears, reads the cleaner's plain-text reply, updates the state, and escalates automatically if nobody confirms in time. The manager sees everything in Telegram and on a live dashboard.

Why it works. No new app for anyone. The manager talks to a Telegram bot; cleaners reply to regular text messages like they already do. The agent does the chasing, the remembering, and the waking-you-up-only-when-it-matters.

The loop, in four texts

From offer to done — the cleaner never leaves their text messages, the manager never lifts a finger unless something needs a human.

Agent texts the cleaner the turnover offer, one tap to accept
The offer lands in the cleaner's texts — one tap to accept
Manager asks the agent about the day; the agent answers
Manager asks; the agent answers
Cleaner confirms done; agent logs it and recaps the day
Done confirmed in plain texts
Agent answers a guest's late check-in and tells the host
Guest concierge handles the rest

Screens use sample data.

What it does without being asked

Watches the calendar

Polls the booking feed every 15 minutes. A new checkout becomes a turnover automatically — no copy-pasting between apps.

Chases, politely

No confirmation? A reminder goes out. Still nothing? The escalation watcher flags it to the manager with a plain-English summary of what's stuck.

Reads free-text replies

Cleaners answer in their own words — “done, left keys under mat” — and the LLM layer maps it to the right state. No buttons to decode.

Answers guests

Unknown numbers get a concierge mode: check-out times, local FAQs, and a handoff to the host when it's something real.

The manager's side

A live dashboard next to the agent: today's turnovers with cleaner status at a glance, properties with their calendar and crew.

Turnover Agent dashboard: today's checkouts with cleaner status
Today's checkouts — one glance, whole day
Properties screen with connected calendars
Properties, calendars and crews

Screens use sample data.

Why not just buy a platform?

There are good products in this space. They're built for scale, sold per seat, and shaped around their workflow. This agent is built around yours.

Cleaning marketplaces

Turno-style services connect you with their pool of cleaners, per clean. You pay per booking and — the catch — you're hiring their cleaners, not yours. If your trusted cleaner isn't on the platform, you're recruiting.

Ops suites

The big platforms (Breezeway, TIDY) bundle scheduling, messaging, checklists, and more — published entry rates sit around twenty dollars per property per month and scale up from there with seats and add-ons. Powerful, but you configure their system, adapt your team to it, and pay monthly for the parts you don't use.

This agent — built for you

One flat build, your cleaners keep texting, your calendar stays where it is, your rules drive escalation. No marketplace, no per-seat math, no monthly fee for 30 features you don't touch. When your operation changes, we change the agent — full customization is the point.

Pricing is scoped per operation — tell us what your day looks like and get a quote in one conversation.

$ echo "ready?"

If you made it this far, you already know if you want to talk.