HubSpot Node
The HubSpot node provides integration with HubSpot CRM in SkyStudio workflows. You can read and filter contact, deal, and company records, and run AI-powered queries.
🎬 Click to watch the video →
Connection Setup and Management
To use the HubSpot node, you must create a Private App in HubSpot and add its access token to SkyStudio.
Getting a Private App Token
- Sign in to your HubSpot account.
- Click the profile icon in the upper-right corner and go to Settings.
- Open Integrations → Private Apps from the left menu.
- Click the Create App button.
- Give the app a name and select the required permission scopes:
- CRM →
crm.objects.contacts.read,crm.objects.deals.read,crm.objects.companies.read
- CRM →
- Click the Create App button.
- Copy the generated Access Token, which starts with
pat-eu1-…orpat-na1-….
Note: The token is displayed in full only once. If you forget to copy it, you must regenerate the token.
Adding the Connection to SkyStudio
- Go to Application Connections from the left menu in SkyStudio.
- Click the Add New Connection button.
- Select HubSpot as the provider.
- Enter a descriptive name in the Connection Name field, such as
Prod HubSpot. - Paste the token you copied into the Private App Access Token field.
- Click the Save button.
Assigning the Connection to the Node
After adding the HubSpot node to the canvas, select the saved connection from the Application Connections dropdown in the right panel.
Tip: You can define separate connections for different HubSpot portals, such as test and production, and choose which one to use in the workflow.
Operations
The HubSpot node provides 7 operations:
| Operation | Category | Description |
|---|---|---|
| Get Contacts | Featured | Lists all contact records in the CRM |
| Get Deals | Featured | Lists all deal records in the CRM |
| Search Object | Featured | Searches any CRM object using filters |
| HubSpot AI Assistant | Featured | Queries CRM data using natural language |
| Get Contact by ID | Standard | Retrieves details of a specific contact by ID |
| Get Deal by ID | Standard | Retrieves details of a specific deal by ID |
| Get Companies | Standard | Lists all company records in the CRM |
Get Contacts
Returns all contact records in HubSpot CRM. It is used in bulk contact retrieval and synchronization scenarios.
Parameters
| Parameter | Required | Description |
|---|---|---|
| Connection | Yes | The HubSpot connection to use |
| Properties | No | Contact properties to retrieve, as comma-separated field names, such as firstname,lastname,email,phone |
| Get All (Auto Paginate) | No | If enabled, automatically retrieves records from all pages; if disabled, only the first page is returned |
| Limit | No | Maximum number of contacts to return. Applies when Get All is disabled |
Property Examples
firstname, lastname, email, phone, company, jobtitle, city, country, createdate, lastmodifieddate, hubspot_owner_id
Example Output
{
"results": [
{
"id": "12345",
"properties": {
"firstname": "Ahmet",
"lastname": "Yılmaz",
"email": "ahmet@company.com",
"phone": "+905551234567",
"company": "Example Inc."
}
}
]
}
Get Deals
Returns all deal records in HubSpot CRM. It is used in sales pipeline tracking and reporting workflows.
Parameters
| Parameter | Required | Description |
|---|---|---|
| Connection | Yes | The HubSpot connection to use |
| Properties | No | Deal properties to retrieve, as comma-separated field names |
| Get All (Auto Paginate) | No | Automatically retrieves all pages |
| Limit | No | Maximum number of deals to return |
Property Examples
dealname, amount, dealstage, closedate, pipeline, hubspot_owner_id, createdate, hs_lastmodifieddate
Example Output
{
"results": [
{
"id": "67890",
"properties": {
"dealname": "Enterprise License - Example Inc.",
"amount": "15000",
"dealstage": "presentationscheduled",
"closedate": "2024-12-31T00:00:00.000Z"
}
}
]
}
Search Object
Searches any object type in HubSpot CRM, such as contacts, deals, companies, or tickets, using a specific filter. It is used for dynamic queries and conditional data retrieval scenarios.
Parameters
| Parameter | Required | Description |
|---|---|---|
| Connection | Yes | The HubSpot connection to use |
| Object Type | Yes | Object type to search: contacts, deals, companies, or tickets |
| Filter Property | No | Property name to filter by, such as email or dealstage |
| Filter Operator | No | Filter operator, such as EQ, NEQ, CONTAINS_TOKEN, GT, or LT |
| Filter Value | No | Filter value, such as ahmet@company.com or closedwon |
| Properties | No | Field names to return in the results, separated by commas |
| Limit | No | Maximum number of records to return |
Filter Operator Values
| Operator | Description |
|---|---|
EQ | Equals |
NEQ | Does not equal |
GT | Greater than |
LT | Less than |
GTE | Greater than or equal |
LTE | Less than or equal |
CONTAINS_TOKEN | Contains, used for text search |
NOT_CONTAINS_TOKEN | Does not contain |
Usage Example
To find closed-won deals:
- Object Type:
deals - Filter Property:
dealstage - Filter Operator:
EQ - Filter Value:
closedwon
HubSpot AI Assistant
Queries HubSpot CRM data using natural language. It is ideal for accessing data analysis without writing complex filters.
Parameters
| Parameter | Required | Description |
|---|---|---|
| Connection | Yes | The HubSpot connection to use |
| Query | Yes | CRM query in natural language |
| System Prompt | No | System instruction that customizes the AI assistant’s behavior |
Usage Example
Query: "What is the total value of deals expected to close this month?"
System Prompt: "Consider only deals in the active pipeline. Return the results in Turkish and in Turkish lira."
Get Contact by ID
Returns detailed information for a single contact using a specific HubSpot Contact ID.
Parameters
| Parameter | Required | Description |
|---|---|---|
| Connection | Yes | The HubSpot connection to use |
| Contact ID | Yes | Numeric ID of the contact record in HubSpot |
| Properties | No | Field names to retrieve, separated by commas |
How to Find the Contact ID
The id field from the output of the Get Contacts or Search Object operations can be used directly.
It is also visible in the URL when you open the contact record in the HubSpot web interface:
app.hubspot.com/contacts/{portal-id}/contact/{contact-id}
Get Deal by ID
Returns detailed information for a single deal using a specific HubSpot Deal ID.
Parameters
| Parameter | Required | Description |
|---|---|---|
| Connection | Yes | The HubSpot connection to use |
| Deal ID | Yes | Numeric ID of the deal record in HubSpot |
| Properties | No | Field names to retrieve, separated by commas |
How to Find the Deal ID
The id field from the output of the Get Deals or Search Object operations can be used directly.
HubSpot URL format:
app.hubspot.com/contacts/{portal-id}/deal/{deal-id}
Get Companies
Returns all company records in HubSpot CRM.
Parameters
| Parameter | Required | Description |
|---|---|---|
| Connection | Yes | The HubSpot connection to use |
| Properties | No | Company properties to retrieve, as comma-separated field names |
| Get All (Auto Paginate) | No | Automatically retrieves all pages |
| Limit | No | Maximum number of companies to return |
Property Examples
name, domain, industry, city, country, phone, numberofemployees, annualrevenue, createdate
Quick Start Examples
Example 1: Daily Sales Report
A workflow that summarizes deals expected to close soon every morning and sends them to Slack:
Schedule (Every morning at 08:00) → Search Object → LLM (summarize) → Slack Message
Search Object settings:
- Object Type:
deals - Filter Property:
closedate - Filter Operator:
LTE - Filter Value:
{{today+7days}} - Properties:
dealname,amount,dealstage,hubspot_owner_id
Example 2: New Customer Welcome
A workflow that finds a newly added CRM contact and sends a personalized welcome email:
Webhook (HubSpot trigger) → Get Contact by ID → LLM (write email) → Send Email
Get Contact by ID settings:
- Contact ID:
{{webhook.contact_id}} - Properties:
firstname,lastname,email,company,jobtitle
Example 3: Sales Team AI Assistant
A chatbot that allows the sales team to query CRM using natural language:
Text Input → HubSpot AI Assistant → Text Output
HubSpot AI Assistant settings:
- Query:
{{input.text}} - System Prompt:
"You are a sales analyst assistant. Respond in Turkish. Show currency in TL. Mask personal data in the response."
Example 4: Creating a Company Profile
A workflow that creates a full CRM profile from a company name:
Text Input (company name) → Search Object → Get Contacts → LLM (create profile) → Text Output
Search Object settings:
- Object Type:
companies - Filter Property:
name - Filter Operator:
CONTAINS_TOKEN - Filter Value:
{{input.text}} - Properties:
name,domain,industry,numberofemployees,annualrevenue
Common Errors
| Error | Possible Cause | Solution |
|---|---|---|
401 Unauthorized | Token is invalid or expired | Check the Private App token in HubSpot and renew it if needed |
403 Forbidden | Token does not have the required scope permission | Add the required CRM permissions from the Private App settings |
404 Not Found | Invalid Contact ID or Deal ID | Verify the ID using Get Contacts |
429 Too Many Requests | API rate limit exceeded | HubSpot API has a daily limit of 250,000 requests; reduce workflow frequency |
INVALID_FILTER_VALUE | Filter value is not in the expected format | Check that the Filter Value matches the relevant field type, such as text, number, or date |
Empty result (results: []) | No records match the filter condition | Check the Filter Property and Filter Value values |