# Appointments

> Schedule and manage appointments — automatic contact creation, CRM meeting sync, and owner assignment.

Source: https://docs.graph8.com/engage/appointments/

Appointments handles scheduling and syncs booked meetings to your CRM. When a prospect books a meeting, graph8 automatically creates or updates the contact, syncs the meeting to your CRM, and assigns the correct owner.

## Appointments vs Meetings

These two areas work together, but they are not the same feature:

| Feature | Primary Purpose |
|---------|-----------------|
| **Appointments** | Booking workflow, scheduling events, and CRM sync |
| **Meetings** | Reviewing calendar meetings in the Inbox with transcript and follow-up context |

Use **Appointments** when you need to control how meetings are booked and synced. Use **Meetings** when you want to review what happened in the meeting and what should happen next.

## How It Works

The flow:

1. A prospect books a meeting through your scheduling page
2. The scheduling system sends an event to graph8
3. graph8 processes the event — creates/updates contacts and syncs to your CRM
4. The meeting appears in your CRM with the correct contact associations

This runs automatically in the background for every booking.

## Appointment Events

graph8 processes four types of scheduling events:

| Event | What Happens |
|-------|-------------|
| **Booking created** | New meeting booked — contact created/updated, meeting synced to CRM |
| **Booking updated** | Meeting details changed — CRM meeting updated |
| **Booking canceled** | Meeting canceled — CRM meeting marked as canceled |
| **Booking rescheduled** | Meeting moved — original marked as rescheduled, new meeting created in CRM |

### Reschedule Handling

Reschedules are handled differently by CRM:

- **HubSpot / Pipedrive** — the original meeting is updated to "rescheduled" status and a new meeting is created
- **Salesforce** — a new meeting is created (Salesforce doesn't reliably support finding and updating the original)

## Contact Creation

When a booking comes in, graph8 automatically processes the attendees:

- **Creates new contacts** if they don't exist in your database
- **Updates existing contacts** with any new fields (phone number, name)
- **Processes guests** from the booking response (additional attendees)
- **Skips the host** — the meeting host is treated as the owner, not a contact
- **Deduplication** — prevents creating duplicate contacts

## CRM Sync

Meetings are synced to your connected CRM:

| CRM | Capabilities |
|-----|-------------|
| **HubSpot** | Create meetings, update on reschedule/cancel, associate with contacts |
| **Salesforce** | Create meetings, associate with contacts |
| **Pipedrive** | Create meetings, update on reschedule/cancel, associate with contacts and attendees |

Each synced meeting includes:
- Title and description
- Start and end times
- Location and meeting URL
- Contact associations
- Owner assignment
- Booking UID for tracking reschedules and cancellations

## Owner Assignment

Control how meeting owners are assigned in your CRM:

| Mode | Behavior |
|------|----------|
| **Use host as owner** | The meeting host becomes the CRM owner — no fallback if host isn't found |
| **Use default owner** | Try the host first, fall back to a configured default owner |

Configure owner assignment per CRM integration in **Settings → Integrations**.

## Settings

Appointment settings are configured per CRM integration:

| Setting | What It Controls |
|---------|-----------------|
| **Entity type** | Whether to create contacts, leads, companies, or deals from bookings |
| **Field mappings** | Map booking fields to CRM fields |
| **Owner assignment mode** | How meeting owners are determined |
| **Default owner** | Fallback owner when host can't be matched |

> **Tip:**
> Connect your CRM before your first appointment goes live. When meetings sync automatically, your sales team sees booked meetings in their CRM without any manual data entry.

## Routing Forms

A routing form is a public form that qualifies prospects before they book. Based on the answers they submit, graph8 routes them to the right calendar, the right rep, or an ineligible-lead page.

### What Routing Forms Are For

- **Qualify inbound leads** — ask company size, role, or budget before offering a meeting slot
- **Route to the right rep** — enterprise leads to AEs, SMB leads to SDRs, support requests to CS
- **Block out-of-ICP traffic** — deny meetings to prospects who fail qualification criteria
- **Collect context before the call** — so reps walk into meetings prepared

### Creating a Routing Form

1. Go to **Engage → Appointments → Routing Forms**
2. Click **New Form**
3. Add questions (each question becomes a form field):
   - **Short text** — name, title
   - **Email** — auto-validated
   - **Phone** — auto-formatted with country code
   - **Dropdown** — single-select with predefined options
   - **Multi-select** — multiple choices (e.g., tools they already use)
   - **Number** — company size, budget tier
   - **Long text** — free-form context
4. Mark required questions with **Required**
5. Click **Routing Rules** to configure how answers map to outcomes
6. Click **Publish** to get a shareable URL

### Routing Rules

Rules are evaluated in order. The first match wins. If no rule matches, the fallback action applies.

| Rule Condition Types | Example |
|---------------------|---------|
| **Field equals** | `Company size = 1000+` |
| **Field contains** | `Role contains "VP" or "Director"` |
| **Field in range** | `Budget between 10,000 and 100,000` |
| **All of** | Multiple conditions must all match |
| **Any of** | At least one condition must match |

### Routing Actions

| Action | Behavior |
|--------|----------|
| **Show calendar** | Display a specific calendar (e.g., AE calendar vs. SDR calendar) |
| **Assign rep** | Match the prospect to a specific user's calendar |
| **Round-robin** | Distribute across a pool of reps |
| **Redirect URL** | Send prospect to an external page (pricing, resources, ineligible page) |
| **Thank-you page** | Show confirmation without offering a meeting |
| **Webhook** | Send the submission to your own endpoint |

### Example: Enterprise vs. SMB Routing

A typical B2B setup:

1. Ask **Company size**
2. Rule 1: If `Company size ≥ 500` → show **AE calendar** with round-robin across enterprise AEs
3. Rule 2: If `Company size 50–499` → show **Mid-market calendar**
4. Rule 3: If `Company size < 50` → redirect to self-serve signup page
5. Fallback: show **SDR calendar** (catches unanswered cases)

### Form Analytics

Each form tracks:

| Metric | What It Shows |
|--------|---------------|
| **Views** | How many prospects opened the form |
| **Completions** | How many submitted |
| **Completion rate** | Completions ÷ Views |
| **Rule breakdown** | How many prospects hit each routing rule |
| **Meeting rate** | Of those offered a calendar, how many booked |
| **Disqualified** | Count of prospects blocked or redirected |

Use analytics to tune qualification thresholds — if too many prospects get disqualified, loosen rules; if too many unqualified leads reach AEs, tighten them.

### Embedding on Your Site

Embed a form on your site to replace a generic contact form:

1. Open the form in the editor
2. Click **Embed**
3. Choose **Inline** (replaces a `<div>` on the page) or **Popup** (opens on button click)
4. Paste the script tag into your site

> **Tip:**
> Connect a routing form to a web chat button instead of a contact form. Chat-to-form conversion is 2–3x higher than static contact forms because prospects qualify in-context.

## Out-of-Office and Buffer Rules

Control when meetings can and can't be booked, even after a prospect qualifies.

| Rule | Behavior |
|------|----------|
| **Business hours** | Only offer slots during the rep's configured hours |
| **Minimum notice** | Require N hours of lead time before a meeting can be booked |
| **Maximum lookahead** | Don't offer slots more than N days in the future |
| **Buffer time** | Add N minutes before/after meetings (travel, prep, debrief) |
| **Booking limits** | Cap bookings (or total booked time) per day, week, month or year — for the whole event, or for **each host** on a round-robin or collective event |
| **Your own limit** | On a team event, each host can set a stricter limit for themselves; admins can give one person a custom limit or no limit |
| **Out-of-office** | Block dates from the calendar (manual or auto-synced from Google/Outlook) |

Configure hours and out-of-office in **Engage → Appointments → Availability**, and booking limits on each event type's **Limits** tab. On a team event, a limit that applies to **each host** only takes that person out of the rotation when they're full — the others keep getting booked. A **whole event** limit is one total shared by everyone. Only workspace admins can change a team event's limits, and, while a limit applies to each host, which hosts are fixed (a fixed host joins every booking, so their limit would apply to everyone).

## Booking Confirmation Emails

When a prospect books, graph8 sends a confirmation email via SES to the prospect (and CCs the host) with:

- Meeting title, time, and timezone-localized details
- Conferencing link (Google Meet / Zoom / Teams / custom)
- A `.ics` calendar invite as an attachment so the prospect can add the meeting to any calendar app
- Reschedule and cancel links signed with secure tokens (no login required for the prospect)

Reschedule and cancel emails are sent automatically when the matching booking event fires.

## Conferencing Providers

graph8 auto-generates conferencing links based on the host's connected provider:

| Provider | Link Type | Notes |
|----------|-----------|-------|
| **Google Meet** | `meet.google.com/…` | Requires Google Calendar connected |
| **Zoom** | `zoom.us/j/…` | Requires Zoom OAuth connection |
| **Microsoft Teams** | `teams.microsoft.com/…` | Requires Microsoft 365 connected |
| **Custom** | Any URL | Use for WebEx, Whereby, in-person meetings |

The conferencing link is included in the calendar event and synced to CRM.

## Next Steps

- [Connections →](https://docs.graph8.com/engage/connections/) — Set up your CRM integration
- [Meetings →](https://docs.graph8.com/engage/meetings/) — Review meetings and transcript context in the Inbox
- [Web Chat →](https://docs.graph8.com/engage/web-chat/) — Let visitors book meetings from chat
- [Sequencer →](https://docs.graph8.com/engage/sequencer/) — Link sequences to appointment outcomes
- [Forms (inbound tracking) →](https://docs.graph8.com/signals/forms/) — Different feature: track form submissions on your existing website
