> ## Documentation Index
> Fetch the complete documentation index at: https://docs.recepta.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# Calendars

> Connecting real availability so the agent never double-books.

The agent books against live availability. Connect whatever your team already uses and it sees the same open slots your dispatcher does.

## Options

<AccordionGroup>
  <Accordion title="Internal calendars" icon="calendar-days">
    Recepta.ai's own calendars, for teams that don't run one elsewhere. Create a calendar per crew, truck, or technician and the agent books against real capacity rather than a single shared grid.

    The simplest option if you're currently scheduling on a whiteboard or in a spreadsheet.
  </Accordion>

  <Accordion title="Google Calendar" icon="google">
    Connect via OAuth from **Integrations**. Recepta.ai reads availability and writes bookings back, so appointments appear in the calendar your team already checks.
  </Accordion>

  <Accordion title="Apple Calendar" icon="apple">
    Connects over CalDAV using an iCloud app-specific password rather than OAuth. Generate one in your Apple ID security settings — don't use your main Apple password.
  </Accordion>

  <Accordion title="Your field-service CRM" icon="screwdriver-wrench">
    Jobber and Housecall Pro carry their own scheduling. Booking through the CRM keeps jobs, customers, and dispatch in one system. Usually the right choice if you already run one. See [Field-service CRM](/integrations/field-service-crm).
  </Accordion>

  <Accordion title="GoHighLevel calendars" icon="chart-line">
    If you run GHL, its calendars can be used as the availability source. See [CRM & marketing](/integrations/crm-and-marketing).
  </Accordion>
</AccordionGroup>

## Choosing one

<Steps>
  <Step title="Already on a field-service CRM?">
    Book through it. Splitting scheduling between two systems creates conflicts nobody notices until a crew turns up somewhere twice.
  </Step>

  <Step title="Team lives in Google or Apple Calendar?">
    Connect that. Bookings show up where your people already look.
  </Step>

  <Step title="Nothing consistent today?">
    Use internal calendars. One per crew.
  </Step>
</Steps>

<Warning>
  Pick a single source of truth for availability. Two connected calendars that don't know about each other will double-book, and the failure shows up as a crew arriving at an empty house.
</Warning>

## Making availability realistic

A connected calendar tells the agent when you're free. Your [appointment settings](/booking/appointments) tell it what a bookable slot actually looks like — duration, travel buffers, arrival windows, capacity. Both need to be right:

* Block out non-job time — lunch, admin, supplier runs. If it isn't on the calendar, it's bookable.
* Set travel buffers that reflect your service area, not best-case traffic.
* Keep crew count and concurrent-job capacity current when someone's on leave.

<Tip>
  After connecting, book a test appointment through the agent and confirm it appears on the right calendar with the right duration and window. Verify once rather than discovering it on a live job.
</Tip>
