# HubSpot nodes

HubSpot in the palette is one node per object. Each card stays **Setup required** until HubSpot is connected on [Integrations](https://docs.voicelogica.ai/integrations/hubspot/). The agent **HubSpot** tool (caller ID, live property updates) is that page — this page is the *graph*.

  <ShotPlaceholder
    src="/assets/workflow-nodes/hubspot.png"
    name="wn-hs"
    alt="Manage Contact in HubSpot"
    capture="HubSpot Contact node. 1600×900. Operation visible. Redact emails."
  />

## Why these nodes

A deterministic write after you already know the phone or email. Triggers **HubSpot Contact Created** / **Property Changed** are [Workflow Triggers](https://docs.voicelogica.ai/workflows/) plus the same connection.

## Which node

Catalog titles:

- **Find or upsert the person** — turn on **Manage Contact in HubSpot** (needs Get / Get or create / Create or update / List / Search / Delete. Phone from **Call Parameters**.)
- **The company** — turn on **Manage Company in HubSpot** (needs Name + domain on create.)
- **A deal or a ticket** — turn on **Manage Deal / Manage Ticket** (needs Pipeline + stage on create.)
- **A follow-up for a human** — turn on **Manage Task in HubSpot** (needs Title required. Owner + due date.)
- **A note on the record** — turn on **Create Note in HubSpot** (needs Body required. **Associations** link it.)
- **Log the activity** — turn on **Log Call / Log Email / Schedule Meeting** (needs On a phone trigger, call metadata (direction, duration) is filled from the call — do not set it by hand.)

**Operation** is required on every card. Lookup fields use **Get by** / **Value** (`{{call.phone_number}}`). Create fields flip with the operation.

Ports follow the object (Contact: **Contact saved** / **HubSpot error** / **No wait**).

Galaxy, Shopify, Soft1, WooCommerce, Salesforce, Guesty are the same rule: connect on [Integrations](https://docs.voicelogica.ai/integrations/), then add that provider’s node. They do not get their own pages here.

## First setup — upsert the caller after hang-up

1. [Connect HubSpot](https://docs.voicelogica.ai/integrations/hubspot/).

2. [On Call End](https://docs.voicelogica.ai/workflows/on-call-end/) → **Manage Contact in HubSpot**. Operation **Create or update**. Phone = caller number.

     <ShotPlaceholder
       src="/assets/workflow-nodes/hubspot-filled.png"
       name="hubspot-filled"
       alt="Manage Contact in HubSpot filled"
       capture="Workflow builder → Manage Contact in HubSpot selected. Operation Create or update, phone mapped. 1600×900. Redact numbers/emails/PINs."
     />

3. **Save & go live**, attach, hang up. Open the contact in HubSpot.

## What “broken” looks like

- **Setup required** — Integrations → HubSpot is not connected.
- Empty contact — Value did not match (missing `+`, wrong **Get by**).
- Call log fields you typed are ignored — a phone trigger already owns them.

## Troubleshooting

**Tool vs workflow node?**

The tool is what the *model* may do while talking. The node is what the *graph* always does on that trigger. Use the node for “always file this contact.” Use the tool for “update a property they just confirmed.”

## Next Steps

[Connect HubSpot](https://docs.voicelogica.ai/integrations/hubspot/).  
[On Call End](https://docs.voicelogica.ai/workflows/on-call-end/).  
[Pick a node](https://docs.voicelogica.ai/workflow-nodes/).
