ZenMaid logo

ZenMaid automation

Reassign a ZenMaid cleaner's appointments when they call in sick

A cleaner texts at 6:30 am that she is sick, and her row in the Dispatch View is full until 4 pm. Before the first door opens, someone has to hand each job to a colleague, fix the work orders and warn customers that a new face is coming.

Cotlet does it in your own ZenMaid account with list_appointments, list_cleaners, get_appointment, assign_cleaners and send_message, called by your AI agent, an n8n workflow or a script.

Hosted · nothing to install or maintain

Official options

Can ZenMaid do this on its own?

ZenMaid has no API for changing who is assigned to a job (checked 12 Oct 2026), and its Zapier integration has triggers only, no actions. The closest native tool, Actions > Replace on a cleaner profile, is built for someone who leaves: ZenMaid deactivates that cleaner and unassigns them from all future appointments, which is wrong for a one-day absence.

By hand

How you do it in ZenMaid today

  1. Hover the Scheduling icon and open Dispatch View - Horizontal for the day; ZenMaid lists cleaners down the left side with the hours across the top, so the absent cleaner's jobs and everyone else's open time sit in one screen.
  2. Click each of the absent cleaner's appointments, go to the Cleaners section of the side panel, click Assign, pick a replacement and click Assign Cleaners. On a recurring job, leave "Assign selected cleaners to all future appointments in this recurring service?" unchecked, or the swap becomes permanent.
  3. If the cleaner is out for several days on the Pro Max plan, open Cleaners > Cleaners availability > Edit Time Off and mark the days; ZenMaid's help does not say that this moves appointments already booked.
  4. For each customer, open the appointment, click Actions > Send Text/Email, pick a template from Type of communication and rewrite it to name the new cleaner.
  5. Repeat for every job. The usual misses are a recurring job swapped for all future dates by one wrong tick, a customer who was never told, and an empty slot discovered when the replacement is already across town.

With an agent

How to reassign a ZenMaid cleaner's appointments when they call in sick

Prompt

Ana called in sick for Thursday. Find every ZenMaid appointment she has that day, suggest a free cleaner for each one, and after I approve, reassign them and text the customers who is coming instead.
  1. 01

    Pull the absent cleaner's day

    The agent searches list_appointments for the cleaner's name over the absence dates and drops cancelled visits. A job with two cleaners stays on the list, because one remaining cleaner may still cover a short visit alone, and the agent asks you about those.

  2. 02

    Read each job before choosing

    get_appointment gives the address, service type and start time. A deep clean or a move-out needs someone who does that service, and a key-access note means the replacement must see the property notes on the work order.

  3. 03

    Find who can take it

    list_cleaners gives the active staff, and the same day's schedule shows each person's gaps. The agent prefers a cleaner with a free block around the start time and a nearby previous job. Teams count as one unit, so it never splits a team to fill a single slot.

  4. 04

    Show the plan, then swap one visit at a time

    You see every job with the proposed cleaner and the ones nobody can take. After your OK the agent changes only that date's visit, so a recurring customer gets their usual cleaner back next week. A job that is already reassigned, for example by a colleague in the office, is skipped and reported.

  5. 05

    Tell the customers, and only them

    Each customer gets one message naming the new cleaner. Customers without an email or phone on file are listed for a call, since ZenMaid cannot reach them. Nothing is sent before the reassignment succeeds.

What you get back

Example data

Ana, Thu 16 Oct: 5 appointments
To Maria: Patel household 08:30 Standard Clean, Gomez 13:00 Standard Clean
To Team Two: Whitfield 10:00 Deep Clean (3 h)
To Joy: Okafor 15:30 Standard Clean (recurring, this visit only)
Not covered: Brennan 11:00 Move-out Clean, nobody free before 14:00. Call +1 512 555 0187
Texts sent: 4 customers. No phone or email on file: none

Other ways to ask

  • Every evening at 6 pm, list tomorrow's ZenMaid appointments with no cleaner and suggest who has time for each.
  • Maria is on vacation 20 to 24 October. Move her one-off jobs to Joy and tell me which recurring customers want to wait for Maria.
  • Ana is out this afternoon only. Reassign her jobs after 12:00 and leave the morning alone.
  • Show me who could cover Ana's Thursday, but do not change anything yet.

Before you automate it

What ZenMaid allows, and what to know first

  • ZenMaid's Replace action under Cleaners > All Cleaners deactivates the cleaner and unassigns them from every future appointment, so it fits a resignation, not a sick day.
  • ZenMaid Cleaner Availability, where time off is entered, is a Pro Max plan feature, and cleaners and contractors cannot enter their own time off there.
  • ZenMaid text messages are one-way, so a customer who replies to the reassignment text does not reach your office through ZenMaid.
  • ZenMaid sends work orders to cleaners automatically at the time set under Settings > Features > Email & SMS communications, for example the day before at 6 pm, and caps SMS work orders at 156 characters.

send_message asks for your OK by default. To run it on a schedule without you, switch confirmation off for that tool in your dashboard.

Sources: ZenMaid help: How to Replace a Cleaner on All Appointments · ZenMaid help: How to Change the Default Cleaner or Team in a Recurring Service · ZenMaid help: Cleaner Availability Feature · ZenMaid help: How to Automatically Send Work Orders by Text and Email · ZenMaid help: Can Customers and Cleaners Respond to ZenMaid SMS Notifications?

REST

Call assign_cleaners from a script

curl

curl https://cotlet.dev/api/v1/zenmaid/assign_cleaners \
  -H "Authorization: Bearer $COTLET_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"appointment_id":"a_993102","cleaner_ids":["cl_1344"]}'

Example response

{
  "appointment_id": "a_993102",
  "cleaners": [
    "Cleaner B"
  ]
}

MCP: add https://cotlet.dev/mcp/v1 with the same key; the tool is zenmaid_assign_cleaners. Example data.

Schedule it in n8n, Make, Zapier or cron

Tools

ZenMaid tools this automation uses

Cotlet ZenMaid tools used to reassign a ZenMaid cleaner's appointments when they call in sick
Tool Parameters
list_appointments from, to, query, paid, include_cancelled, limit, cursor
list_cleaners include_inactive
get_appointment appointment_id
assign_cleaners appointment_id, cleaner_ids
send_message appointment_id, contact_id, template, channels, body
All 13 ZenMaid tools with descriptions

Frequently asked questions

Will the replacement cleaner get the work order?

ZenMaid sends work orders automatically at the time you set in Settings, for example the day before. ZenMaid's help does not say whether a work order goes out again after a same-day reassignment, so the agent reports which replacements were made after that send time and you can send the work order by hand.

Give your agent access to ZenMaid.

Free 7-day trial with 5,000 credits, no card needed. Cotlet is independent and not affiliated with ZenMaid.