Skip to main content

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

StrategyBehaviour
Round-robinDistributes bookings evenly. Each new booking goes to the teammate after the last one — fair workload, predictable order.
PriorityTries 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-busyPicks 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

  1. Each teammate connects their own Google Calendar under Build → Tools & Integrations → Google Calendar. They authorise once via OAuth — there is no shared admin connection.
  2. Open Automation → Calendar Pools → New pool. Give it a name and pick a strategy.
  3. 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).
  4. Toggle members active / inactive to 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_slots for a date range, read the options aloud, and call book_appointment once 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 + pathWhat it does
GET /api/v1/calendar_poolList your pools.
POST /api/v1/calendar_poolCreate 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}/membersList members.
POST /api/v1/calendar_pool/{id}/membersAdd 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-DDAvailable slots (union across members).
POST /api/v1/calendar_pool/{id}/bookBook 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_created event 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.