From checkout to confirmed cleaner
- A checkout appears in a connected calendar (or arrives from a PMS). Lemon creates a checkout cleaning 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. By default the job waits until two weeks before checkout. 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 (10 for urgent jobs), moves the offer to the next cleaner.
- If nobody accepts, the job is marked as waiting for cleaners, the host is told, 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.
Safety checks 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.
- The same job is never offered twice at once.
- 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.
Technical details
- The job type is
checkout. Until the assignment lead time is reached (assignmentLeadValue: 2 weeks) the job ison_hold. - The offer timeout is
normalJobTimeoutMinutes(60; 10 for urgent jobs). - When nobody accepts, the job status becomes
waiting_for_cleanersand the host receivesall_cleaners_declined. - Assignment starts through a compare-and-swap in the database, so two servers cannot both start offering the same job.
