All workflows

Brief the rep the moment a meeting is booked

When a prospect books a meeting, look them up, log them in the CRM and hand the rep a one-screen brief before the call.

View on GitHub

meeting-booked-handoff.md

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.

{ "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)

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.

{ "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.

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.

{ "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.

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

Call the MCP tool slack_send_message.

CLI (official)

Install the command, then confirm it runs.

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.