<!-- BusyBot node reference — https://busybot.net/tools/hubspot-trigger/ -->

> Node: HubSpot Trigger (`hubspot_trigger`) · Webhook trigger · v1
> Category: Sales · Credentials: HubSpot Developer (`hubspotDeveloperApi`)
> Updated: 2026-08-16

# HubSpot Trigger

> Trigger workflows from HubSpot CRM events

## Overview

Triggers a workflow when events occur in HubSpot CRM. Supports contact, company, deal, ticket, and conversation events including creation, deletion, property changes, and privacy deletions. Receives batched webhook payloads from HubSpot and verifies signatures using SHA-256 hashing. Each event in the batch becomes a separate workflow item.

**Category:** Sales  
**Tool Name:** `hubspot_trigger`  
**Version:** 1

**Appearance:** Icon: `si-hubspot` | Color: `#ff7a59`

## Node Type

**Trigger** — webhook (receives incoming HTTP callbacks)

## Input / Output

| Direction | Port(s) |
|-----------|--------|
| Input | None (trigger node) |
| Output | `Output` |

## Credentials

This tool requires **HubSpot Developer** credentials.
See the [Credentials Guide](https://busybot.net/credentials/hubspot-developer-api/) for setup instructions.

### Parameters

| Parameter | Type | Required | Default | Description |
|-----------|------|----------|---------|-------------|
| Events | `multiOptions` | No | `[]` | Which HubSpot events to listen for. At least one event must be selected for the subscription to be created. |
| | | | | Options: `company.creation`, `company.deletion`, `company.propertyChange`, `contact.creation`, `contact.deletion`, `contact.privacyDeletion` (a contact deleted for privacy compliance), `contact.propertyChange`, `conversation.creation` (a new thread), `conversation.deletion` (a thread archived or soft-deleted), `conversation.newMessage`, `conversation.privacyDeletion` (a thread permanently deleted), `conversation.propertyChange`, `deal.creation`, `deal.deletion`, `deal.propertyChange`, `ticket.creation`, `ticket.deletion`, `ticket.propertyChange` |
| Property Name | `string` | No | — | The name of the property to watch for changes. Required when using propertyChange events (e.g., "email", "lifecyclestage", "dealname"). _(shown when Events is `contact.propertyChange`, `company.propertyChange`, `deal.propertyChange`)_ |
| Additional Fields | `collection` | No | `{}` | Additional configuration options for the webhook. |
| — Max Concurrent Requests | `number` | No | `5` | Maximum number of concurrent webhook requests HubSpot will send to this endpoint. |

## Output Data

HubSpot delivers events in batches. **Each event in the batch becomes its own output item**, so one delivery can start the workflow with many items:

```json
{
  "eventId": 1,
  "subscriptionId": 12345,
  "portalId": 0,
  "appId": 0,
  "occurredAt": 1767225600000,
  "subscriptionType": "contact.creation",
  "attemptNumber": 0,
  "contactId": 0,
  "changeSource": "CRM",
  "changeFlag": "",
  "_trigger": "hubspot_webhook",
  "_timestamp": "2026-01-01T00:00:00.000Z",
  "_webhookEvent": "contact.creation"
}
```

- `_trigger` — always `hubspot_webhook`.
- `_timestamp` — ISO 8601 timestamp of when the delivery arrived.
- `_webhookEvent` — the event's `subscriptionType`, or `unknown` when it is absent.
- HubSpot's generic `objectId` field is **renamed to a type-specific field and removed**: `contactId`, `companyId`, `dealId`, `ticketId` or `conversationId`, chosen from the `subscriptionType`. Address the record by that field rather than `objectId`.
- `propertyName` and `propertyValue` appear on `propertyChange` events; `occurredAt` is a millisecond epoch timestamp.

Reference values downstream by expression, for example `{{ $json.contactId }}` or `{{ $json.subscriptionType }}`.

Deliveries arriving without an `X-HubSpot-Signature` header, or whose signature does not match, are rejected with `401`.

## Usage Examples

- Trigger a workflow when a new contact is created in HubSpot
- Start a process when a deal property changes in HubSpot
- React to new company creation events from HubSpot CRM
- Listen for ticket deletion events in HubSpot
- Trigger automation when a HubSpot conversation receives a new message

## Example Configuration

Fire on new contacts:

```json
{
  "type": "hubspot_trigger",
  "parameters": {
    "events": ["contact.creation"]
  }
}
```

Watch a specific contact property:

```json
{
  "type": "hubspot_trigger",
  "parameters": {
    "events": ["contact.propertyChange"],
    "propertyName": "lifecyclestage"
  }
}
```

Track sales pipeline movement:

```json
{
  "type": "hubspot_trigger",
  "parameters": {
    "events": ["deal.creation", "deal.propertyChange"],
    "propertyName": "dealstage"
  }
}
```

Monitor support tickets:

```json
{
  "type": "hubspot_trigger",
  "parameters": {
    "events": ["ticket.creation", "ticket.propertyChange"],
    "propertyName": "hs_pipeline_stage"
  }
}
```

Limit delivery concurrency on a high-volume portal:

```json
{
  "type": "hubspot_trigger",
  "parameters": {
    "events": ["contact.creation", "company.creation", "deal.creation"],
    "additionalFields": {
      "maxConcurrentRequests": 3
    }
  }
}
```

### Trigger Behavior

- **Activation:** When the workflow is activated, a webhook endpoint is registered with the service.
- **Deactivation:** The webhook is automatically unregistered when the workflow is deactivated.
- **Payload:** The incoming webhook payload is parsed and output as workflow items.
- **Verification:** Supports signature verification where applicable.

## Tips

Connects to HubSpot via webhook subscriptions. Select the events you want to listen for (e.g., contact.creation, deal.propertyChange). HubSpot sends batched event arrays to the webhook URL. Signature verification ensures payloads are authentic. Each event in the batch becomes a separate output item with the object type ID (contactId, companyId, dealId, or ticketId) extracted from the generic objectId field.

HubSpot allows only one webhook target URL per developer app, so a second workflow using the same App ID cannot register its own URL — use a separate App ID for each workflow that needs its own subscription.

### Important Notes

1. **Property Name Dependency**: The `propertyName` parameter is only visible when using propertyChange events (`contact.propertyChange`, `company.propertyChange`, or `deal.propertyChange`).

2. **Event Selection**: You can select multiple events, but if any are propertyChange events (contact, company, or deal), you must specify a `propertyName` that applies to all selected property change events.

3. **Concurrent Requests**: The `maxConcurrentRequests` setting in `additionalFields` helps manage webhook performance and prevents overwhelming your endpoint with too many simultaneous requests.

4. **Collection Structure**: The `additionalFields` parameter uses a flat object structure where fields are nested directly under the `additionalFields` key, not wrapped in arrays or additional objects.