HubSpot
Connect HubSpot once and every conversation your assistant has — voice call, chat, SMS, webhook — quietly turns into a contact and a ticket in your CRM. Callers leave their email, the assistant looks them up, creates them if they're new, and logs the call as a HubSpot ticket your team can pick up tomorrow morning. The "auto-log every call into HubSpot" pattern is the most common first integration customers turn on, because the value lands on day one.
What you can do with this tool
- Find a contact by email to personalize the conversation ("Hi Alice, I see you booked with us last month").
- Create a contact when a new caller leaves their details.
- Open a support ticket with the conversation summary so the right team picks it up.
That's the surface today. Updating contact properties, adding notes, creating deals, and pulling deal data aren't part of this built-in — for those, layer a Custom tool on HubSpot's REST API.
Business use cases
Inbound lead capture for a real estate brokerage
A buyer calls about a listing. The assistant qualifies them (price range, timeline, location), captures name and email, and calls get_contact_by_email. If they're new, it calls create_contact so the agent's HubSpot pipeline now has them in the "New Inquiry" stage. At the end of the call the assistant calls create_ticket with the property they asked about and a one-paragraph summary of their preferences. The next morning, the agent opens HubSpot and sees a new contact and a ticket titled "MLS-4421 — interested buyer, $700–900K, 30-day timeline." No data entry, no missed leads.
After-hours support triage for a SaaS product
A customer hits the chat widget at 10pm with a billing question. The assistant identifies them by email via get_contact_by_email, can't fully resolve the question, and calls create_ticket with the conversation transcript in the body. By 9am the support team has the ticket, the customer's history, and enough context to respond in one reply instead of a back-and-forth.
Contact enrichment for a dental practice
New patient calls to book. The voice assistant captures full name, email, phone, and a quick health-history blurb before scheduling. create_contact pushes the basics into HubSpot; the booking is logged via create_ticket so front-desk staff can review the intake before the visit. When the patient arrives the next week, their contact card is already there — no clipboard, no double entry.
Multi-portal agency setup
An agency manages CRM portals for five clients. They connect HubSpot five times — one per client — and name each connection after the business ("HubSpot - Acme Dental", "HubSpot - Smith Plumbing"). Each client's assistant is wired to the matching portal. Leads from each business flow into the right HubSpot account automatically.
Connecting HubSpot
Step-by-step
- Go to Tools & Integrations → HubSpot → Connect HubSpot.
- Sign into HubSpot if you aren't already, and pick the portal you want to connect.
- Approve the scopes below.
- You'll land back on Insighto with the tool marked Connected.
Scopes requested
Paste these into your notes if your HubSpot admin asks what Insighto is requesting:
crm.objects.contacts.read
crm.objects.contacts.write
tickets
oauth
Insighto only asks for what it actually uses — read and write on contacts, and tickets.
Prerequisites
- A HubSpot account on a tier that includes API access to Contacts and Tickets.
- Admin permission on the portal to approve the OAuth consent screen.
Functions the assistant can call
These are the function names you'll reference in your assistant's system prompt.
get_contact_by_email
Looks up a contact by email address.
- Arguments
email(string, required) — the email to search for.
- Returns —
{ "id": "<contact_id>", "status": true }on a match, or{ "status": false, "message": "Unable to find the contact." }if there's no contact with that email.
create_contact
Creates a new contact in HubSpot.
- Arguments
email(string, required) — primary identifier.firstname(string, optional)lastname(string, optional)phone(string, optional)- Any other HubSpot contact property name —
company,lifecyclestage, etc. — passes through as-is.
- Returns —
{ "message": "Contact created.", "object": { "id": "...", "properties": { ... } } }.
create_ticket
Opens a support ticket. If a matching contact doesn't already exist, one is created from the email first, then the ticket is associated to it.
- Arguments
email(string, required) — the customer's email.subject(string, required) — one-line ticket title.content(string, required) — body of the ticket, usually a conversation summary.
- Returns —
"Ticket created. Ticket ID: <id>"on success.
Tickets are created in your default support pipeline at its first stage. If you've heavily customized the pipeline structure, see the failure modes below.
Example invocation
The assistant decides to log a support ticket at the end of a call:
{
"function": "create_ticket",
"arguments": {
"email": "alice@example.com",
"subject": "Refund request — order #4421",
"content": "Alice called about a damaged item from order #4421. She wants a callback within 24 hours at +1-555-123-4567. Order shipped May 10, arrived May 12 with visible damage."
}
}
Result returned to the assistant:
"Ticket created. Ticket ID: 8842"
The assistant then tells the caller "I've logged a ticket for our support team — someone will follow up within 24 hours."
System prompt guidance
Be explicit. The model invokes HubSpot reliably when the prompt names the function and the trigger:
You have access to a HubSpot tool. When a caller gives you their email, first call
get_contact_by_emailto check if they exist. If they don't, gather their name and phone, then callcreate_contact(email is required). At the end of every call, callcreate_ticketwith a one-paragraph summary incontentand a short title insubject.
Verbose on purpose. The model needs the trigger ("when a caller gives you their email") and the wrap-up step ("at the end of every call") spelled out, or it'll forget to log half the time.
Multiple HubSpot portals
Agencies often manage many HubSpot portals. Connect HubSpot once per portal, name each connection after the business it belongs to, and attach the right one to each client's assistant. Function names are kept distinct internally, so the model can tell them apart when more than one is attached to the same assistant.
Failure modes
- Token revoked from HubSpot's side — every function call starts returning auth errors. Reconnect from the tool's page.
- Email missing on
create_contact— the assistant gets back"Error, email is mandatory". The model will usually re-ask the caller. - Custom ticket pipeline —
create_ticketwrites into your default pipeline at its first stage. If you've replaced the default pipeline or reordered stages, tickets may land in an unexpected place. Either keep the default pipeline structure or wrap ticket creation in a Custom tool that targets the exact pipeline and stage you want. - API rate limits — HubSpot rate-limits aggressively on lower tiers. Spread calls out across the conversation rather than firing several in a single turn.
Where to next
- Pair with Google Calendar for full lead-to-booking flows.
- Need deals, notes, or property updates? Build a Custom tool against HubSpot's REST API.
- See the Tools overview for prompt patterns that apply across every integration.