Calendar Pools
A Calendar Pool is a group of Google Calendars that share booking slots. When your assistant offers a meeting, the booking lands on exactly one teammate based on a distribution strategy you pick. Use it whenever more than one person takes appointments — sales demos, dental chairs, consultation slots, service-area technicians.
You set up the pool once, link calendars, pick a strategy, and the assistant or a workflow can book on it. Every successful booking emits a booking_created event, which means reminder workflows fire automatically.
The three strategies
| Strategy | Behaviour |
|---|---|
| Round-robin | Distributes bookings evenly. Each new booking goes to the teammate after the last one — fair workload, predictable order. |
| Priority | Tries the highest-priority teammate first. If they're busy at the requested time, falls through to the next priority, and so on. Use it when seniority or VIP coverage matters. |
| Least-busy | Picks the teammate with the least booked time on the target day. Use it when same-day load matters more than fairness. |
Four business use cases
B2B SaaS — SDR round-robin. An analytics startup has six SDRs. The demo Calendar Pool uses round-robin so workload stays even. The assistant qualifies the lead, offers the next three available slots (merged across all six SDRs), books one, and the round-robin picker decides which SDR gets the meeting. Outcome: SDR managers stopped manually balancing the lead queue.
Enterprise legal — senior partner priority. A boutique firm wants VIP intake calls to land with the senior partner first. The Calendar Pool uses priority with the partner at priority 1 and two associates at priority 5. When the senior partner is free at the requested time, they get the meeting; otherwise it falls to an associate. Outcome: highest-value clients meet the right person 80% of the time without anyone reading inboxes.
Dental practice — three treatment chairs. Bright Smile Dental has three hygienists, each with a Google Calendar that mirrors a treatment chair. The Calendar Pool uses least-busy so same-day load stays even. The assistant offers slots based on the union of all three calendars; whichever chair has the least time booked that day wins. Outcome: even chair utilisation, no manual juggling at the front desk.
Home services — multi-technician routing. A plumbing company has eight technicians across one metro. The Calendar Pool uses round-robin within ZIP code groups (one pool per service area). When a customer books a same-day call, the workflow picks the right pool by ZIP, books a slot, and a follow-up workflow texts both the customer and the assigned technician.
Setting up a pool
- Each teammate connects their own Google Calendar under Build → Tools & Integrations → Google Calendar. They authorise once via OAuth — there is no shared admin connection.
- Open Automation → Calendar Pools → New pool. Give it a name and pick a strategy.
- On the pool's detail page, add members from the list of connected Google Calendars in your workspace. Set a priority number if you picked the priority strategy (lower number = higher priority).
- Toggle members
active/inactiveto take them in and out of rotation without removing them.
Using a pool from an assistant
In the assistant's tools, attach the Calendar Pool tool and reference the pool. The assistant gets two functions automatically:
find_available_slots(start_date, end_date)— returns the union of available slots across every active member.book_appointment(date, time, email, phone)— picks a member by the pool's strategy and books.
Your assistant's prompt should pair them:
When the customer wants to book, call
find_available_slotsfor a date range, read the options aloud, and callbook_appointmentonce they confirm.
Using a pool from a workflow
The Book pool slot workflow node accepts the pool ID and templated date/time/contact fields. After the booking, the run's working memory picks up the assigned teammate's ID, which downstream steps can use.
{
"id": "do_book",
"type": "book_pool_slot",
"data": {
"pool_id": "0190d1f8-7fa0-7c12-9c55-65a9c1bcffaa",
"appointment_date": "{{appointment_date}}",
"appointment_time": "{{appointment_time}}",
"email": "{{email}}",
"phone": "{{phone}}"
}
}
REST API
| Method + path | What it does |
|---|---|
GET /api/v1/calendar_pool | List your pools. |
POST /api/v1/calendar_pool | Create a pool. Body: {"name": "...", "strategy": "round_robin"}. |
GET /api/v1/calendar_pool/{id} | Read a pool plus its active members. |
GET /api/v1/calendar_pool/{id}/members | List members. |
POST /api/v1/calendar_pool/{id}/members | Add a member. Body: {"link_tool_user_id": "...", "priority": 0}. |
GET /api/v1/calendar_pool/{id}/available_slots?start_date=YYYY-MM-DD&end_date=YYYY-MM-DD | Available slots (union across members). |
POST /api/v1/calendar_pool/{id}/book | Book a slot. Body: {"appointment_date": "...", "appointment_time": "...", "email": "...", "phone": "..."}. |
Example response from /book:
{
"response": "Booked successfully for 2026-05-20 at 10:00 with Dr. Patel.",
"member_id": "0190d1f9-22a2-7c12-9c55-bbb222222222",
"appointment_date": "2026-05-20",
"appointment_time": "10:00"
}
Conflict handling
- Availability comes from a live check against each member's Google Calendar — no local cache, so the answer is always current.
- Round-robin picks are serialised, so two simultaneous bookings cannot land on the same teammate by accident.
- If no member is free at the requested time on a priority or least-busy pool, the booking returns "No available agent for the requested time" and your assistant can offer alternatives.
Limits
- Calendar members must be Google Calendar today. Other providers are on the roadmap.
- Bookings emit a
booking_createdevent with the pool member's ID — wire this to a workflow to send a calendar invite, post to Slack, or trigger reminders.
Where to next
- Workflows — fire automated steps on
booking_created. - Conversation Flow — drive the conversation that ends in the booking.
- Pricing — calendar pools are included on plans where the feature is enabled.