# HubSpot

> Automate HubSpot CRM: manage contacts, companies, deals, notes and tasks with a HubSpot service key.

App · CRM Systems · 21 actions. Web page: https://docs.lodol.com/docs/integrations/hubspot

## Actions

### Create a HubSpot company

Create a new HubSpot company record. HubSpot de-duplicates companies on the domain.

**Inputs**

- Name (`name`, text, required): Company name
- Domain (`domain`, text): Company website domain, e.g. example.com
- City (`city`, text): City
- Industry (`industry`, text): Industry
- Phone (`phone`, text): Phone number

**Outputs**

- `archived` (true/false)
- `createdAt` (text)
- `id` (text)
- `properties` (object)
- `updatedAt` (text)

**Example output**

```json
{
  "archived": false,
  "createdAt": "2026-07-14T09:14:02.771Z",
  "id": "9001",
  "properties": {
    "city": "Bristol",
    "createdate": "2026-07-14T09:14:02.771Z",
    "domain": "averyconsulting.example.com",
    "industry": "CONSULTING",
    "name": "Avery Consulting"
  },
  "updatedAt": "2026-07-14T09:14:02.771Z"
}
```

### Create a HubSpot contact

Create a new contact with email, name, phone, and company details. HubSpot de-duplicates contacts on the email address.

**Inputs**

- Email (`email`, text, required): Contact email
- First name (`first_name`, text): First name
- Last name (`last_name`, text): Last name
- Phone (`phone`, text): Phone number
- Company (`company`, text): Company name
- Job title (`job_title`, text): Job title
- Owner (`owner_id`, text): The HubSpot user who owns this contact.

**Outputs**

- `archived` (true/false)
- `createdAt` (text)
- `id` (text)
- `properties` (object)
- `updatedAt` (text)

**Example output**

```json
{
  "archived": false,
  "createdAt": "2026-07-14T09:12:33.482Z",
  "id": "701",
  "properties": {
    "company": "Avery Consulting",
    "createdate": "2026-07-14T09:12:33.482Z",
    "email": "jordan.avery@example.com",
    "firstname": "Jordan",
    "jobtitle": "Head of Operations",
    "lastname": "Avery",
    "lifecyclestage": "lead",
    "phone": "+15555550123"
  },
  "updatedAt": "2026-07-14T09:12:33.482Z"
}
```

### Create a HubSpot deal

Create a new deal, optionally in a chosen pipeline and stage. An account with one pipeline uses its default when none is chosen.

**Inputs**

- Deal name (`deal_name`, text, required): Deal name
- Amount (`amount`, number): Deal value
- Pipeline (`pipeline`, text): The pipeline the deal belongs to. Leave empty to use the account's default pipeline.
- Stage (`stage`, text): The stage the deal starts in. Leave empty to use the first stage of its pipeline; HubSpot itself would otherwise create the deal with no stage at all.
- Close date (`close_date`, date): Expected close date.
- Owner (`owner_id`, text): The HubSpot user who owns this deal.

**Outputs**

- `archived` (true/false)
- `createdAt` (text)
- `id` (text)
- `properties` (object)
- `updatedAt` (text)

**Example output**

```json
{
  "archived": false,
  "createdAt": "2026-07-14T09:16:40.118Z",
  "id": "4501",
  "properties": {
    "amount": "12000",
    "closedate": "2026-09-30",
    "createdate": "2026-07-14T09:16:40.118Z",
    "dealname": "Avery Consulting - annual licence",
    "dealstage": "appointmentscheduled",
    "pipeline": "default"
  },
  "updatedAt": "2026-07-14T09:16:40.118Z"
}
```

### Create a HubSpot task

Create a task with a due date, optionally attached to a contact, company and/or deal.

**Inputs**

- Title (`subject`, text, required): The task's title.
- Due (`due_at`, date and time, required): When the task is due.
- Notes (`body`, text): Task notes.
- Status (`status`, text): Whether the task is already done. One of: `NOT_STARTED` (Not Started), `COMPLETED`. Default: `NOT_STARTED`.
- Priority (`priority`, text): Task priority. One of: `LOW`, `MEDIUM`, `HIGH`.
- Type (`task_type`, text): What kind of task this is. One of: `TODO`, `EMAIL`, `CALL`.
- Assigned to (`owner_id`, text): The HubSpot user the task is assigned to.
- Contact ID (`contact_id`, text): Contact to attach the task to.
- Company ID (`company_id`, text): Company to attach the task to.
- Deal ID (`deal_id`, text): Deal to attach the task to.

**Outputs**

- `archived` (true/false)
- `associated_to` (list)
- `createdAt` (text)
- `id` (text)
- `properties` (object)
- `updatedAt` (text)

**Example output**

```json
{
  "archived": false,
  "associated_to": [
    "contacts",
    "deals"
  ],
  "createdAt": "2026-07-14T09:22:10.000Z",
  "id": "77020",
  "properties": {
    "hs_object_id": "77020",
    "hs_task_body": "Confirm the seat count before sending.",
    "hs_task_priority": "HIGH",
    "hs_task_status": "NOT_STARTED",
    "hs_task_subject": "Follow up on the renewal quote",
    "hs_task_type": "CALL",
    "hs_timestamp": "1784112000000"
  },
  "updatedAt": "2026-07-14T09:22:10.000Z"
}
```

### Delete a HubSpot company

Archive a HubSpot company. HubSpot archives rather than destroys: the record leaves the CRM and the API, and stays restorable from the portal's recycling bin for 90 days.

**Inputs**

- Company ID (`company_id`, text, required): HubSpot company ID, or the address of the company record in HubSpot.

**Outputs**

- `company_id` (text)
- `deleted` (true/false)

**Example output**

```json
{
  "company_id": "9001",
  "deleted": true
}
```

### Delete a HubSpot contact

Archive a HubSpot contact. HubSpot archives rather than destroys: the record leaves the CRM and the API, and stays restorable from the portal's recycling bin for 90 days.

**Inputs**

- Contact ID (`contact_id`, text, required): HubSpot contact ID, or the address of the contact record in HubSpot.

**Outputs**

- `contact_id` (text)
- `deleted` (true/false)

**Example output**

```json
{
  "contact_id": "701",
  "deleted": true
}
```

### Delete a HubSpot deal

Archive a HubSpot deal. HubSpot archives rather than destroys: the record leaves the CRM and the API, and stays restorable from the portal's recycling bin for 90 days.

**Inputs**

- Deal ID (`deal_id`, text, required): HubSpot deal ID, or the address of the deal record in HubSpot.

**Outputs**

- `deal_id` (text)
- `deleted` (true/false)

**Example output**

```json
{
  "deal_id": "4501",
  "deleted": true
}
```

### Delete a HubSpot note

Archive a HubSpot note. HubSpot archives rather than destroys: the record leaves the CRM and the API, and stays restorable from the portal's recycling bin for 90 days.

**Inputs**

- Note ID (`note_id`, text, required): HubSpot note ID.

**Outputs**

- `deleted` (true/false)
- `note_id` (text)

**Example output**

```json
{
  "deleted": true,
  "note_id": "88010"
}
```

### Delete a HubSpot task

Archive a HubSpot task. HubSpot archives rather than destroys: the record leaves the CRM and the API, and stays restorable from the portal's recycling bin for 90 days.

**Inputs**

- Task ID (`task_id`, text, required): HubSpot task ID.

**Outputs**

- `deleted` (true/false)
- `task_id` (text)

**Example output**

```json
{
  "deleted": true,
  "task_id": "77020"
}
```

### Find contact by email

Look up a HubSpot contact using an email address. Fails the step when no contact has that address.

**Inputs**

- Email (`email`, text, required): Email address to look up

**Outputs**

- `archived` (true/false)
- `createdAt` (text)
- `id` (text)
- `properties` (object)
- `updatedAt` (text)

**Example output**

```json
{
  "archived": false,
  "createdAt": "2026-07-14T09:12:33.482Z",
  "id": "701",
  "properties": {
    "company": "Avery Consulting",
    "createdate": "2026-07-14T09:12:33.482Z",
    "email": "jordan.avery@example.com",
    "firstname": "Jordan",
    "jobtitle": "Head of Operations",
    "lastname": "Avery",
    "lifecyclestage": "lead",
    "phone": "+15555550123"
  },
  "updatedAt": "2026-07-14T11:40:02.113Z"
}
```

### Find contacts created in a date range

Find HubSpot contacts created on or after a date, newest first. Returns the matching contacts plus the total number that match, so a report can count every new lead in the window.

**Inputs**

- Created after (`created_after`, date and time, required): Only return contacts created at or after this moment.
- Created before (`created_before`, date and time): Optional upper bound, exclusive. Leave empty to run the window up to now.
- Maximum contacts (`limit`, number): How many contacts to return, newest first (default 100, maximum 2000). The total count is reported in full even when more contacts match than are returned. From 1 to 2000. Default: `100`.

**Outputs**

- `has_more` (true/false)
- `results` (list)
- `total` (number)

**Example output**

```json
{
  "has_more": false,
  "results": [
    {
      "archived": false,
      "createdAt": "2026-08-24T14:22:07.005Z",
      "id": "703",
      "properties": {
        "company": "Meridian Health",
        "createdate": "2026-08-24T14:22:07.005Z",
        "email": "rae.lindqvist@example.com",
        "firstname": "Rae",
        "hs_analytics_source": "ORGANIC_SEARCH",
        "jobtitle": "Procurement Lead",
        "lastname": "Lindqvist"
      },
      "updatedAt": "2026-08-24T14:22:07.005Z"
    }
  ],
  "total": 1
}
```

### Find deals created in a date range

Find HubSpot deals created on or after a date, newest first. Returns the matching deals plus the total number that match, so a report can count every new deal in the window.

**Inputs**

- Created after (`created_after`, date and time, required): Only return deals created at or after this moment.
- Created before (`created_before`, date and time): Optional upper bound, exclusive. Leave empty to run the window up to now.
- Maximum deals (`limit`, number): How many deals to return, newest first (default 100, maximum 2000). The total count is reported in full even when more deals match than are returned. From 1 to 2000. Default: `100`.

**Outputs**

- `has_more` (true/false)
- `results` (list)
- `total` (number)

**Example output**

```json
{
  "has_more": false,
  "results": [
    {
      "archived": false,
      "createdAt": "2026-08-24T14:22:07.005Z",
      "id": "4502",
      "properties": {
        "amount": "8500",
        "createdate": "2026-08-24T14:22:07.005Z",
        "dealname": "Meridian Health - pilot",
        "dealstage": "appointmentscheduled",
        "pipeline": "default"
      },
      "updatedAt": "2026-08-24T14:22:07.005Z"
    }
  ],
  "total": 1
}
```

### Get a HubSpot company

Read one HubSpot company by its record ID.

**Inputs**

- Company ID (`company_id`, text, required): HubSpot company ID, or the address of the company record in HubSpot.

**Outputs**

- `archived` (true/false)
- `createdAt` (text)
- `id` (text)
- `properties` (object)
- `updatedAt` (text)

**Example output**

```json
{
  "archived": false,
  "createdAt": "2026-07-14T09:14:02.771Z",
  "id": "9001",
  "properties": {
    "city": "Bristol",
    "createdate": "2026-07-14T09:14:02.771Z",
    "domain": "averyconsulting.example.com",
    "industry": "CONSULTING",
    "name": "Avery Consulting",
    "numberofemployees": "45",
    "phone": "+441170000000"
  },
  "updatedAt": "2026-07-14T09:14:02.771Z"
}
```

### Get a HubSpot deal

Read one HubSpot deal by its record ID.

**Inputs**

- Deal ID (`deal_id`, text, required): HubSpot deal ID, or the address of the deal record in HubSpot.

**Outputs**

- `archived` (true/false)
- `createdAt` (text)
- `id` (text)
- `properties` (object)
- `updatedAt` (text)

**Example output**

```json
{
  "archived": false,
  "createdAt": "2026-07-14T09:16:40.118Z",
  "id": "4501",
  "properties": {
    "amount": "12000",
    "closedate": "2026-09-30",
    "createdate": "2026-07-14T09:16:40.118Z",
    "dealname": "Avery Consulting - annual licence",
    "dealstage": "qualifiedtobuy",
    "hubspot_owner_id": "555001",
    "pipeline": "default"
  },
  "updatedAt": "2026-07-15T08:07:12.664Z"
}
```

### Link a contact to a company

Connect a HubSpot contact to a company so they show up together in your CRM.

**Inputs**

- Contact ID (`contact_id`, text, required): HubSpot contact ID
- Company ID (`company_id`, text, required): HubSpot company ID

**Outputs**

- `associated` (true/false)
- `company_id` (text)
- `contact_id` (text)

**Example output**

```json
{
  "associated": true,
  "company_id": "9001",
  "contact_id": "701"
}
```

### List HubSpot contacts

List a page of HubSpot contacts for quick review. These come back in record-id order (oldest first) and cannot be filtered; use 'Find contacts created in a date range' to report on recent leads.

**Inputs**

- Maximum contacts (`limit`, number): How many contacts to return (default 10, maximum 100). From 1 to 100. Default: `10`.

**Outputs**

- `count` (number)
- `results` (list)

**Example output**

```json
{
  "count": 2,
  "results": [
    {
      "archived": false,
      "createdAt": "2026-07-14T09:12:33.482Z",
      "id": "701",
      "properties": {
        "company": "Avery Consulting",
        "email": "jordan.avery@example.com",
        "firstname": "Jordan",
        "lastname": "Avery"
      },
      "updatedAt": "2026-07-14T09:12:33.482Z"
    },
    {
      "archived": false,
      "createdAt": "2026-07-14T10:02:51.900Z",
      "id": "702",
      "properties": {
        "company": "Northwind Labs",
        "email": "sam.okafor@example.com",
        "firstname": "Sam",
        "lastname": "Okafor"
      },
      "updatedAt": "2026-07-14T10:02:51.900Z"
    }
  ]
}
```

### List HubSpot deals

List a page of HubSpot deals. These come back in record-id order (oldest first) and cannot be filtered; use 'Find deals created in a date range' to report on recent deals.

**Inputs**

- Maximum deals (`limit`, number): How many deals to return (default 10, maximum 100). From 1 to 100. Default: `10`.

**Outputs**

- `count` (number)
- `results` (list)

**Example output**

```json
{
  "count": 1,
  "results": [
    {
      "archived": false,
      "createdAt": "2026-07-14T09:16:40.118Z",
      "id": "4501",
      "properties": {
        "amount": "12000",
        "dealname": "Avery Consulting - annual licence",
        "dealstage": "appointmentscheduled",
        "pipeline": "default"
      },
      "updatedAt": "2026-07-14T09:16:40.118Z"
    }
  ]
}
```

### Log a HubSpot note

Log a note on the timeline of a contact, company and/or deal. A note attached to no record is valid but will not appear anywhere in HubSpot, so name at least one.

**Inputs**

- Note (`body`, text, required): The note's text.
- Contact ID (`contact_id`, text): Contact to attach the note to.
- Company ID (`company_id`, text): Company to attach the note to.
- Deal ID (`deal_id`, text): Deal to attach the note to.
- Timestamp (`noted_at`, date and time): Where the note sits on the record timeline. Defaults to now.

**Outputs**

- `archived` (true/false)
- `associated_to` (list)
- `createdAt` (text)
- `id` (text)
- `properties` (object)
- `updatedAt` (text)

**Example output**

```json
{
  "archived": false,
  "associated_to": [
    "contacts"
  ],
  "createdAt": "2026-07-14T09:20:00.000Z",
  "id": "88010",
  "properties": {
    "hs_note_body": "Left a voicemail about the renewal.",
    "hs_object_id": "88010",
    "hs_timestamp": "1784025600000"
  },
  "updatedAt": "2026-07-14T09:20:00.000Z"
}
```

### Update a HubSpot company

Change the details of an existing HubSpot company, such as its name, domain, or industry.

**Inputs**

- Company ID (`company_id`, text, required): HubSpot company ID, or the address of the company record in HubSpot.
- Name (`name`, text): Company name
- Domain (`domain`, text): Company website domain
- City (`city`, text): City
- Industry (`industry`, text): Industry
- Phone (`phone`, text): Phone number

**Outputs**

- `archived` (true/false)
- `createdAt` (text)
- `id` (text)
- `properties` (object)
- `updatedAt` (text)

**Example output**

```json
{
  "archived": false,
  "createdAt": "2026-07-14T09:14:02.771Z",
  "id": "9001",
  "properties": {
    "city": "Bath",
    "createdate": "2026-07-14T09:14:02.771Z",
    "domain": "averyconsulting.example.com",
    "industry": "CONSULTING",
    "name": "Avery Consulting Group"
  },
  "updatedAt": "2026-07-15T08:05:44.210Z"
}
```

### Update a HubSpot contact

Change the details of an existing HubSpot contact, such as their name, phone number, or company.

**Inputs**

- Contact ID (`contact_id`, text, required): HubSpot contact ID, or the address of the contact record in HubSpot.
- Email (`email`, text): New email address
- First name (`first_name`, text): First name
- Last name (`last_name`, text): Last name
- Phone (`phone`, text): Phone number
- Company (`company`, text): Company name
- Job title (`job_title`, text): Job title

**Outputs**

- `archived` (true/false)
- `createdAt` (text)
- `id` (text)
- `properties` (object)
- `updatedAt` (text)

**Example output**

```json
{
  "archived": false,
  "createdAt": "2026-07-14T09:12:33.482Z",
  "id": "701",
  "properties": {
    "company": "Avery Consulting",
    "createdate": "2026-07-14T09:12:33.482Z",
    "email": "jordan.avery@example.com",
    "firstname": "Jordan",
    "jobtitle": "Chief Operating Officer",
    "lastname": "Avery",
    "lifecyclestage": "lead",
    "phone": "+15555550199"
  },
  "updatedAt": "2026-07-15T08:03:19.771Z"
}
```

### Update deal stage

Move a HubSpot deal to a different stage of its pipeline.

**Inputs**

- Deal ID (`deal_id`, text, required): HubSpot deal ID, or the address of the deal record in HubSpot.
- Stage (`stage`, text, required): The stage to move the deal to.

**Outputs**

- `archived` (true/false)
- `createdAt` (text)
- `id` (text)
- `properties` (object)
- `updatedAt` (text)

**Example output**

```json
{
  "archived": false,
  "createdAt": "2026-07-14T09:16:40.118Z",
  "id": "4501",
  "properties": {
    "amount": "12000",
    "dealname": "Avery Consulting - annual licence",
    "dealstage": "qualifiedtobuy",
    "pipeline": "default"
  },
  "updatedAt": "2026-07-15T08:07:12.664Z"
}
```
