Skip to main content

Overview

The HubSpot tools integrate with the HubSpot CRM API to manage contacts from your workflows. Both tools key on the email address, so you can reconcile records without going through the Search API and its rate limit.

Key Features

  • HUBSPOT_UPSERT_CONTACT
    • Create a contact, or update the existing one with the same email address. Supports custom properties.
  • HUBSPOT_GET_CONTACT
    • Fetch a contact by object ID or by email address. Returns found: false instead of failing when no contact matches.

Authentication

For setup instructions, see the HubSpot credentials page.

Example: Look Up a Contact, Then Create or Update It

Inputs

HUBSPOT_UPSERT_CONTACT

A named input left blank is skipped, not sent — HubSpot reads an empty string as “clear this property”, so clearing has to be asked for explicitly through properties ({"firstname": null}). Named inputs win over the same key inside properties. Setting properties.email to something other than the email input is rejected. A difference in letter case alone is treated as the same address. Returns result.id, result.created, result.properties, and the raw result.contact.

HUBSPOT_GET_CONTACT

Returns result.found, result.id, result.properties, result.associations, and the raw result.contact.

Notes

  • Not found is not an error: HUBSPOT_GET_CONTACT returns result.found = false on a missing contact, so “look up, and create it if missing” can be an ordinary condition step.
  • Concurrent writes are last-write-wins: HubSpot’s CRM API has no optimistic locking, so overlapping updates resolve per property. Do not use HUBSPOT_UPSERT_CONTACT for read-modify-write accumulation (reading a score, adding to it, writing it back) across runs that may overlap — use a HubSpot calculated property instead.
  • Archived contacts: a contact in HubSpot’s recycle bin still reserves its email address, so an upsert against it cannot succeed. Restore it from the recycle bin, or use a different address.
  • Timeouts: every request has a 30-second timeout, with automatic retries on rate limits and transient server errors.