ZenMaid automation
Reschedule or cancel a day of ZenMaid appointments in bulk
The forecast says ice on Friday, or the van breaks down on Tuesday morning, and every job that day has to go somewhere else. In ZenMaid that means dragging appointments one by one on the calendar and deciding, customer by customer, whether to move or cancel.
Cotlet does it in your own ZenMaid account with list_appointments, get_appointment, reschedule_appointment, add_note, cancel_appointment 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 to move or cancel appointments (checked 12 Oct 2026); Zapier can report that an appointment was updated or cancelled but cannot change one. Inside ZenMaid, List View Bulk Actions can cancel a whole day, but there is no bulk reschedule: each move is a separate drag on the calendar.
By hand
How you do it in ZenMaid today
- Open Calendar View or one of the Dispatch Views; ZenMaid supports drag and drop only in Calendar View, Dispatch View (Weekly scheduling), Dispatch View (Horizontal) and Dispatch View (Vertical).
- Drag each appointment to the new date, fill in Reschedule Date in the "Reschedule appointment to..." window, decide on "Automatically recalculate amount owed for this appointment?" and click Save.
- Open each moved appointment and type its one-time Appointment Notes again, because ZenMaid does not carry them over to the new date.
- For jobs that cannot move, open Appointments > List View, filter the date, tick the boxes and choose Bulk Actions > Set status to: Cancelled.
- Tell customers and cleaners. ZenMaid's help does not say whether a drag-and-drop move or a bulk cancel notifies anyone, so the safe route is to text each customer by hand, and that is where someone gets missed.
With an agent
How to reschedule or cancel a day of ZenMaid appointments in bulk
Prompt
An ice storm is coming Friday. Move every ZenMaid appointment on Friday to the same time next Monday where the cleaner is free, cancel the rest, keep the notes, and tell the customers. - 01
List the day and sort it
The agent pulls the affected date with list_appointments and opens each job with get_appointment. Recurring visits, one-off jobs and visits with notes are grouped separately, because each group needs a different decision.
- 02
Find a target slot per job
For each appointment the agent checks the target day for the same cleaner at the same time. If that cleaner is busy, it tries a later start on that day and then the next working day. A job that fits nowhere goes on the cancel list instead of being forced into an overlap.
- 03
Move only this visit of a recurring series
Weather moves one date, not the customer's routine, so recurring visits are moved for this appointment only. The agent leaves the price as it is unless the length changed and you asked for a recalculation.
- 04
Put the notes back
Right after each move the agent copies the old one-time note, such as a gate code or "pets loose", onto the new date with add_note and adds a private note with the reason for the move.
- 05
Cancel what is left and tell people
The leftover jobs are set to Cancelled, never deleted, with the client and cleaner notices you choose. Moved customers get one message with the new day and time. The agent stops and asks if it finds a job already moved or marked paid.
What you get back
Example data
Fri 17 Oct: 9 appointments
Moved to Mon 20 Oct, same time: 6 (notes copied on 4)
Moved to Mon 20 Oct, later start: Hughes 13:30 (Lisa busy at 10:00)
Cancelled, client and cleaner notified: Ramos 08:00 One-time Deep Clean, Lee 15:00 Move-out Clean (no slot until Thu)
Price recalculated: none
Messages sent: 9 customers Other ways to ask
- Push every appointment today after 1 pm back by one hour; the team is running late.
- Cancel all of Friday because of the storm, notify clients and cleaners, and list who wants to rebook.
- Move the Hendersons' recurring clean from Tuesdays to Wednesdays for all future visits.
- Our van is in the shop until Thursday. Move Team Two's jobs on Tuesday and Wednesday to Thursday and Friday.
Before you automate it
What ZenMaid allows, and what to know first
- ZenMaid does not transfer one-time Appointment Notes when an appointment is rescheduled; work items, price, status and manually edited times carry over.
- ZenMaid copies the recurring pattern when a recurring appointment is dragged, and its help warns that this can bring back a previously deleted appointment in the same series.
- ZenMaid keeps the old price after a move unless "Automatically recalculate amount owed for this appointment?" is checked in the Reschedule window.
- A cancelled ZenMaid appointment is hidden from the calendar by default, while cancelling one date of a recurring service leaves the rest of the series running.
- ZenMaid skips its automatic appointment reminder when you send a reminder by hand before the scheduled send time, so a manual "new time" reminder replaces the automatic one.
reschedule_appointment, cancel_appointment and send_message ask for your OK by default. To run it on a schedule without you, switch confirmation off for those tools in your dashboard.
Sources: ZenMaid help: How to Reschedule Appointments Using Drag and Drop · ZenMaid help: How To Cancel All Appointments on a Day in Bulk · ZenMaid help: How to Cancel an Individual Appointment in a Recurring Series · ZenMaid help: How to Automate the Sending of Appointment Reminders
REST
Call reschedule_appointment from a script
curl
curl https://cotlet.dev/api/v1/zenmaid/reschedule_appointment \
-H "Authorization: Bearer $COTLET_API_KEY" \
-H "Content-Type: application/json" \
-d '{"appointment_id":"a_993102","date":"2026-10-20","start_time":"09:00","apply_to":"this_appointment"}' Example response
{
"appointment_id": "a_993102",
"date": "2026-10-19",
"start_time": "10:00",
"end_time": "13:00",
"price": "180.00",
"price_recalculated": false
} MCP: add https://cotlet.dev/mcp/v1 with the same key; the tool is zenmaid_reschedule_appointment. Example data.
Schedule it in n8n, Make, Zapier or cronTools
ZenMaid tools this automation uses
| Tool | Parameters |
|---|---|
| list_appointments | from, to, query, paid, include_cancelled, limit, cursor |
| get_appointment | appointment_id |
| reschedule_appointment | appointment_id, date, start_time, end_time, recalculate_price, apply_to |
| add_note | appointment_id, contact_id, body, visibility |
| cancel_appointment | appointment_id, notify |
| send_message | appointment_id, contact_id, template, channels, body |
Frequently asked questions
Do cleaners hear about a cancelled job?
When you cancel a single ZenMaid appointment that has a cleaner assigned, ZenMaid opens a pop-up asking whether to notify the customer or the cleaner. ZenMaid's help for the List View bulk cancel does not mention that pop-up, so the agent sends the cleaner and customer notices you choose for each cancelled job.
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.