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: falseinstead of failing when no contact matches.
- Fetch a contact by object ID or by email address. Returns
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_CONTACTreturnsresult.found = falseon 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_CONTACTfor 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.