# Auto-create Zoom meetings for new Acuity virtual sessions

> Every 15 minutes we sweep Acuity for freshly booked virtual sessions, spin up a Zoom room with passcode, draft a warm client confirmation, and post a compact Slack heads-up.

- Workflow type: agent
- Services: Acuity Scheduling, Zoom, Gmail, Slack Bot
- Categories: Operations, Personal Productivity
- Published: 2026-07-17

## What it does

- Sweeps Acuity every 15 minutes during business hours for appointments that were just booked.
- Uses judgment on the type name and description to decide which appointments are virtual or online sessions.
- Creates a Zoom meeting timed to the appointment window, with waiting room on and a passcode set.
- Drafts a warm Gmail confirmation to the client with the join link, dial-in fallback, and one or two prep pointers pulled from the intake form.
- Posts a one-line note in Slack so the team knows the meeting is set up.

## What you'll need

- An Acuity Scheduling account with online booking enabled
- A Zoom account you can create meetings with
- A Gmail login for the person who owns the client relationship
- A Slack workspace and a channel where the team wants the heads-up

## Prompt

Every 15 minutes during business hours (roughly 8am to 6pm on weekdays in the account's local timezone), sweep Acuity Scheduling for appointments that were freshly booked since the previous run and provision Zoom meetings for the virtual ones.

Step 1. Fetch fresh bookings. Call Acuity's List Appointments with a small look-back window that comfortably overlaps the 15-minute cron cadence, filtering to appointments created since the previous sweep. Acuity datetime parameters must be parseable by PHP strtotime (e.g. 2024-03-15T14:00:00-0500), and timezones are IANA identifiers. Keep a lightweight record of appointment IDs already processed so re-runs never double up.

Step 2. Judge which bookings are virtual. For each fresh appointment, look at the appointment type name and description. Use judgment to decide whether it is a virtual or online session — things like 'video consult', 'online coaching', 'virtual intake', 'remote session', 'telehealth', 'Zoom call' are strong signals; anything clearly in-person (studio, office, on-site, in-clinic) gets skipped. Do not hardcode a fixed list because the practitioner's virtual offerings drift over time. If ambiguous, treat it as virtual only when the type name or description explicitly indicates remote.

Step 3. Enrich with intake context. For each virtual booking, call Acuity's Get Appointment with intake form answers included. Read the answers so you can tailor the confirmation email later — flag anything relevant like the client's goals, prior context, or logistical constraints.

Step 4. Create the Zoom meeting via Zoom's Create Meeting operation. Set: topic to '<Client first + last name> — <Appointment type>'; type to scheduled (2); start_time to the appointment datetime in ISO 8601; timezone to the appointment's IANA timezone; duration to the appointment's duration in minutes; and settings with waiting_room enabled and a passcode set (use the password field so the client sees it in the join link). Capture the join_url, id, password, and dial-in numbers from the response.

Step 5. Draft the client confirmation with Gmail's Create a Draft. Recipient is the client's email from the Acuity record. Subject something like 'Your <appointment type> is confirmed for <date> at <time>'. Body: warm hello using their first name; the session type, date, and time formatted in the client's timezone; the Zoom join link with the passcode; the phone dial-in fallback that Zoom returned; and one or two short prep pointers tailored to the session type, referencing the intake answers when they naturally inform what to prep. Keep it warm but efficient — no hard sell, no boilerplate essay.

Step 6. Post a compact heads-up to Slack using Slack Bot's Send a Message. Target the team's bookings or operations channel. Keep it to a single line so it reads fast: something like 'Zoom set up: Jane Doe — 60min Video Consult on Thu Aug 14 at 2:00pm PT. Draft ready in Gmail.' Include the join link only if the team asks for it; the point is that the meeting is ready and the confirmation is drafted.

Guardrails: the Gmail confirmation is a draft, never a direct send — the practitioner reviews before it goes out. Skip any booking whose start time is already in the past (safety net for backfills). Never create a second Zoom meeting for the same appointment ID. If Zoom returns an error, still post the Slack note flagging the failure so the team can intervene, but do not draft the client email.

## How to customize

- Which appointment types count as virtual (the workflow reads the type name and description, so name them clearly)
- What prep pointers get included in the confirmation email for each session type
- Which Slack channel gets the one-line heads-up

## FAQ

### How does the workflow know which appointment types are virtual?

It reads the appointment type name and description and uses judgment. If a type is called something like 'Video Consult', 'Online Coaching', or 'Remote Intake', it gets treated as virtual. In-person types get skipped. You can tune this by naming your appointment types clearly.

### Will it accidentally create duplicate Zoom meetings?

No. The workflow only acts on appointments that were freshly booked since the previous sweep, and it remembers which bookings it has already processed so a repeat run does not double up the Zoom room or the email draft.

### Can I review the confirmation email before it goes to the client?

Yes. It lands as a Gmail draft, not a send. You can skim it, tweak the wording, and hit send when you are ready.

### Do I need a paid Zoom plan?

A free plan works for shorter sessions. If your virtual appointments run longer than the free plan allows, you will want a paid plan so the meeting does not cut off.

### What if the client filled out an intake form?

The workflow pulls the intake answers and uses them to personalize the prep pointers, so the email speaks to what the client actually wrote about.

Use this prompt in General Input: https://www.generalinput.com/prompts/auto-create-zoom-meetings-for-new-acuity-virtual-sessions