---
ref: workflow:meeting-booked-handoff
title: Brief the rep the moment a meeting is booked
author: thedogwiththedataonit
tools: [tool:calendly/list-scheduled-events, tool:calendly/list-event-invitees, tool:apollo/enrich-person, tool:apollo/enrich-company, tool:hubspot/upsert-contacts, tool:hubspot/create-note, tool:slack/post-message]
tags: [capability:book-meetings, capability:enrich-companies, capability:enrich-contacts, capability:manage-crm, capability:route-alerts, channel:chat, has:api, motion:inbound]
updated: 2026-09-27
---

# Brief the rep the moment a meeting is booked

Set up the tools below, then run the steps in order for the user, carrying each step's results into the next.

## Inputs

Ask the user for these before you start.

- `since`: when the last run happened, so only new bookings count, e.g. 24 hours ago
- `event_types`: the Calendly event types that are sales meetings, e.g. Intro call, Demo
- `sales_channel`: the Slack channel for briefs, e.g. #booked-meetings

## Set up

### Calendly (tool:calendly/list-scheduled-events, tool:calendly/list-event-invitees)

Use the first option your agent supports.

Notes:

- List scheduled events: Needs a `user` or `organization` URI (the current-user call returns yours); organization-wide results need admin or owner rights. Pages hold 20 events by default: follow `page_token` for more.
- List event invitees: Takes the scheduled event's `uuid`, the last part of its URI. Results come 20 per page.

#### MCP (official, remote)

Add this server to your agent's MCP settings, then sign in when asked.

```json
{ "mcpServers": { "calendly": { "url": "https://mcp.calendly.com" } } }
```

- List scheduled events: call the MCP tool `meetings-list_events`
- List event invitees: call the MCP tool `meetings-list_event_invitees`

#### API (official)

- Base URL: https://api.calendly.com
- List scheduled events: `GET /scheduled_events`
- List event invitees: `GET /scheduled_events/{uuid}/invitees`
- Auth: send the header `Authorization: Bearer $CALENDLY_API_KEY`
- Get a key: https://calendly.com/integrations/api_webhooks

### Apollo (tool:apollo/enrich-person, tool:apollo/enrich-company)

Use the first option your agent supports.

Notes:

- Enrich a person: A match costs 1 credit, plus 8 for a mobile phone; no match costs nothing. Personal emails and phone numbers are off unless you set `reveal_personal_emails` or `reveal_phone_number`, and phone numbers arrive later at a `webhook_url`.
- Enrich a company: Costs 1 credit per company. To enrich up to 10 companies in one call, use bulk organization enrichment instead.

#### MCP (official, remote)

Add this server to your agent's MCP settings, then sign in when asked.

```json
{ "mcpServers": { "apollo": { "url": "https://mcp.apollo.io/mcp" } } }
```

- Enrich a person: call the MCP tool `apollo_people_match`
- Enrich a company: call the MCP tool `apollo_organizations_enrich`

#### CLI (official)

Install the command and sign in with it, then confirm it runs.

```sh
brew install apolloio/apollo-io-cli/apollo-io-cli
apollo --version
```

- Enrich a person: run `apollo people enrich`
- Enrich a company: run `apollo companies enrich`

### HubSpot (tool:hubspot/upsert-contacts, tool:hubspot/create-note)

For each call, use the first option your agent supports that lists it.

Notes:

- Create or update contacts: Matches each contact on `idProperty`, `email` or a custom unique property. On MCP, `manage_crm_objects` waits for the user to confirm the proposed changes before it writes.
- Create a note: `hs_timestamp` is required; attach the note to existing records with an `associations` object.

#### MCP (official, remote)

Add this server to your agent's MCP settings, then sign in when asked.

```json
{ "mcpServers": { "hubspot": { "url": "https://mcp.hubspot.com" } } }
```

- Create or update contacts: call the MCP tool `manage_crm_objects`

#### API (official)

- Base URL: https://api.hubapi.com
- Create or update contacts: `POST /crm/objects/2026-09/contacts/batch/upsert`
- Create a note: `POST /crm/objects/2026-09/notes`
- Auth: send the header `Authorization: Bearer $HUBSPOT_API_KEY`

Note: Use a service key or an app's static access token with the CRM scopes the calls need; paths carry a dated version such as `2026-09`.

### Post a message (Slack, tool:slack/post-message)

Use the first option your agent supports.

Note: Needs the `chat:write` scope. Over MCP it posts as the signed-in user; the API and CLI post as the app's bot.

#### MCP (official, remote)

Add this server to your agent's MCP settings, then sign in when asked.

```json
{ "mcpServers": { "slack": { "url": "https://mcp.slack.com/mcp" } } }
```

Call the MCP tool `slack_send_message`.

#### CLI (official)

Install the command, then confirm it runs.

```sh
curl -fsSL https://downloads.slack-edge.com/slack-cli/install.sh | bash
slack --version
```

Run `slack api chat.postMessage`.

Set `$SLACK_BOT_TOKEN` in your environment first (get a key: https://api.slack.com/apps).

Before step 1, confirm access to each service with its cheapest read-only call, like a list or a search. Never send or change anything to test access.

## Steps

1. **List new bookings** with List scheduled events (Calendly). List your active events that start in the future. Keep the ones of `event_types` created after `since`, with each event's `uuid`, name, start time and host.
2. **Get the invitees** with List event invitees (Calendly). For each event `uuid`, keep each invitee's name, email and booking-question answers.
3. **Look them up** with Enrich a person (Apollo). Match each invitee on their email. Keep title, seniority, employer and employer website; mark anyone with no match as not enriched and carry on.
4. **Size the company** with Enrich a company (Apollo). For each employer website, keep employee count, industry and latest funding round.
5. **Log the contact** with Create or update contacts (HubSpot). Create or update each invitee, matched on email, with their name, title and company. Keep each contact's HubSpot ID.
6. **Attach the brief** with Create a note (HubSpot). Add a note to each contact ID with the meeting time, their answers and the company facts.
7. **Brief the rep** with Post a message (Slack). Post one brief per meeting to `sales_channel`: who, their role, the company in one line, their answers and the start time.

## Done when

- Every meeting booked since `since` has a contact, a note and a Slack brief.
- The user has the list of meetings, with anyone Apollo could not match.

## Rules

- Use only the services set up above. The read-only calls they need, like listing ids or polling for results, are fine.
- Ask the user before anything that sends messages, costs money, or changes data, and say how many records it touches. One approval covers a batch the user has seen.
- Never print API keys.
