> **Building with AI coding agents?** If you're using an AI coding agent, install the official Scalekit plugin. It gives your agent full awareness of the Scalekit API — reducing hallucinations and enabling faster, more accurate code generation.
>
> - **Claude Code**: `/plugin marketplace add scalekit-inc/claude-code-authstack` then `/plugin install <auth-type>@scalekit-auth-stack`
> - **GitHub Copilot CLI**: `copilot plugin marketplace add scalekit-inc/github-copilot-authstack` then `copilot plugin install <auth-type>@scalekit-auth-stack`
> - **Codex**: run the bash installer, restart, then open Plugin Directory and enable `<auth-type>`
> - **Skills CLI** (Windsurf, Cline, 40+ agents): `npx skills add scalekit-inc/skills --list` then `--skill <skill-name>`
>
> `<auth-type>` / `<skill-name>`: `agentkit`, `full-stack-auth`, `mcp-auth`, `modular-sso`, `modular-scim` — [Full setup guide](https://docs.scalekit.com/dev-kit/build-with-ai/)

---

# HubSpot

**Authentication:** OAuth 2.0
**Categories:** Crm, Sales
## What you can do

Connect this agent connector to let your agent:

- **Manage contacts** — create, update, list, and search contacts; batch-create up to 100 at once
- **Manage companies** — create and update company records with industry, location, and revenue data
- **Manage deals** — create deals, move them through pipeline stages, and search by any property
- **Manage tickets** — create and update support tickets with priority and pipeline stage
- **Log engagements** — record calls, meetings, notes, and emails against any CRM record
- **Manage tasks** — create tasks with due dates and priorities, and mark them complete
- **Work with products, line items, and quotes** — build out deal proposals end-to-end
- **Manage custom objects** — create, update, and search records for any custom schema
- **Access marketing data** — list forms, retrieve submissions, and inspect campaigns and email events
- **Search and paginate** — full-text search and filter across all CRM object types
- **Manage associations** — link any two CRM objects (e.g. associate a contact with a ticket)
- **List owners and properties** — look up user IDs and discover all available fields per object type

## Authentication

This connector uses **OAuth 2.0**. Scalekit acts as the OAuth client: it redirects your user to HubSpot, obtains an access token, and automatically refreshes it before it expires. Your agent code never handles tokens directly — you only pass a `connectionName` and a user `identifier`.

You supply your HubSpot **Connected App** credentials (Client ID + Secret) once per environment in the Scalekit dashboard.

Before calling this connector from your code, create the HubSpot connection in **AgentKit** > **Connections** and copy the exact **Connection name** from that connection into your code. The value in code must match the dashboard exactly.

## Set up the connector

Register your Scalekit environment with the HubSpot connector so Scalekit handles the authentication flow and token lifecycle for you. The connection name you create will be used to identify and invoke the connection programmatically. Then complete the configuration in your application as follows:

1. ### Set up auth redirects

    - In [Scalekit dashboard](https://app.scalekit.com), go to **AgentKit** > **Connections** > **Create Connection**. Find **HubSpot** and click **Create**. Copy the redirect URI. It looks like `https:///sso/v1/oauth//callback`.

      > Image: Copy redirect URI from Scalekit dashboard

    - Log in to your [HubSpot developer dashboard](https://developers.hubspot.com/), click **Manage apps**, click **Create app**, and select **Public app**. Do not select **Private app**; Private Apps use static API tokens and do not support OAuth redirect flows, so they do not show the Redirect URL field Scalekit needs. If you already have a HubSpot Public App, open that app instead.

    - Go to **Auth** > **Auth settings** > **Redirect URL**, paste the redirect URI from Scalekit, and click **Save**.

      > Image: Adding redirect URL to HubSpot

    - Under **Auth** > **Auth settings** > **Scopes**, select the required scopes for your application. The scopes you select here must match exactly what you configure in Scalekit. For a read-only CRM enrichment flow that looks up contacts, companies, and deals, use:

      ```text
      crm.objects.contacts.read
      crm.objects.companies.read
      crm.objects.deals.read
      ```

2. ### Get client credentials

    - In your HubSpot app, go to **Auth** > **Auth settings**.

    - Copy your **Client ID** and **Client Secret**.

3. ### Add credentials in Scalekit

    - In [Scalekit dashboard](https://app.scalekit.com), go to **AgentKit** > **Connections** and open the connection you created.

    - Enter your credentials:
      - **Client ID** (from your HubSpot app)
      - **Client Secret** (from your HubSpot app)
      - **Permissions** (OAuth scope strings such as `crm.objects.contacts.read`, entered exactly as configured in the HubSpot app)

      > Image: Add credentials in Scalekit dashboard

    - Click **Save**.

## Code examples

Connect a user's HubSpot account and make API calls on their behalf — Scalekit handles OAuth and token management automatically.

## Proxy API calls

Make authenticated requests to any HubSpot API endpoint through the Scalekit proxy.

  ### Node.js

```typescript

const connectionName = 'hubspot'; // your connection name from Scalekit dashboard
const identifier = 'user_123';   // your unique user identifier

// Get credentials from app.scalekit.com → Developers → Settings → API Credentials
const scalekit = new ScalekitClient(
  process.env.SCALEKIT_ENV_URL,
  process.env.SCALEKIT_CLIENT_ID,
  process.env.SCALEKIT_CLIENT_SECRET
);
const actions = scalekit.actions;

// Authenticate the user (first time only)
const { link } = await actions.getAuthorizationLink({
  connectionName,
  identifier,
});
console.log('Authorize HubSpot:', link);
process.stdout.write('Press Enter after authorizing...');
await new Promise(r => process.stdin.once('data', r));

// Make a request through the Scalekit proxy
const result = await actions.request({
  connectionName,
  identifier,
  path: '/crm/v3/owners',
  method: 'GET',
});
console.log(result);
```

  ### Python

```python

from dotenv import load_dotenv
load_dotenv()

connection_name = "hubspot"  # your connection name from Scalekit dashboard
identifier = "user_123"      # your unique user identifier

# Get credentials from app.scalekit.com → Developers → Settings → API Credentials
scalekit_client = scalekit.client.ScalekitClient(
    client_id=os.getenv("SCALEKIT_CLIENT_ID"),
    client_secret=os.getenv("SCALEKIT_CLIENT_SECRET"),
    env_url=os.getenv("SCALEKIT_ENV_URL"),
)
actions = scalekit_client.actions

# Authenticate the user (first time only)
link_response = actions.get_authorization_link(
    connection_name=connection_name,
    identifier=identifier
)
print("Authorize HubSpot:", link_response.link)
input("Press Enter after authorizing...")

# Make a request through the Scalekit proxy
result = actions.request(
    connection_name=connection_name,
    identifier=identifier,
    path="/crm/v3/owners",
    method="GET"
)
print(result)
```

## Execute tools

Use `executeTool` (Node.js) or `execute_tool` (Python) to call any HubSpot tool by name with typed parameters.

### Create a contact

  ### Node.js

```typescript
const contact = await actions.executeTool({
  connectionName,
  identifier,
  toolName: 'hubspot_contact_create',
  parameters: {
    email: 'jane.smith@acme.com',
    firstname: 'Jane',
    lastname: 'Smith',
    jobtitle: 'VP of Engineering',
    company: 'Acme Corp',
    lifecyclestage: 'lead',
  },
});
console.log('Created contact ID:', contact.id);
```

  ### Python

```python
contact = actions.execute_tool(
    connection_name=connection_name,
    identifier=identifier,
    tool_name="hubspot_contact_create",
    parameters={
        "email": "jane.smith@acme.com",
        "firstname": "Jane",
        "lastname": "Smith",
        "jobtitle": "VP of Engineering",
        "company": "Acme Corp",
        "lifecyclestage": "lead",
    },
)
print("Created contact ID:", contact["id"])
```

### Search deals

  ### Node.js

```typescript
const deals = await actions.executeTool({
  connectionName,
  identifier,
  toolName: 'hubspot_deals_search',
  parameters: {
    query: 'enterprise',
    filterGroups: JSON.stringify([{
      filters: [{ propertyName: 'dealstage', operator: 'EQ', value: 'qualifiedtobuy' }]
    }]),
    properties: 'dealname,amount,dealstage,closedate',
    limit: 10,
  },
});
console.log('Found deals:', deals.results);
```

  ### Python

```python

deals = actions.execute_tool(
    connection_name=connection_name,
    identifier=identifier,
    tool_name="hubspot_deals_search",
    parameters={
        "query": "enterprise",
        "filterGroups": json.dumps([{
            "filters": [{"propertyName": "dealstage", "operator": "EQ", "value": "qualifiedtobuy"}]
        }]),
        "properties": "dealname,amount,dealstage,closedate",
        "limit": 10,
    },
)
print("Found deals:", deals["results"])
```

### Log a call

  ### Node.js

```typescript
const call = await actions.executeTool({
  connectionName,
  identifier,
  toolName: 'hubspot_call_log',
  parameters: {
    hs_call_title: 'Q4 Renewal Discussion',
    hs_timestamp: new Date().toISOString(),
    hs_call_body: 'Discussed renewal terms. Customer is interested in the enterprise plan.',
    hs_call_direction: 'OUTBOUND',
    hs_call_duration: 900000, // 15 minutes in ms
    hs_call_status: 'COMPLETED',
  },
});
console.log('Logged call ID:', call.id);
```

  ### Python

```python
from datetime import datetime, timezone

call = actions.execute_tool(
    connection_name=connection_name,
    identifier=identifier,
    tool_name="hubspot_call_log",
    parameters={
        "hs_call_title": "Q4 Renewal Discussion",
        "hs_timestamp": datetime.now(timezone.utc).isoformat(),
        "hs_call_body": "Discussed renewal terms. Customer is interested in the enterprise plan.",
        "hs_call_direction": "OUTBOUND",
        "hs_call_duration": 900000,  # 15 minutes in ms
        "hs_call_status": "COMPLETED",
    },
)
print("Logged call ID:", call["id"])
```

### Create and associate a ticket

  ### Node.js

```typescript
// Create the ticket
const ticket = await actions.executeTool({
  connectionName,
  identifier,
  toolName: 'hubspot_ticket_create',
  parameters: {
    subject: 'Cannot export data to CSV',
    hs_pipeline_stage: '1', // "New" stage
    content: 'Customer reports that the CSV export button is unresponsive on the Reports page.',
    hs_ticket_priority: 'HIGH',
  },
});

// Associate with a contact
await actions.executeTool({
  connectionName,
  identifier,
  toolName: 'hubspot_association_create',
  parameters: {
    from_object_type: 'tickets',
    from_object_id: ticket.id,
    to_object_type: 'contacts',
    to_object_id: '12345',
  },
});
console.log('Ticket created and associated:', ticket.id);
```

  ### Python

```python
# Create the ticket
ticket = actions.execute_tool(
    connection_name=connection_name,
    identifier=identifier,
    tool_name="hubspot_ticket_create",
    parameters={
        "subject": "Cannot export data to CSV",
        "hs_pipeline_stage": "1",  # "New" stage
        "content": "Customer reports that the CSV export button is unresponsive on the Reports page.",
        "hs_ticket_priority": "HIGH",
    },
)

# Associate with a contact
actions.execute_tool(
    connection_name=connection_name,
    identifier=identifier,
    tool_name="hubspot_association_create",
    parameters={
        "from_object_type": "tickets",
        "from_object_id": ticket["id"],
        "to_object_type": "contacts",
        "to_object_id": "12345",
    },
)
print("Ticket created and associated:", ticket["id"])
```

## Tool list

Use the exact tool names from the **Tool list** below when you call `execute_tool`. If you're not sure which name to use, list the tools available for the current user first.

## Tool list

### `hubspot_company_create`

Create a new company in HubSpot CRM. Requires a company name as the unique identifier. Supports additional properties like domain, industry, phone, location, and revenue information.

Parameters:

- `name` (`string`, required): Company name (required, serves as primary identifier).
- `domain` (`string`, optional): Company website domain (e.g. `example.com`).
- `phone` (`string`, optional): Primary phone number for the company.
- `industry` (`string`, optional): Industry type of the company.
- `description` (`string`, optional): Company description or overview.
- `city` (`string`, optional): City where the company is located.
- `state` (`string`, optional): State or region where the company is located.
- `country` (`string`, optional): Country where the company is located.
- `annualrevenue` (`number`, optional): Annual revenue of the company in dollars.
- `numberofemployees` (`number`, optional): Number of employees at the company.

### `hubspot_company_get`

Retrieve details of a specific company from HubSpot by company ID. Returns company properties and associated data.

Parameters:

- `company_id` (`string`, required): The unique identifier of the company in HubSpot.
- `properties` (`string`, optional): Comma-separated list of properties to include in the response (e.g. `name,domain,industry,phone`).

### `hubspot_company_update`

Update an existing company in HubSpot CRM by company ID. Provide any fields to update.

Parameters:

- `company_id` (`string`, required): The unique identifier of the company in HubSpot.
- `name` (`string`, optional): Updated name of the company.
- `domain` (`string`, optional): Updated company website domain.
- `phone` (`string`, optional): Updated primary phone number.
- `city` (`string`, optional): Updated city.
- `state` (`string`, optional): Updated state or region.
- `country` (`string`, optional): Updated country.
- `industry` (`string`, optional): Updated industry.
- `description` (`string`, optional): Updated company description.
- `website` (`string`, optional): Full URL of the company website.
- `annualrevenue` (`number`, optional): Updated annual revenue.
- `numberofemployees` (`number`, optional): Updated number of employees.

### `hubspot_companies_search`

Search HubSpot companies using full-text search and pagination. Returns matching companies with specified properties.

Parameters:

- `query` (`string`, optional): Search term for full-text search across company properties.
- `filterGroups` (`string`, optional): JSON string containing filter groups (e.g. `[{"filters":[{"propertyName":"industry","operator":"EQ","value":"Technology"}]}]`).
- `properties` (`string`, optional): Comma-separated list of properties to include.
- `limit` (`number`, optional): Number of results per page (max 100).
- `after` (`string`, optional): Pagination offset from previous response.

### `hubspot_contact_create`

Create a new contact in HubSpot CRM. Requires an email address as the unique identifier. Supports additional properties like name, company, phone, and lifecycle stage.

Parameters:

- `email` (`string`, required): Primary email address (required, must be unique in HubSpot).
- `firstname` (`string`, optional): Contact's first name.
- `lastname` (`string`, optional): Contact's last name.
- `phone` (`string`, optional): Contact's primary phone number.
- `company` (`string`, optional): Company name where the contact works.
- `jobtitle` (`string`, optional): Contact's job title or role.
- `website` (`string`, optional): Personal or company website URL.
- `lifecyclestage` (`string`, optional): Lifecycle stage: `subscriber`, `lead`, `marketingqualifiedlead`, `salesqualifiedlead`, `opportunity`, `customer`, `evangelist`, or `other`.
- `hs_lead_status` (`string`, optional): Lead status: `NEW`, `OPEN`, `IN_PROGRESS`, `OPEN_DEAL`, `UNQUALIFIED`, `ATTEMPTED_TO_CONTACT`, `CONNECTED`, or `BAD_TIMING`.

### `hubspot_contact_get`

Retrieve details of a specific contact from HubSpot by contact ID. Returns contact properties and associated data.

Parameters:

- `contact_id` (`string`, required): The unique identifier of the contact in HubSpot.
- `properties` (`string`, optional): Comma-separated list of properties to include (e.g. `firstname,lastname,email,company`).

### `hubspot_contact_update`

Update an existing contact in HubSpot CRM by contact ID. Provide any fields to update.

Parameters:

- `contact_id` (`string`, required): The unique identifier of the contact in HubSpot.
- `email` (`string`, optional): Updated email address (must be unique in HubSpot).
- `firstname` (`string`, optional): Updated first name.
- `lastname` (`string`, optional): Updated last name.
- `phone` (`string`, optional): Updated phone number.
- `company` (`string`, optional): Updated company name.
- `jobtitle` (`string`, optional): Updated job title.
- `website` (`string`, optional): Updated website URL.
- `lifecyclestage` (`string`, optional): Updated lifecycle stage (e.g. `lead`, `customer`).
- `hs_lead_status` (`string`, optional): Updated lead status (e.g. `IN_PROGRESS`, `CONNECTED`).

### `hubspot_contacts_list`

Retrieve a list of contacts from HubSpot with filtering and pagination. Returns contact properties and supports cursor-based navigation.

Parameters:

- `properties` (`string`, optional): Comma-separated list of properties to return.
- `limit` (`number`, optional): Number of contacts to return per page (max 100).
- `after` (`string`, optional): Cursor value from previous response to get next page.
- `archived` (`boolean`, optional): Include archived contacts (default: false).

### `hubspot_contacts_search`

Search HubSpot contacts using full-text search and pagination. Returns matching contacts with specified properties.

Parameters:

- `query` (`string`, optional): Search term for full-text search across contact properties.
- `filterGroups` (`string`, optional): JSON string containing filter groups (e.g. `[{"filters":[{"propertyName":"lifecyclestage","operator":"EQ","value":"customer"}]}]`).
- `properties` (`string`, optional): Comma-separated list of properties to include.
- `limit` (`number`, optional): Number of results per page (max 100).
- `after` (`string`, optional): Pagination offset from previous response.

### `hubspot_contacts_batch_create`

Create multiple contacts in HubSpot CRM in a single API call. Each contact requires an email address. Supports up to 100 contacts per request.

Parameters:

- `contacts` (`array`, required): Array of contact objects to create. Each object supports: `email` (required), `firstname`, `lastname`, `phone`, `company`, `jobtitle`, `website`, `lifecyclestage`. Max 100 contacts.

### `hubspot_contact_list_membership_get`

Retrieve all HubSpot lists that a specific contact belongs to, identified by contact ID.

Parameters:

- `contact_id` (`string`, required): The unique identifier of the contact in HubSpot.

### `hubspot_contact_email_events_get`

Retrieve marketing email events for a specific contact by their email address. Returns open, click, bounce, and unsubscribe events.

Parameters:

- `email` (`string`, required): The contact's email address.
- `eventType` (`string`, optional): Filter by event type: `OPEN`, `CLICK`, `BOUNCE`, or `UNSUBSCRIBE`.
- `limit` (`number`, optional): Number of events to return per page (default: 100).

### `hubspot_deal_create`

Create a new deal in HubSpot CRM. Requires dealname and dealstage. Supports additional properties like amount, pipeline, close date, and deal type.

Parameters:

- `dealname` (`string`, required): Name of the deal.
- `dealstage` (`string`, required): Current stage of the deal (e.g. `qualifiedtobuy`, `closedwon`).
- `amount` (`number`, optional): Monetary value of the deal.
- `closedate` (`string`, optional): Expected close date in `YYYY-MM-DD` format.
- `pipeline` (`string`, optional): The pipeline this deal belongs to (e.g. `default`).
- `dealtype` (`string`, optional): Classification of the deal type (e.g. `newbusiness`, `existingbusiness`).
- `description` (`string`, optional): Additional details about the deal.
- `hs_priority` (`string`, optional): Deal priority: `high`, `medium`, or `low`.

### `hubspot_deal_get`

Retrieve details of a specific deal from HubSpot by deal ID. Returns deal properties and associated data.

Parameters:

- `deal_id` (`string`, required): The unique identifier of the deal in HubSpot.
- `properties` (`string`, optional): Comma-separated list of properties to return (e.g. `dealname,amount,dealstage,closedate`).
- `associations` (`string`, optional): Comma-separated object types to retrieve associations for (e.g. `contacts,companies,line_items`).

### `hubspot_deal_update`

Update an existing deal in HubSpot CRM by deal ID. Provide any fields to update.

Parameters:

- `deal_id` (`string`, required): The unique identifier of the deal in HubSpot.
- `dealname` (`string`, optional): Updated name of the deal.
- `dealstage` (`string`, optional): Updated pipeline stage (e.g. `closedwon`).
- `amount` (`number`, optional): Updated monetary value of the deal.
- `closedate` (`string`, optional): Updated expected close date in `YYYY-MM-DD` format.
- `pipeline` (`string`, optional): Updated pipeline.
- `dealtype` (`string`, optional): Updated deal type.
- `description` (`string`, optional): Updated deal description.
- `hs_priority` (`string`, optional): Updated priority: `high`, `medium`, or `low`.

### `hubspot_deals_search`

Search HubSpot deals using full-text search and pagination. Returns matching deals with specified properties.

Parameters:

- `query` (`string`, optional): Search term for full-text search across deal properties.
- `filterGroups` (`string`, optional): JSON string containing filter groups (e.g. `[{"filters":[{"propertyName":"dealstage","operator":"EQ","value":"closedwon"}]}]`).
- `properties` (`string`, optional): Comma-separated list of properties to include.
- `limit` (`number`, optional): Number of results per page (max 100).
- `after` (`string`, optional): Pagination offset from previous response.

### `hubspot_deal_pipelines_list`

Retrieve all pipelines for a HubSpot CRM object type (e.g. `deals` or `tickets`), including pipeline stages. Use this to get valid pipeline IDs and stage IDs for creating or updating deals and tickets.

Parameters:

- `archived` (`boolean`, optional): Set to `true` to include archived pipelines.

### `hubspot_deal_line_items_get`

Retrieve all line items associated with a specific HubSpot deal.

Parameters:

- `deal_id` (`string`, required): The HubSpot ID of the deal.

### `hubspot_ticket_create`

Create a new support ticket in HubSpot. Use `hubspot_deal_pipelines_list` with `object_type: tickets` to find valid pipeline and stage IDs.

Parameters:

- `subject` (`string`, required): A short descriptive title for the support ticket.
- `hs_pipeline_stage` (`string`, required): Pipeline stage ID for the ticket (e.g. `1` for New).
- `content` (`string`, optional): Detailed description of the support issue.
- `hs_pipeline` (`string`, optional): Pipeline ID (use `'0'` for the default Support Pipeline).
- `hs_ticket_priority` (`string`, optional): Priority level: `HIGH`, `MEDIUM`, or `LOW`.

### `hubspot_ticket_get`

Retrieve details of a specific HubSpot support ticket by ticket ID.

Parameters:

- `ticket_id` (`string`, required): The unique identifier of the ticket in HubSpot.
- `properties` (`string`, optional): Comma-separated list of properties to return.

### `hubspot_ticket_update`

Update an existing HubSpot support ticket by ticket ID. Provide any fields to update.

Parameters:

- `ticket_id` (`string`, required): The unique identifier of the ticket in HubSpot.
- `subject` (`string`, optional): Updated subject of the ticket.
- `content` (`string`, optional): Updated description of the support issue.
- `hs_pipeline_stage` (`string`, optional): Updated pipeline stage ID.
- `hs_pipeline` (`string`, optional): Updated pipeline ID.
- `hs_ticket_priority` (`string`, optional): Updated priority: `HIGH`, `MEDIUM`, or `LOW`.

### `hubspot_tickets_search`

Search HubSpot support tickets using filters and full-text search. Returns matching tickets with their properties.

Parameters:

- `query` (`string`, optional): Full-text search term across ticket subjects and content.
- `filterGroups` (`string`, optional): JSON string containing filter groups (e.g. `[{"filters":[{"propertyName":"hs_ticket_priority","operator":"EQ","value":"HIGH"}]}]`).
- `properties` (`string`, optional): Comma-separated list of properties to include.
- `limit` (`number`, optional): Number of results per page (max 100).
- `after` (`string`, optional): Pagination offset from previous response.

### `hubspot_task_create`

Create a new task in HubSpot CRM. Tasks can be assigned to owners and associated with contacts, companies, or deals.

Parameters:

- `hs_task_subject` (`string`, required): A descriptive subject for the task.
- `hs_timestamp` (`string`, required): Due date and time for the task in ISO 8601 format (e.g. `2024-01-20T10:00:00Z`).
- `hs_task_status` (`string`, optional): Status: `NOT_STARTED`, `IN_PROGRESS`, `COMPLETED`, `DEFERRED`, or `WAITING`.
- `hs_task_priority` (`string`, optional): Priority: `HIGH`, `MEDIUM`, or `LOW`.
- `hs_task_type` (`string`, optional): Type of task: `EMAIL`, `CALL`, or `TODO`.
- `hs_task_body` (`string`, optional): Additional notes or context for the task.

### `hubspot_task_complete`

Mark a HubSpot task as completed or update its status. Use the task ID from `hubspot_tasks_search` or `hubspot_task_create`.

Parameters:

- `task_id` (`string`, required): The unique identifier of the task in HubSpot.
- `hs_task_status` (`string`, optional): New status: `NOT_STARTED`, `IN_PROGRESS`, `COMPLETED`, `DEFERRED`, or `WAITING`.
- `hs_task_body` (`string`, optional): Updated notes when completing the task.

### `hubspot_tasks_search`

Search HubSpot tasks using filters and full-text search. Returns tasks with their subject, status, due date, and priority.

Parameters:

- `query` (`string`, optional): Full-text search term across task subjects and notes.
- `filterGroups` (`string`, optional): JSON string containing filter groups (e.g. `[{"filters":[{"propertyName":"hs_task_status","operator":"NEQ","value":"COMPLETED"}]}]`).
- `properties` (`string`, optional): Comma-separated list of properties to include.
- `limit` (`number`, optional): Number of results per page (max 100).
- `after` (`string`, optional): Pagination offset from previous response.

### `hubspot_meeting_log`

Log a meeting engagement in HubSpot CRM. Records details of a meeting including title, start/end time, description, and outcome.

Parameters:

- `hs_meeting_title` (`string`, required): A descriptive title for the meeting.
- `hs_meeting_start_time` (`string`, required): Start time of the meeting in ISO 8601 format (e.g. `2024-01-15T14:00:00Z`).
- `hs_meeting_end_time` (`string`, required): End time of the meeting in ISO 8601 format.
- `hs_timestamp` (`string`, required): Timestamp when the meeting was logged in ISO 8601 format.
- `hs_meeting_body` (`string`, optional): Notes, agenda, or description of the meeting.
- `hs_meeting_outcome` (`string`, optional): Outcome of the meeting: `SCHEDULED`, `COMPLETED`, `NO_SHOW`, or `CANCELED`.

### `hubspot_meetings_search`

Search HubSpot meeting engagements using filters and full-text search. Returns logged meetings with their properties.

Parameters:

- `query` (`string`, optional): Full-text search term across meeting titles and descriptions.
- `filterGroups` (`string`, optional): JSON string containing filter groups (e.g. `[{"filters":[{"propertyName":"hs_meeting_outcome","operator":"EQ","value":"COMPLETED"}]}]`).
- `properties` (`string`, optional): Comma-separated list of properties to include.
- `limit` (`number`, optional): Number of results per page (max 100).
- `after` (`string`, optional): Pagination offset from previous response.

### `hubspot_call_log`

Log a call engagement in HubSpot CRM. Records details of a phone call including title, duration, notes, status, and direction.

Parameters:

- `hs_call_title` (`string`, required): A descriptive title for the call.
- `hs_timestamp` (`string`, required): Date and time when the call took place in ISO 8601 format.
- `hs_call_body` (`string`, optional): Notes or transcript from the call.
- `hs_call_direction` (`string`, optional): Direction of the call: `INBOUND` or `OUTBOUND`.
- `hs_call_duration` (`number`, optional): Duration of the call in milliseconds (e.g. `300000` = 5 minutes).
- `hs_call_status` (`string`, optional): Outcome status: `COMPLETED`, `BUSY`, `FAILED`, `NO_ANSWER`, `CANCELED`, `QUEUED`, or `IN_PROGRESS`.

### `hubspot_calls_search`

Search HubSpot call engagements using filters and full-text search. Returns logged calls with their properties.

Parameters:

- `query` (`string`, optional): Full-text search term across call titles, notes, and other text fields.
- `filterGroups` (`string`, optional): JSON string containing filter groups (e.g. `[{"filters":[{"propertyName":"hs_call_status","operator":"EQ","value":"COMPLETED"}]}]`).
- `properties` (`string`, optional): Comma-separated list of properties to include.
- `limit` (`number`, optional): Number of results per page (max 100).
- `after` (`string`, optional): Pagination offset from previous response.

### `hubspot_note_create`

Create a note in HubSpot CRM to log interactions, meeting summaries, or important information. Notes can be associated with contacts, companies, or deals.

Parameters:

- `hs_note_body` (`string`, required): Content of the note. Supports HTML.
- `hs_timestamp` (`string`, required): Timestamp for the note in ISO 8601 format (e.g. `2024-01-15T10:30:00Z`).

### `hubspot_note_log`

Log a note engagement in HubSpot CRM. Creates a text note that can be associated with contacts, companies, or deals.

Parameters:

- `hs_note_body` (`string`, required): Content of the note. Supports HTML.
- `hs_timestamp` (`string`, required): Timestamp for the note in ISO 8601 format (e.g. `2024-01-15T10:30:00Z`).

### `hubspot_notes_search`

Search HubSpot note engagements using filters and full-text search. Returns logged notes with their content and timestamps.

Parameters:

- `query` (`string`, optional): Full-text search term across note body text.
- `filterGroups` (`string`, optional): JSON string containing filter groups for advanced filtering.
- `properties` (`string`, optional): Comma-separated list of properties to include.
- `limit` (`number`, optional): Number of results per page (max 100).
- `after` (`string`, optional): Pagination offset from previous response.

### `hubspot_emails_search`

Search HubSpot email engagements (logged emails) using filters and full-text search. Returns logged email records with their properties.

Parameters:

- `query` (`string`, optional): Full-text search term across email subject lines and body text.
- `filterGroups` (`string`, optional): JSON string containing filter groups for advanced filtering.
- `properties` (`string`, optional): Comma-separated list of properties to include (e.g. `hs_email_subject,hs_email_text,hs_timestamp`).
- `limit` (`number`, optional): Number of results per page (max 100).
- `after` (`string`, optional): Pagination offset from previous response.

### `hubspot_engagements_list`

List engagements (notes, tasks, calls, emails, meetings) from HubSpot CRM. Supports filtering by engagement type and pagination.

Parameters:

- `engagement_type` (`string`, required): Type of engagement to list: `notes`, `tasks`, `calls`, `emails`, or `meetings`.
- `limit` (`number`, optional): Number of engagements to return per page (max 100).
- `after` (`string`, optional): Cursor from previous response to fetch next page.

### `hubspot_owners_list`

List all HubSpot owners (users). Use this to find owner IDs for assigning contacts, deals, tickets, and other CRM records.

Parameters:

- `email` (`string`, optional): Filter owners by email address.
- `limit` (`number`, optional): Number of owners to return per page (max 500).
- `after` (`string`, optional): Pagination cursor from previous response.

### `hubspot_association_create`

Create a default association between two HubSpot CRM objects. For example, associate a contact with a deal, or a company with a ticket.

Parameters:

- `from_object_type` (`string`, required): Type of the source object (e.g. `contacts`, `companies`, `deals`, `tickets`).
- `from_object_id` (`string`, required): HubSpot ID of the source record.
- `to_object_type` (`string`, required): Type of the target object (e.g. `contacts`, `deals`).
- `to_object_id` (`string`, required): HubSpot ID of the target record.

### `hubspot_campaigns_list`

List all HubSpot marketing campaigns with pagination support.

Parameters:

- `limit` (`number`, optional): Number of campaigns to return per page (default: 20).
- `after` (`string`, optional): Pagination cursor from previous response.

### `hubspot_campaign_get`

Retrieve details of a specific HubSpot marketing campaign by campaign ID.

Parameters:

- `campaign_id` (`string`, required): The unique identifier of the campaign in HubSpot.

### `hubspot_forms_list`

List all HubSpot marketing forms. Returns form IDs, names, and field definitions.

Parameters:

- `formTypes` (`string`, optional): Comma-separated list of form types to filter by (e.g. `hubspot`, `captured`, `flow`).
- `limit` (`number`, optional): Number of forms to return per page (max 50).
- `after` (`string`, optional): Pagination cursor from previous response.

### `hubspot_form_submissions_get`

Retrieve all submissions for a specific HubSpot form. Returns submitted field values and submission timestamps.

Parameters:

- `form_id` (`string`, required): The unique identifier of the HubSpot form. Get it from `hubspot_forms_list`.
- `limit` (`number`, optional): Number of submissions to return per page (default: 20).
- `after` (`string`, optional): Pagination offset token for the next page.

### `hubspot_product_create`

Create a new product in the HubSpot product library.

Parameters:

- `name` (`string`, required): The product name as it will appear in HubSpot.
- `description` (`string`, optional): A description of the product or service.
- `hs_sku` (`string`, optional): Unique product SKU or identifier.
- `price` (`string`, optional): Unit price of the product (e.g. `999.00`).

### `hubspot_products_list`

Retrieve a list of products from the HubSpot product library.

Parameters:

- `properties` (`string`, optional): Comma-separated list of product properties to include (e.g. `name,price,description`).
- `limit` (`number`, optional): Number of products to return per page (max 100).
- `after` (`string`, optional): Pagination cursor from previous response.

### `hubspot_line_item_create`

Create a new line item in HubSpot. Line items represent individual products or services in a deal.

Parameters:

- `name` (`string`, required): The name of the product or service for this line item.
- `hs_product_id` (`string`, optional): Link this line item to a product in the HubSpot product library.
- `price` (`string`, optional): The price per unit for this line item.
- `quantity` (`string`, optional): Number of units for this line item.
- `deal_id` (`string`, optional): The HubSpot deal ID to associate this line item with.

### `hubspot_quote_create`

Create a new quote in HubSpot for a deal.

Parameters:

- `hs_title` (`string`, required): The display title for the quote.
- `hs_language` (`string`, required): Language of the quote as an ISO 639-1 code (e.g. `en`, `de`, `fr`). Required by HubSpot.
- `deal_id` (`string`, optional): The HubSpot deal ID to link this quote to.
- `hs_expiration_date` (`string`, optional): Expiration date of the quote in `YYYY-MM-DD` format.
- `hs_status` (`string`, optional): Status of the quote: `DRAFT`, `PENDING_APPROVAL`, `APPROVED`, or `REJECTED`.

### `hubspot_quote_get`

Retrieve a specific HubSpot quote by its ID.

Parameters:

- `quote_id` (`string`, required): The HubSpot ID of the quote.
- `properties` (`string`, optional): Comma-separated list of quote properties to include (e.g. `hs_title,hs_status,hs_expiration_date`).

### `hubspot_schemas_list`

List all custom object schemas defined in HubSpot. Returns object type IDs, labels, and property definitions needed to work with custom objects.

Parameters:

- `archived` (`boolean`, optional): Set to `true` to include archived custom object schemas.

### `hubspot_custom_object_record_create`

Create a new record for a HubSpot custom object type.

Parameters:

- `object_type_id` (`string`, required): The custom object type ID (e.g. `2-1234567`). Get it from `hubspot_schemas_list`.
- `properties` (`object`, required): Key-value pairs for the new record (e.g. `{"name": "Example Record"}`). Use `hubspot_schemas_list` to discover valid property names.

### `hubspot_custom_object_record_get`

Retrieve a specific record of a HubSpot custom object by object type ID and record ID.

Parameters:

- `object_type_id` (`string`, required): The custom object type ID (e.g. `2-1234567`).
- `record_id` (`string`, required): The HubSpot ID of the specific record.
- `properties` (`string`, optional): Comma-separated list of properties to return.

### `hubspot_custom_object_record_update`

Update an existing record of a HubSpot custom object by object type ID and record ID. Use hubspot_schemas_list to discover available object type IDs and their properties.

Parameters:

- `object_type_id` (`string`, required): The custom object type ID (e.g. `2-1234567`). Get it from `hubspot_schemas_list`.
- `record_id` (`string`, required): The HubSpot ID of the record to update. Get it from `hubspot_custom_object_records_search`.
- `properties` (`object`, required): JSON object of property names and updated values (e.g. `{"name": "Updated Name", "status": "active"}`). Use `hubspot_schemas_list` to discover valid property names.

### `hubspot_custom_object_records_search`

Search records of a HubSpot custom object by object type ID. Use `hubspot_schemas_list` to find the objectTypeId for your custom object.

Parameters:

- `object_type_id` (`string`, required): The custom object type ID (e.g. `2-1234567`).
- `query` (`string`, optional): Full-text search term across record properties.
- `filterGroups` (`string`, optional): JSON string containing filter groups for advanced filtering.
- `properties` (`string`, optional): Comma-separated list of properties to include.
- `limit` (`number`, optional): Number of results per page (max 100).
- `after` (`string`, optional): Pagination offset from previous response.

### `hubspot_object_properties_list`

Retrieve all properties defined for a HubSpot CRM object type (contacts, companies, deals, tickets, etc.).

Parameters:

- `object_type` (`string`, required): CRM object type to list properties for (e.g. `contacts`, `companies`, `deals`, `tickets`, `products`, or a custom object type ID).
- `archived` (`boolean`, optional): Set to `true` to include archived properties.


---

## More Scalekit documentation

| Resource | What it contains | When to use it |
|----------|-----------------|----------------|
| [/llms.txt](/llms.txt) | Structured index with routing hints per product area | Start here — find which documentation set covers your topic before loading full content |
| [/llms-full.txt](/llms-full.txt) | Complete documentation for all Scalekit products in one file | Use when you need exhaustive context across multiple products or when the topic spans several areas |
| [sitemap-0.xml](https://docs.scalekit.com/sitemap-0.xml) | Full URL list of every documentation page | Use to discover specific page URLs you can fetch for targeted, page-level answers |
