HubSpot Integration
Connect your AI agents to HubSpot CRM
Step 1: Connect HubSpot
Recommended: Use the one-click OAuth connection. It automatically handles authentication, token refresh, and grants access to all HubSpot API scopes your account supports.
- Go to Settings → Integrations
- Click Connect Platform → HubSpot
- Approve the connection in HubSpot and select the account to connect
- Done! Your access token refreshes automatically every 30 minutes
| Detail | Value |
|---|---|
| Base URL | https://api.hubapi.com (set automatically) |
| Auth Type | OAuth 2.0 (automatic) |
| Token Refresh | Every 30 minutes (automatic) |
| Scopes | All available CRM, CMS, and settings scopes |
Step 2: Add Actions with Pre-Built Templates
Once connected, click Add Action to open the template picker. Choose from 42 pre-built actions across 11 HubSpot CRM categories, so there is no need to configure endpoints, parameters, or body templates manually.
New: Pre-built templates configure everything for you in one click. Just select a template, review the settings, and save. You can always customize the action after adding it.
Available Templates
Contacts
Deals
Companies
Tickets
Notes
Calls
Tasks
Meetings
Owners & Pipelines
Associations
Direct Lookups
Tip: You can add the same template multiple times (e.g. two “Search Contact” actions with different configurations). Each gets a unique name automatically.
What Each Action Does
Search
List all records or filter by a search term. The AI can call this with or without a search query.
| Behavior | Description |
|---|---|
| No search term | Returns all records (up to 10) |
| With search term | Filters by name, email, phone, or other fields |
| Confirmation | Not required (read-only) |
Example: customer says “show me all contacts”:
GET /crm/v3/objects/contacts?properties=firstname,lastname,email,phone&limit=10
Response:
{
"results": [
{
"id": "12345",
"properties": {
"firstname": "Sarah",
"lastname": "Johnson",
"email": "[email protected]",
"phone": "+15551234567"
}
},
...
]
}Example: customer says “find Peter Bakker”:
GET /crm/v3/objects/contacts?properties=firstname,lastname,email,phone&limit=10&search=Peter BakkerCreate
Create a new record. The AI collects the required fields from the customer and confirms before creating.
| Behavior | Description |
|---|---|
| Required fields | Varies by object (e.g. email + first name for contacts) |
| Optional fields | Automatically excluded if not provided |
| Confirmation | Required (AI confirms details before creating) |
Example: creating a contact:
POST /crm/v3/objects/contacts
{
"properties": {
"email": "[email protected]",
"firstname": "Peter",
"lastname": "Bakker",
"phone": "0687654321"
}
}Smart cleanup: Optional fields that the customer doesn't provide are automatically removed from the request. For example, if the customer only gives a name and email, the phone and company fields won't be sent to HubSpot.
Update
Update specific fields on an existing record. The AI uses the record ID from a previous search and only sends the fields that need to change.
| Behavior | Description |
|---|---|
| Record ID | From a previous search result (e.g. contact_id) |
| Partial updates | Only changed fields are sent and other fields stay untouched |
| Confirmation | Required (AI confirms the change before updating) |
Example: updating only the email:
PATCH /crm/v3/objects/contacts/692916567278
{
"properties": {
"email": "[email protected]"
}
}Safe updates: When updating a single field (like email), the other fields (name, phone, etc.) are not affected. The AI only sends what was changed.
Delete
Archive a record from HubSpot. The record can be restored within 90 days from HubSpot's recycle bin.
| Behavior | Description |
|---|---|
| Record ID | From a previous search result |
| Confirmation | Required (AI always confirms before deleting) |
| Destructive | Yes (marked as destructive action) |
Safety: Delete actions are marked as destructive. The AI will always ask the customer for explicit confirmation before deleting. Consider adding Identity Verification to prevent unauthorized deletions.
Notes
Create, retrieve, search, and delete engagement notes attached to CRM records.
Search Notes
List all notes or filter by a search term. Returns note content and metadata.
| Setting | Value |
|---|---|
| Method | GET |
| Endpoint | /crm/v3/objects/notes?properties=hs_note_body,hs_timestamp,hubspot_owner_id&limit=10 |
| Confirmation | Not required (read-only) |
| Parameter | Location | Required | Description |
|---|---|---|---|
| search | query | No | Optional search term to filter notes |
Create Note
Create a new note in HubSpot. The AI collects the note body from the customer and confirms before creating.
| Setting | Value |
|---|---|
| Method | POST |
| Endpoint | /crm/v3/objects/notes |
| Confirmation | Required |
| Parameter | Location | Required | Description |
|---|---|---|---|
| hs_note_body | body | Yes | The note content |
| hs_timestamp | body | Yes | Timestamp for the note (ISO 8601) |
| hubspot_owner_id | body | No | Owner ID to assign the note to |
Get Note
Retrieve a single note by its ID. Returns the full note body and metadata.
| Setting | Value |
|---|---|
| Method | GET |
| Endpoint | /crm/v3/objects/notes/{{note_id}}?properties=hs_note_body,hs_timestamp,hubspot_owner_id |
| Confirmation | Not required (read-only) |
| Parameter | Location | Required | Description |
|---|---|---|---|
| note_id | path | Yes | HubSpot note ID |
Delete Note
Archive a note from HubSpot. The AI always confirms before deleting.
| Setting | Value |
|---|---|
| Method | DELETE |
| Endpoint | /crm/v3/objects/notes/{{note_id}} |
| Confirmation | Required |
| Destructive | Yes |
| Parameter | Location | Required | Description |
|---|---|---|---|
| note_id | path | Yes | HubSpot note ID to delete |
Calls
Log, retrieve, search, and delete call engagement records in HubSpot.
Search Calls
List all call records or filter by a search term. Returns call details including duration and disposition.
| Setting | Value |
|---|---|
| Method | GET |
| Endpoint | /crm/v3/objects/calls?properties=hs_call_title,hs_call_body,hs_call_duration,hs_call_disposition,hs_timestamp&limit=10 |
| Confirmation | Not required (read-only) |
| Parameter | Location | Required | Description |
|---|---|---|---|
| search | query | No | Optional search term to filter calls |
Log Call
Log a new call engagement in HubSpot. The AI collects call details from the customer and confirms before creating.
| Setting | Value |
|---|---|
| Method | POST |
| Endpoint | /crm/v3/objects/calls |
| Confirmation | Required |
| Parameter | Location | Required | Description |
|---|---|---|---|
| hs_call_title | body | Yes | Title of the call |
| hs_call_body | body | No | Call notes or description |
| hs_call_duration | body | No | Duration in milliseconds |
| hs_call_disposition | body | No | Call outcome (e.g. connected, no answer) |
| hs_timestamp | body | Yes | Timestamp for the call (ISO 8601) |
Get Call
Retrieve a single call record by its ID. Returns the full call details.
| Setting | Value |
|---|---|
| Method | GET |
| Endpoint | /crm/v3/objects/calls/{{call_record_id}}?properties=hs_call_title,hs_call_body,hs_call_duration,hs_call_disposition,hs_timestamp |
| Confirmation | Not required (read-only) |
| Parameter | Location | Required | Description |
|---|---|---|---|
| call_record_id | path | Yes | HubSpot call record ID |
Delete Call
Archive a call record from HubSpot. The AI always confirms before deleting.
| Setting | Value |
|---|---|
| Method | DELETE |
| Endpoint | /crm/v3/objects/calls/{{call_record_id}} |
| Confirmation | Required |
| Destructive | Yes |
| Parameter | Location | Required | Description |
|---|---|---|---|
| call_record_id | path | Yes | HubSpot call record ID to delete |
Tasks
Create, retrieve, search, and delete tasks in HubSpot CRM.
Search Tasks
List all tasks or filter by a search term. Returns task subject, status, and due date.
| Setting | Value |
|---|---|
| Method | GET |
| Endpoint | /crm/v3/objects/tasks?properties=hs_task_subject,hs_task_body,hs_task_status,hs_task_priority,hs_timestamp&limit=10 |
| Confirmation | Not required (read-only) |
| Parameter | Location | Required | Description |
|---|---|---|---|
| search | query | No | Optional search term to filter tasks |
Create Task
Create a new task in HubSpot. The AI collects the task subject and details from the customer and confirms before creating.
| Setting | Value |
|---|---|
| Method | POST |
| Endpoint | /crm/v3/objects/tasks |
| Confirmation | Required |
| Parameter | Location | Required | Description |
|---|---|---|---|
| hs_task_subject | body | Yes | Task subject line |
| hs_task_body | body | No | Task description or notes |
| hs_task_status | body | No | Status (e.g. NOT_STARTED, IN_PROGRESS, COMPLETED) |
| hs_task_priority | body | No | Priority (e.g. LOW, MEDIUM, HIGH) |
| hs_timestamp | body | Yes | Due date timestamp (ISO 8601) |
| hubspot_owner_id | body | No | Owner ID to assign the task to |
Get Task
Retrieve a single task by its ID. Returns the full task details including status and priority.
| Setting | Value |
|---|---|
| Method | GET |
| Endpoint | /crm/v3/objects/tasks/{{task_id}}?properties=hs_task_subject,hs_task_body,hs_task_status,hs_task_priority,hs_timestamp |
| Confirmation | Not required (read-only) |
| Parameter | Location | Required | Description |
|---|---|---|---|
| task_id | path | Yes | HubSpot task ID |
Delete Task
Archive a task from HubSpot. The AI always confirms before deleting.
| Setting | Value |
|---|---|
| Method | DELETE |
| Endpoint | /crm/v3/objects/tasks/{{task_id}} |
| Confirmation | Required |
| Destructive | Yes |
| Parameter | Location | Required | Description |
|---|---|---|---|
| task_id | path | Yes | HubSpot task ID to delete |
Meetings
Create, retrieve, search, and delete meeting engagement records in HubSpot.
Search Meetings
List all meeting records or filter by a search term. Returns meeting title, start time, and end time.
| Setting | Value |
|---|---|
| Method | GET |
| Endpoint | /crm/v3/objects/meetings?properties=hs_meeting_title,hs_meeting_body,hs_meeting_start_time,hs_meeting_end_time,hubspot_owner_id&limit=10 |
| Confirmation | Not required (read-only) |
| Parameter | Location | Required | Description |
|---|---|---|---|
| search | query | No | Optional search term to filter meetings |
Create Meeting
Create a new meeting engagement in HubSpot. The AI collects the meeting title, time, and details from the customer and confirms before creating.
| Setting | Value |
|---|---|
| Method | POST |
| Endpoint | /crm/v3/objects/meetings |
| Confirmation | Required |
| Parameter | Location | Required | Description |
|---|---|---|---|
| hs_meeting_title | body | Yes | Meeting title |
| hs_meeting_body | body | No | Meeting description or agenda |
| hs_meeting_start_time | body | Yes | Start time (ISO 8601) |
| hs_meeting_end_time | body | Yes | End time (ISO 8601) |
| hubspot_owner_id | body | No | Owner ID to assign the meeting to |
Get Meeting
Retrieve a single meeting by its ID. Returns the full meeting details.
| Setting | Value |
|---|---|
| Method | GET |
| Endpoint | /crm/v3/objects/meetings/{{meeting_id}}?properties=hs_meeting_title,hs_meeting_body,hs_meeting_start_time,hs_meeting_end_time |
| Confirmation | Not required (read-only) |
| Parameter | Location | Required | Description |
|---|---|---|---|
| meeting_id | path | Yes | HubSpot meeting ID |
Delete Meeting
Archive a meeting record from HubSpot. The AI always confirms before deleting.
| Setting | Value |
|---|---|
| Method | DELETE |
| Endpoint | /crm/v3/objects/meetings/{{meeting_id}} |
| Confirmation | Required |
| Destructive | Yes |
| Parameter | Location | Required | Description |
|---|---|---|---|
| meeting_id | path | Yes | HubSpot meeting ID to delete |
Owners & Pipelines
Read-only actions to list team members and pipeline configurations. Useful for assigning records and understanding deal or ticket stages.
List Owners
List all owners (team members) in HubSpot. Useful for assigning contacts, deals, or tasks to specific team members.
| Setting | Value |
|---|---|
| Method | GET |
| Endpoint | /crm/v3/owners?limit=100 |
| Confirmation | Not required (read-only) |
No parameters needed. Returns all owners with their ID, email, first name, and last name.
List Pipelines
List all deal pipelines in HubSpot. Returns pipeline names and IDs.
| Setting | Value |
|---|---|
| Method | GET |
| Endpoint | /crm/v3/pipelines/deals |
| Confirmation | Not required (read-only) |
No parameters needed. Returns all deal pipelines with their stages.
List Pipeline Stages
List all stages within a specific deal pipeline. Returns stage names, IDs, and display order.
| Setting | Value |
|---|---|
| Method | GET |
| Endpoint | /crm/v3/pipelines/deals/{{pipeline_id}}/stages |
| Confirmation | Not required (read-only) |
| Parameter | Location | Required | Description |
|---|---|---|---|
| pipeline_id | path | Yes | HubSpot pipeline ID (from List Pipelines) |
Associations
Link and unlink CRM records to each other using the HubSpot v4 associations API. For example, associate a contact with a deal or a company with a ticket.
Create Association
Create an association between two CRM records. For example, link a contact to a deal or a company to a ticket.
| Setting | Value |
|---|---|
| Method | PUT |
| Endpoint | /crm/v4/objects/{{from_object_type}}/{{from_object_id}}/associations/{{to_object_type}}/{{to_object_id}} |
| Confirmation | Required |
| Parameter | Location | Required | Description |
|---|---|---|---|
| from_object_type | path | Yes | Source object type (e.g. contacts, deals) |
| from_object_id | path | Yes | Source record ID |
| to_object_type | path | Yes | Target object type (e.g. deals, companies) |
| to_object_id | path | Yes | Target record ID |
| associationCategory | body | Yes | Category (usually HUBSPOT_DEFINED) |
| associationTypeId | body | Yes | Association type ID (e.g. 3 for deal-to-contact) |
Tip: Common association type IDs: 3 (deal → contact), 5 (deal → company), 15 (ticket → contact). See HubSpot's documentation for the full list.
List Associations
List all associations for a given record. For example, find all contacts associated with a deal.
| Setting | Value |
|---|---|
| Method | GET |
| Endpoint | /crm/v4/objects/{{from_object_type}}/{{from_object_id}}/associations/{{to_object_type}} |
| Confirmation | Not required (read-only) |
| Parameter | Location | Required | Description |
|---|---|---|---|
| from_object_type | path | Yes | Source object type (e.g. contacts, deals) |
| from_object_id | path | Yes | Source record ID |
| to_object_type | path | Yes | Target object type to list associations for |
Delete Association
Remove an association between two CRM records. The AI always confirms before deleting.
| Setting | Value |
|---|---|
| Method | DELETE |
| Endpoint | /crm/v4/objects/{{from_object_type}}/{{from_object_id}}/associations/{{to_object_type}}/{{to_object_id}} |
| Confirmation | Required |
| Destructive | Yes |
| Parameter | Location | Required | Description |
|---|---|---|---|
| from_object_type | path | Yes | Source object type |
| from_object_id | path | Yes | Source record ID |
| to_object_type | path | Yes | Target object type |
| to_object_id | path | Yes | Target record ID |
Direct Lookups
Fetch a single record by its HubSpot ID. Faster than search when you already know the record ID from a previous action.
Get Contact by ID
Retrieve a single contact by its HubSpot ID. Returns all requested properties.
| Setting | Value |
|---|---|
| Method | GET |
| Endpoint | /crm/v3/objects/contacts/{{contact_id}}?properties=firstname,lastname,email,phone,company |
| Confirmation | Not required (read-only) |
| Parameter | Location | Required | Description |
|---|---|---|---|
| contact_id | path | Yes | HubSpot contact ID |
Get Deal by ID
Retrieve a single deal by its HubSpot ID. Returns deal name, amount, stage, and close date.
| Setting | Value |
|---|---|
| Method | GET |
| Endpoint | /crm/v3/objects/deals/{{deal_id}}?properties=dealname,amount,dealstage,closedate,pipeline |
| Confirmation | Not required (read-only) |
| Parameter | Location | Required | Description |
|---|---|---|---|
| deal_id | path | Yes | HubSpot deal ID |
Get Company by ID
Retrieve a single company by its HubSpot ID. Returns company name, domain, industry, and other details.
| Setting | Value |
|---|---|
| Method | GET |
| Endpoint | /crm/v3/objects/companies/{{company_id}}?properties=name,domain,industry,phone,city |
| Confirmation | Not required (read-only) |
| Parameter | Location | Required | Description |
|---|---|---|---|
| company_id | path | Yes | HubSpot company ID |
Get Ticket by ID
Retrieve a single ticket by its HubSpot ID. Returns ticket subject, status, priority, and pipeline.
| Setting | Value |
|---|---|
| Method | GET |
| Endpoint | /crm/v3/objects/tickets/{{ticket_id}}?properties=subject,content,hs_ticket_priority,hs_pipeline_stage |
| Confirmation | Not required (read-only) |
| Parameter | Location | Required | Description |
|---|---|---|---|
| ticket_id | path | Yes | HubSpot ticket ID |
Step 3: Enable on Your AI Agent
- Go to AI Agents and select the employee you want to configure
- Scroll down to Integrations and enable the HubSpot actions you want this employee to use
- Save. The AI agent can now use these actions during phone calls
Example Conversation
Here's a full conversation showing search, create, update, and delete in action:
Custom Actions (From Scratch)
Need something beyond the templates? Click Custom Action in the template picker to configure any HubSpot API endpoint manually. Below are ready-to-use examples covering every HTTP method.
List & Search Contacts
Retrieve all contacts or filter with a search query. This is what the Search template uses under the hood.
| Setting | Value |
|---|---|
| Action Name | search_contact |
| Description | Search for contacts in HubSpot. Call without a search term to list all contacts, or provide a search term to filter. |
| Method | GET |
| Endpoint | /crm/v3/objects/contacts?properties=firstname,lastname,email,phone,company&limit=10 |
| Parameter | Location | Required | Description |
|---|---|---|---|
| search | query | No | Optional search term to filter contacts (name, email, phone) |
No body template needed. Example response:
{
"results": [
{
"id": "12345",
"properties": {
"firstname": "Sarah",
"lastname": "Johnson",
"email": "[email protected]",
"phone": "+15551234567",
"company": "Tech Solutions Inc"
}
}
]
}Tip: Add properties= directly in the endpoint path to choose which fields are returned. Use limit= to control results count.
Search Contact by Customer Phone (Advanced)
Automatically identify the customer using HubSpot's search API with the {{caller_phone}} variable. Great for personalized greetings.
| Setting | Value |
|---|---|
| Action Name | identify_customer |
| Description | Look up the customer in HubSpot by their phone number. Called automatically at the start of an interaction. |
| Method | POST |
| Endpoint | /crm/v3/objects/contacts/search |
| Custom Request Body | Enabled |
Body Template:
{
"filterGroups": [{
"filters": [{
"propertyName": "phone",
"operator": "EQ",
"value": "{{caller_phone}}"
}]
}],
"properties": ["firstname", "lastname", "email", "phone", "company", "lifecyclestage"]
}Tip: {{caller_phone}} is auto-filled with the customer's phone number, so there is no need to ask for it. This action has no parameters since everything is automatic.
Create Contact
Add a new contact to HubSpot. The AI collects details from the customer and creates the record.
| Setting | Value |
|---|---|
| Action Name | create_contact |
| Description | Create a new contact in HubSpot. Collect at least the email and first name from the customer. |
| Method | POST |
| Endpoint | /crm/v3/objects/contacts |
| Confirmation | Required |
| Custom Request Body | Enabled |
| Parameter | Location | Required | Description |
|---|---|---|---|
| body | Yes | Contact email address | |
| firstname | body | Yes | First name |
| lastname | body | Yes | Last name |
| phone | body | No | Phone number |
| company | body | No | Company name |
Body Template:
{
"properties": {
"email": "{{email}}",
"firstname": "{{firstname}}",
"lastname": "{{lastname}}",
"phone": "{{phone}}",
"company": "{{company}}"
}
}Example Response (201 Created):
{
"id": "693073375428",
"properties": {
"email": "[email protected]",
"firstname": "Peter",
"lastname": "Bakker",
"phone": "0687654321",
"lifecyclestage": "lead",
"createdate": "2026-02-11T11:51:30.649Z"
}
}Smart cleanup: Optional fields the customer doesn't provide (like phone or company) are automatically removed before sending to HubSpot. No empty values will be stored.
Create Deal (with Contact Association)
Create a deal and link it to an existing contact. Use search_contact first to get the contact_id.
| Setting | Value |
|---|---|
| Action Name | create_deal |
| Description | Create a new deal in HubSpot and associate it with a contact. |
| Method | POST |
| Endpoint | /crm/v3/objects/deals |
| Confirmation | Required |
| Custom Request Body | Enabled |
| Parameter | Location | Required | Description |
|---|---|---|---|
| dealname | body | Yes | Name for the deal |
| amount | body | No | Deal value in dollars |
| contact_id | body | Yes | HubSpot contact ID (from search_contact) |
Body Template:
{
"properties": {
"dealname": "{{dealname}}",
"amount": "{{amount}}",
"pipeline": "default",
"dealstage": "appointmentscheduled"
},
"associations": [{
"to": {"id": "{{contact_id}}"},
"types": [{"associationCategory": "HUBSPOT_DEFINED", "associationTypeId": 3}]
}]
}Note: associationTypeId: 3 links a deal to a contact. Use the search_contact action first to get the contact_id.
Update Contact
Update specific fields on an existing contact. Only the fields provided by the customer are sent and everything else stays untouched.
| Setting | Value |
|---|---|
| Action Name | update_contact |
| Description | Update a contact in HubSpot. Only provide the fields that need to change. |
| Method | PATCH |
| Endpoint | /crm/v3/objects/contacts/{{contact_id}} |
| Confirmation | Required |
| Custom Request Body | Enabled |
| Parameter | Location | Required | Description |
|---|---|---|---|
| contact_id | path | Yes | HubSpot contact ID (from search) |
| body | No | New email address | |
| firstname | body | No | New first name |
| lastname | body | No | New last name |
| phone | body | No | New phone number |
| company | body | No | New company name |
Body Template:
{
"properties": {
"email": "{{email}}",
"firstname": "{{firstname}}",
"lastname": "{{lastname}}",
"phone": "{{phone}}",
"company": "{{company}}"
}
}Example: updating only the email (other fields auto-removed):
PATCH /crm/v3/objects/contacts/692916567278
Sent to HubSpot:
{
"properties": {
"email": "[email protected]"
}
}
Response (200 OK):
{
"id": "692916567278",
"properties": {
"email": "[email protected]",
"firstname": "Peter",
"lastname": "Bakker",
"phone": "0687654321",
"lastmodifieddate": "2026-02-11T14:24:41.917Z"
}
}Safe updates: Unused template fields like {{firstname}} are automatically cleaned up. Only fields the AI provides are sent, so a single-field update won't overwrite other data.
Delete Contact
Archive (soft-delete) a contact in HubSpot. Recoverable within 90 days from HubSpot's recycle bin.
| Setting | Value |
|---|---|
| Action Name | delete_contact |
| Description | Delete a contact from HubSpot. Always confirm with the customer before deleting. |
| Method | DELETE |
| Endpoint | /crm/v3/objects/contacts/{{contact_id}} |
| Confirmation | Required |
| Destructive | Yes |
| Parameter | Location | Required | Description |
|---|---|---|---|
| contact_id | path | Yes | HubSpot contact ID to delete |
No request body or body template needed. Returns 204 No Content on success.
Important: Mark this action as Destructive and enable Require Confirmation. Consider adding Identity Verification to prevent unauthorized deletions.
Other Useful Endpoints
These endpoints don't have templates but can be configured as custom actions:
| Action | Method | Endpoint | Use Case |
|---|---|---|---|
| List ticket pipelines | GET | /crm/v3/pipelines/tickets | Get ticket stage IDs for creating tickets |
| List products | GET | /crm/v3/objects/products?limit=20 | Browse product catalog |
| List line items | GET | /crm/v3/objects/line_items?limit=20 | Browse line items for deals |
Available Variables
Use these in endpoint paths and body templates. They are automatically replaced at runtime.
| Variable | Description | Example Use |
|---|---|---|
| {{caller_phone}} | The customer's phone number | Auto-search contacts by phone |
| {{employee_id}} | The AI agent handling the call | Log which agent made the request |
| {{call_id}} | Unique identifier for the current call | Link CRM records to call logs |
Alternative: Manual Setup (Private App Token)
Only use this method if you cannot use OAuth or need a token that doesn't expire. Private App tokens have fixed scopes set during creation.
- 1In HubSpot, go to Settings → Integrations → Private Apps
- 2Click Create a private app, name it "Staffify Integration"
- 3Go to Scopes tab and enable the scopes you need (e.g.
crm.objects.contacts.read,crm.objects.contacts.write) - 4Create the app and copy the Access token
- 5In Staffify, go to Integrations and create a manual connection with the token as Bearer Token
| Field | Value |
|---|---|
| Connection Name | HubSpot CRM |
| Base URL | https://api.hubapi.com |
| Auth Type | Bearer Token |
| Token | Your Private App token |
| Token Expires | Disabled (doesn't expire) |
HubSpot API Reference
| Object | Base Endpoint | Template Actions |
|---|---|---|
| Contacts | /crm/v3/objects/contacts | Search, Create, Update, Delete, Get by ID |
| Companies | /crm/v3/objects/companies | Search, Create, Update, Delete, Get by ID |
| Deals | /crm/v3/objects/deals | Search, Create, Update, Delete, Get by ID |
| Tickets | /crm/v3/objects/tickets | Search, Create, Update, Delete, Get by ID |
| Notes | /crm/v3/objects/notes | Search, Create, Get, Delete |
| Calls | /crm/v3/objects/calls | Search, Log, Get, Delete |
| Tasks | /crm/v3/objects/tasks | Search, Create, Get, Delete |
| Meetings | /crm/v3/objects/meetings | Search, Create, Get, Delete |
| Owners | /crm/v3/owners | List Owners |
| Pipelines | /crm/v3/pipelines/deals | List Pipelines, List Pipeline Stages |
| Associations | /crm/v4/objects/{type} | Create, List, Delete |
| Products | /crm/v3/objects/products | Custom actions only |
| Line Items | /crm/v3/objects/line_items | Custom actions only |
Full API documentation: developers.hubspot.com/docs/api/crm
Last updated: February 2026