Webhook tool

HubSpot AI voice agents that qualify leads straight into the CRM

The agent answers or calls leads, asks your qualifying questions, and creates the HubSpot contact through HubSpot's CRM API.

Lead qualification agent

Qualifies inbound leads and creates the HubSpot contact.

Instructions

Search for the caller. Ask the qualifying questions one at a time. If there is no contact, create one with their first name and company. If the caller is qualified and asks for a person, transfer to sales.

Handoff
Sales rep

Connected tools

  • Search contactWebhook
  • Create contactWebhook
  • Transfer to salesTransfer

What a HubSpot AI voice agent can do

Open one to watch a call. The grey lines are the tools the agent calls mid-sentence.

A search by phone number tells the agent whether the caller is already a HubSpot contact before it asks a single question.

Tool definitions

Webhook tools go to POST /v1/agents/tools. Transfers are a system tool on the agent. Replace the placeholder values in capitals with your own.

Webhook

Search contact

Finds a contact by phone number.

Show the JSON definition
search_contact
{
  "type": "webhook",
  "name": "search_contact",
  "description": "Finds a HubSpot contact by phone number.",
  "pre_tool_speech": "auto",
  "execution_mode": "immediate",
  "response_timeout_secs": 20,
  "api_schema": {
    "url": "https://api.hubapi.com/crm/v3/objects/contacts/search",
    "method": "POST",
    "request_body_schema": {
      "type": "object",
      "properties": {
        "query": {
          "type": "string",
          "description": "The caller's phone number without the country code. HubSpot matches the area code and local number."
        }
      },
      "required": [
        "query"
      ]
    },
    "authentication": {
      "mode": "bearer",
      "token": {
        "type": "secret",
        "secret_value": "YOUR_SERVICE_KEY"
      }
    }
  }
}

Webhook

Create contact

Creates a contact with name, phone and company.

Show the JSON definition
create_contact
{
  "type": "webhook",
  "name": "create_contact",
  "description": "Creates a contact for a new caller with their first name, phone and company.",
  "pre_tool_speech": "auto",
  "execution_mode": "immediate",
  "response_timeout_secs": 20,
  "api_schema": {
    "url": "https://api.hubapi.com/crm/v3/objects/contacts",
    "method": "POST",
    "request_body_schema": {
      "type": "object",
      "properties": {
        "properties": {
          "type": "object",
          "properties": {
            "firstname": {
              "type": "string",
              "description": "First name."
            },
            "phone": {
              "type": "string",
              "dynamic_variable": "system__caller_id"
            },
            "company": {
              "type": "string",
              "description": "Company name."
            }
          },
          "required": [
            "firstname"
          ]
        }
      },
      "required": []
    },
    "authentication": {
      "mode": "bearer",
      "token": {
        "type": "secret",
        "secret_value": "YOUR_SERVICE_KEY"
      }
    }
  }
}

Transfer

Transfer to sales

Cold transfer to a sales rep.

Show the JSON definition
transfer_to_sales
{
  "config": {
    "system_tools": {
      "transfer_to_number": {
        "description": null,
        "pre_tool_speech": "auto",
        "transfers": [
          {
            "destination": {
              "type": "phone",
              "phone_number": "+14155550107"
            },
            "condition": "The caller is qualified and asks to speak with someone, or asks for pricing."
          }
        ]
      }
    }
  }
}

Set it up

No native connector. The tools call HubSpot's public CRM API directly with a service key you store as a secret. Vendor details read in October 2026.

  1. Create a service key

    In HubSpot, go to Development, then Keys, then Service keys. Create a key with the crm.objects.contacts.read and crm.objects.contacts.write scopes, and copy it.

  2. Add the webhook tools

    Add the tools on this page with the service key as a bearer secret. To store qualification answers, create custom contact properties and add them to create_contact.

  3. Write the instructions

    List the questions in order, and say when to stop asking.

  4. Test on a sandbox contact

    Call the agent and check the contact in HubSpot.

Before you build

Why a service key

HubSpot's docs say service keys don't cover webhooks or UI extensions. These tools only call the CRM API with the key as a Bearer token, which a service key covers.

Check property names

Standard properties such as firstname work as shown. Custom properties need their internal names.

Enterprise-grade security

  • HIPAA compliant badge

    HIPAA compliant

  • SOC 2 Type 2 badge

    SOC 2 Type 2

  • GDPR badge

    GDPR

HubSpot AI voice agent FAQs

Can HubSpot make phone calls with AI?

Yes, through a Cartesia agent. It answers your calls or places outbound calls to leads, runs your own qualifying script, and calls HubSpot's CRM API with a service key to create the contact.

How is this different from HubSpot's Customer Agent?

Customer Agent is built for support conversations. The agent on this page is set up for sales. It searches contacts by phone number, asks your qualifying questions in order, creates the contact, and transfers qualified callers to the rep on duty. You choose the voice and the LLM.

Can the agent write custom HubSpot contact properties?

Yes. Create the custom properties in HubSpot first, then use their internal names in the create_contact tool. Standard properties such as firstname, phone and company work as shown on this page.

Can the agent log a call on the HubSpot contact timeline?

Yes, with another webhook tool that calls HubSpot's CRM API, or by sending Cartesia's post-call webhook to your own endpoint and writing the transcript there.

Who pays for the phone minutes on a HubSpot voice agent?

Cartesia bills the agent at $0.03/min, plus LLM usage and telephony. Phone minutes depend on the number. Cartesia-provisioned numbers are US only and carry Cartesia's telephony fee. Numbers from your Twilio account or a SIP trunk pay your carrier's rates instead. The transfer to sales also needs a Twilio or SIP-trunked number.

Get started today

Talk to an expert.

Connect with a member of our team and learn how Cartesia can help you build world-class voice experiences.

Contact Sales

Start building.

Access our models via API and bring a voice agent into production in minutes.

Try Cartesia