---
title: "Connect apps (Google, Slack, HubSpot & more)"
description: "Give your agents real abilities in a few clicks and no code — check calendars, update your CRM, post to Slack — through prebuilt connections to the apps you use."
---

App connections let a voice agent act inside the tools your team already
uses, mid-conversation: check availability on a calendar, look up a caller
in your CRM, append a lead to a spreadsheet, post a summary to Slack. You
connect an account once under **Connections → Apps**
(`/dashboard/app-connections`), choose what the agent is allowed to do, and
attach the connection to any agent in its builder.

Six applications are available today:

| Application | What your agent can do with it |
| --- | --- |
| **Google Calendar** | View availability and manage calendar events. |
| **Google Sheets** | Append lead details and call outcomes to a sheet. |
| **Slack** | Find channels, search messages, and post with permission. |
| **HubSpot** | Find contacts, update records, and add notes. |
| **Salesforce** | Search records, update leads, and log activity. |
| **Cal.com** | Check availability and manage bookings. |

For anything not on this list, build a custom
[API connection](/guides/api-connections) or add an
[MCP server](/guides/mcp-servers).

## Connect an account

<Steps>
  <Step title="Open Connections → Apps and click Add application">
    A picker shows the six applications. You can connect multiple accounts
    of the same app — each shows a "connected" count once you have one.
  </Step>
  <Step title="Authorize the account">
    Most apps use OAuth: a popup opens, you sign in to the provider and
    approve access, and the connection appears on the page. **Cal.com is
    the exception** — it connects with an API key instead. Paste the key
    and click **Validate and connect**; the key is checked against Cal.com
    before it is encrypted and saved.
  </Step>
  <Step title="Google Sheets only: pick the spreadsheet">
    A Sheets connection needs to know which spreadsheet and tab to write
    to. Right after connecting, a configuration panel opens — paste the
    spreadsheet's URL (or its ID), click **Inspect spreadsheet**, and
    choose the tab. The panel confirms the columns it found. Until this is
    done the connection tile shows **Needs configuration**.
  </Step>
</Steps>

Connecting and managing app connections requires an **admin** or **owner**
role in the organization.

## Control what the agent may do

Every connection has per-operation permission toggles — open a connection
tile to manage them. Read-style operations start enabled; operations that
write to or change your data start **off** until you enable them:

| Application | Enabled by default | Off by default |
| --- | --- | --- |
| Google Calendar | View events & availability, Create events | Update events, Cancel events |
| Google Sheets | Add rows | — |
| Slack | View channels & recent messages, Search messages | Post messages |
| HubSpot | Search & read contacts and companies | Create or update contacts and add notes |
| Salesforce | Search & read leads, contacts, and opportunities | Create or update records and log activity |
| Cal.com | List event types & check availability, Create bookings | Reschedule or cancel bookings |

An operation you disable is simply not available to the agent — the
corresponding tools are never offered to it on calls.

Google Calendar connections also carry an **Email invitations to guests**
switch, on by default. When the agent collects the caller's email address
and passes it as a guest on the event, Google emails them the invitation,
and any later update or cancellation the agent makes. Turn it off to keep
guests on the event without email. The invitation includes the event
description, so have the agent keep internal notes out of it and read the
address back to the caller before booking.

## The tools your agent gets

Once a connection is attached to an agent, the enabled operations surface
as callable tools during conversations:

- **Google Calendar** — `calendar_list_events`, `calendar_check_availability`,
  `calendar_create_event`, `calendar_update_event`, `calendar_cancel_event`
- **Google Sheets** — `sheets_append_row` (writes to the spreadsheet and tab
  you configured)
- **Slack** — `slack_list_channels`, `slack_search_messages`,
  `slack_post_message`
- **HubSpot** — `hubspot_search_contacts`, `hubspot_get_contact`,
  `hubspot_upsert_contact`, `hubspot_add_note`
- **Salesforce** — `salesforce_search_records`, `salesforce_get_record`,
  `salesforce_upsert_lead`, `salesforce_log_activity`
- **Cal.com** — `calcom_list_event_types`, `calcom_check_availability`,
  `calcom_create_booking`, `calcom_cancel_booking`

You don't write schemas for any of these — ThunderPhone defines the tools
and routes the calls through the connected account.

## Attach the connection to an agent

Connections do nothing until an agent uses them. Open the agent in the
builder ([Build an agent](/guides/build-an-agent)) and add the connection
in its **Connected apps** section. A connection's tile on the Apps page
shows how many operations are enabled and how many agents use it.

## Disconnect

Open a connection tile and disconnect it from there. Agents that were
using it lose those tools on their next call.

## Next steps

<CardGroup cols={2}>
  <Card title="Turn any API into an agent action" icon="plug" href="/guides/api-connections">
    The paste-a-cURL wizard for services without a native connection.
  </Card>
  <Card title="Add an MCP server" icon="server" href="/guides/mcp-servers">
    Bring your own tool server over Streamable HTTP.
  </Card>
</CardGroup>
