HubSpot CRM
Provides integration with HubSpot CRM for OAuth-backed queries and mutations using live object and Property metadata.
Revision History
0.1.0.1 - Improved OAuth error details returned by HubSpot token operations.
0.1.0.0 - Published after the completed V2 overhaul.
0.0.0.11 - Query rows now omit mutation default fields, first-call query failures surface, and mutation rows use the top-level Flowgear object.
0.0.0.10 - Standardized the public V2 help article.
0.0.0.9 - Initial release.
Connection
Use this Connection to store the HubSpot OAuth settings and token state used by all HubSpot CRM methods.
| Property | Type | Description |
|---|---|---|
Client ID |
String | OAuth client identifier issued by HubSpot. |
Client Secret |
Masked | OAuth client secret issued by HubSpot. |
Access Token |
Masked | OAuth access token used for HubSpot API requests. |
Refresh Token |
Masked | OAuth refresh token used to renew the access token. |
Access Token Expires At UTC |
String | UTC timestamp after which Flowgear refreshes the current access token. |
Granted Scopes |
String | Space-delimited OAuth scopes currently granted to the Connection. Flowgear refreshes this from HubSpot after authorization, during connection testing, and before template discovery when needed. |
Setup Notes
- Create a HubSpot developer app and use its
Client IDandClient Secretfor thisConnection. - Add the Flowgear OAuth callback URLs to the app's redirect URL list:
https://app.flowgear.net/r/auth
https://appnew.flowgear.net/r/auth
https://appnext.flowgear.net/r/auth
- Configure the app with the HubSpot scopes required by this node. The connector requests the following scope set during authorization:
oauth
crm.objects.contacts.read
crm.objects.contacts.write
crm.objects.companies.read
crm.objects.companies.write
crm.objects.deals.read
crm.objects.deals.write
crm.objects.custom.read
crm.objects.custom.write
crm.schemas.custom.read
- You do not need to type values into
Granted Scopes. Flowgear fills that property from HubSpot and uses it to decide which templates to show. - In the Flowgear Console, create a
Connectionof typeHubSpot CRM, enter theClient IDandClient Secret, then clickConnect your Account. - Complete the HubSpot sign-in and consent flow for the HubSpot account you want the node to access. HubSpot developer accounts cannot install apps directly, so use a test or target HubSpot account for authorization.
- Test the
Connectionafter authorization. The test refreshes the storedGranted Scopesfrom HubSpot and confirms that theConnectionincludes at least one supported CRM read or write scope. - Template discovery depends on a working HubSpot
Connectionbecause object and property definitions are loaded from live HubSpot metadata instead of a bundled schema.
Methods
The node exposes metadata-driven query and single-record CRUD methods. Query uses a direct ObjectType parameter plus an Options object. Create, Update, and Delete use a direct ObjectType parameter plus streamed Items, and each method returns one normalized response row per processed record.
Query
Queries HubSpot CRM records and returns one normalized response row per record.
| Parameter | Type | Description |
|---|---|---|
Connection |
Connection | HubSpot CRM Connection used to authenticate the request. |
ObjectType |
String | HubSpot object type to query, such as contacts, companies, or deals. Templates can also expose custom object types when the Connection has the required scopes. |
Options |
Object | Optional query settings such as Id, Properties, and IncludeArchived. |
Options.Id |
String | Optional HubSpot record ID for a single-record read. |
Options.Properties |
String | Optional comma-separated list of HubSpot property API names to include in the response. |
Options.IncludeArchived |
Boolean | Set to true to include archived records. |
| Return | Type | Description |
|---|---|---|
Response |
Array | Response rows that include returned HubSpot property values, record metadata such as objectType, recordId, createdAt, and updatedAt, provider diagnostics such as providerStatus, providerCategory, and providerCorrelationId, plus the raw response payload. Query rows do not include mutation default fields. |
Create
Creates HubSpot CRM records one row at a time and returns one normalized response row per created record.
| Parameter | Type | Description |
|---|---|---|
Connection |
Connection | HubSpot CRM Connection used to authenticate the request. |
ObjectType |
String | HubSpot object type to create. |
Items |
Array | HubSpot records to create, with writable properties as direct children of each item. The fields exposed in templates depend on the selected object type and the Connection's granted scopes. |
| Return | Type | Description |
|---|---|---|
Response |
Array | Response rows for each created record, including returned HubSpot property values, record metadata, provider diagnostics, the raw response payload, and a top-level Flowgear object with default success or failure metadata. |
Update
Updates HubSpot CRM records one row at a time and returns one normalized response row per updated record.
| Parameter | Type | Description |
|---|---|---|
Connection |
Connection | HubSpot CRM Connection used to authenticate the request. |
ObjectType |
String | HubSpot object type to update. |
Items |
Array | HubSpot records to update, with Id plus writable properties as direct children of each item. The fields exposed in templates depend on the selected object type and the Connection's granted scopes. |
| Return | Type | Description |
|---|---|---|
Response |
Array | Response rows for each updated record, including returned HubSpot property values, record metadata, provider diagnostics, the raw response payload, and a top-level Flowgear object with default success or failure metadata. |
Delete
Deletes HubSpot CRM records one row at a time and returns one normalized response row per deleted record.
| Parameter | Type | Description |
|---|---|---|
Connection |
Connection | HubSpot CRM Connection used to authenticate the request. |
ObjectType |
String | HubSpot object type to delete. |
Items |
Array | HubSpot records to delete, with Id as a direct child of each item. |
| Return | Type | Description |
|---|---|---|
Response |
Array | Response rows for each deleted record, including the input request context, record metadata, provider diagnostics, an empty raw response payload for successful deletes, and a top-level Flowgear object with default success or failure metadata. |
Usage Notes
- If
Granted Scopesis blank on theConnection, Flowgear refreshes it from HubSpot before filtering templates. QueryusesOptions.Idfor a single-record read. If you do not supplyOptions.Id, the node queries records for the selected object type and handles paging internally.- If a HubSpot list query finds no matching records, the node returns zero rows instead of treating the no-match result as an error.
- If the first HubSpot query call fails, the provider error surfaces to the Workflow instead of being normalized into an empty or successful response row.
- Use a comma-separated string in
Options.Propertiesfor new Workflows. The node still accepts a JSON string array for backward compatibility. Create,Update, andDeleteplace HubSpot fields directly on eachItems[]row instead of nesting them insideRequestorPropertieswrappers, and each response row adds the top-levelFlowgearobject for default success or failure metadata.- Template availability depends on the scopes granted to the
Connection. Core object templates are filtered by read or write scope. Custom-object query templates requirecrm.objects.custom.read, and custom-object create, update, and delete templates requirecrm.objects.custom.write.
Known Issues
OAuth failures use HubSpot's
error_descriptionwhen available and fall back to the legacymessagefield for older error responses.Template discovery requires valid HubSpot credentials because the node loads object and property metadata from live HubSpot APIs instead of a bundled schema.
Existing HubSpot
Connectionvalues may need to be re-authorized before custom-object templates appear because the connector now requestscrm.objects.custom.read,crm.objects.custom.write, andcrm.schemas.custom.read.This release does not include search, batch operations, associations, owners, pipelines, quotes, or line items.