From checkout to confirmed cleaner
- A checkout appears in a connected calendar (or arrives from a PMS). Lemon creates a
checkoutcleaning job at the property's checkout time — 11:00 by default, configurable per property. - The job waits. Offers do not go out the moment a booking is made months ahead. The default assignment lead is two weeks before checkout (
assignmentLeadValue: 2 weeks); until then the job ison_hold. Hosts can activate it early by hand. - The cascade starts. Lemon offers the job to the first cleaner in the property's priority list, on whatever channel that cleaner uses. The message carries the property, address, date, time, job type and a link.
- The cleaner answers from the link. Yes confirms the job and sends a confirmation with the schedule link. No, or silence for 60 minutes (
normalJobTimeoutMinutes; 10 for urgent jobs), moves the offer to the next cleaner. - If nobody accepts, the job goes to
waiting_for_cleaners, the host is told (all_cleaners_declined), and the host can assign someone directly or broadcast.
Two modes
- Cascade — one cleaner at a time in priority order. Predictable, good for teams where one person "owns" a property.
- Broadcast — the offer goes to several cleaners at once and the first to accept wins; the others are told the job is taken. Good for larger pools and urgent jobs.
Guards inside assignment
- A cleaner cannot be double-booked: Lemon checks overlapping jobs against the cleaner's "simultaneous jobs" capacity before offering.
- Availability rules per cleaner (weekdays, date ranges, blocked windows) are respected.
- Assignment starts through a compare-and-swap in the database, so two servers cannot both start offering the same job.
- A cleaner who cancels after accepting is tracked, and a minimum cancellation notice can be enforced.
Numbers from production
Since February 2026: 533 jobs created, 360 offers accepted, 32 declined (92% acceptance), median 37 minutes from offer to acceptance. Source: feed integrity report, lifetime section.