Pipory
Node reference

HubSpot

HubSpot node reference - all 68 operations, the credential it needs, and a worked example.

Calls the HubSpot CRM API with a private app token across 68 operations, grouped by object family: contacts (create, upsert, get, update, archive, list, search, batch create, merge), companies and deals (the same set), tickets (create, get, update, archive, list, search), any other object type including products, line items, quotes and custom objects (create, get, update, archive, list, search plus batch create/read/update/archive), engagements (note, task, call, meeting, email, SMS/WhatsApp/LinkedIn message), associations (default, labelled, remove, list, list labels), lists (add, remove, memberships, get, get by name, create, delete), metadata reads used to resolve IDs (owners, pipelines, pipeline stages, properties), and marketing (form submission, transactional email, subscription preferences).

Credential: HubSpot private app access token - see Credentials.

Scopes

Each operation below lists the scope it needs. Scopes are ticked when you create the HubSpot private app. If a run fails with a permission error, the node names the missing scope in the error - grant it and re-run; you do not need to rebuild the workflow.

Operations (68)

Contacts

OperationWhat it doesScope
upsertContactCreate or update contactcrm.objects.contacts.write
createContactCreate contactcrm.objects.contacts.write
getContactGet contactcrm.objects.contacts.read
updateContactUpdate contactcrm.objects.contacts.write
archiveContactArchive contactcrm.objects.contacts.write
listContactsList contactscrm.objects.contacts.read
searchContactsSearch contactscrm.objects.contacts.read
batchCreateContactsBatch create contactscrm.objects.contacts.write
mergeContactsMerge contactscrm.objects.contacts.write

Companies

OperationWhat it doesScope
createCompanyCreate companycrm.objects.companies.write
getCompanyGet companycrm.objects.companies.read
updateCompanyUpdate companycrm.objects.companies.write
archiveCompanyArchive companycrm.objects.companies.write
listCompaniesList companiescrm.objects.companies.read
searchCompaniesSearch companiescrm.objects.companies.read
batchCreateCompaniesBatch create companiescrm.objects.companies.write

Deals

OperationWhat it doesScope
createDealCreate dealcrm.objects.deals.write
getDealGet dealcrm.objects.deals.read
updateDealUpdate dealcrm.objects.deals.write
archiveDealArchive dealcrm.objects.deals.write
listDealsList dealscrm.objects.deals.read
searchDealsSearch dealscrm.objects.deals.read
batchCreateDealsBatch create dealscrm.objects.deals.write

Tickets

OperationWhat it doesScope
createTicketCreate tickettickets
getTicketGet tickettickets
updateTicketUpdate tickettickets
archiveTicketArchive tickettickets
listTicketsList ticketstickets
searchTicketsSearch ticketstickets

Any object (products, line items, quotes, custom)

OperationWhat it doesScope
createObjectCreate recordcrm.objects.{objectType}.write
getObjectGet recordcrm.objects.{objectType}.read
updateObjectUpdate recordcrm.objects.{objectType}.write
archiveObjectArchive recordcrm.objects.{objectType}.write
listObjectsList recordscrm.objects.{objectType}.read
searchObjectsSearch recordscrm.objects.{objectType}.read
batchCreateObjectsBatch create recordscrm.objects.{objectType}.write
batchReadObjectsBatch read recordscrm.objects.{objectType}.read
batchUpdateObjectsBatch update recordscrm.objects.{objectType}.write
batchArchiveObjectsBatch archive recordscrm.objects.{objectType}.write

Engagements

OperationWhat it doesScope
createNoteCreate notecrm.objects.contacts.write
createTaskCreate taskcrm.objects.contacts.write
updateTaskUpdate taskcrm.objects.contacts.write
logCallLog callcrm.objects.contacts.write
logMeetingLog meetingcrm.objects.contacts.write
logEmailLog emailcrm.objects.contacts.write + sales-email-read
logCommunicationLog SMS / WhatsApp / LinkedIn messagecrm.objects.contacts.write

Associations

OperationWhat it doesScope
createAssociationAssociate recordscrm.objects.{fromObjectType}.write + crm.objects.{toObjectType}.write
createAssociationWithLabelAssociate records with labelcrm.objects.{fromObjectType}.write + crm.objects.{toObjectType}.write
deleteAssociationRemove associationcrm.objects.{fromObjectType}.write + crm.objects.{toObjectType}.write
listAssociationsList associations for a recordcrm.objects.{fromObjectType}.read + crm.objects.{toObjectType}.read
listAssociationLabelsList association labelscrm.objects.{fromObjectType}.read + crm.objects.{toObjectType}.read

Lists

OperationWhat it doesScope
addToListAdd record to listcrm.lists.write
removeFromListRemove record from listcrm.lists.write
getListMembershipsGet list membershipscrm.lists.read
getListGet listcrm.lists.read
getListByNameGet list by namecrm.lists.read
createListCreate listcrm.lists.write
deleteListDelete listcrm.lists.write

Owners, pipelines & properties

OperationWhat it doesScope
listOwnersList ownerscrm.objects.owners.read
getOwnerGet ownercrm.objects.owners.read
listPipelinesList pipelinescrm.objects.{objectType}.read
listPipelineStagesList pipeline stagescrm.objects.{objectType}.read
listPropertiesList propertiescrm.schemas.{objectType}.read

Marketing

OperationWhat it doesScope
submitFormSubmit a form(none — the form submission endpoint is unauthenticated)
sendTransactionalEmailSend transactional emailtransactional-email
getSubscriptionDefinitionsList subscription typescommunication_preferences.read
getSubscriptionStatusesGet subscription preferencescommunication_preferences.read
updateSubscriptionStatusUpdate subscription preferencecommunication_preferences.write

Example

Create or update the contact behind a new signup

A signup webhook fires and the CRM should end up with exactly one contact for that email address, whether or not it already existed. Upsert keys on email, so re-running the workflow for a returning user updates rather than duplicates.

Set Operation to upsertContact, then fill in:

FieldValueNotes
email{{signup.email}}The upsert key - required; HubSpot matches on the email property
firstName{{signup.firstName}}Written to the firstname property
lastName{{signup.lastName}}Written to the lastname property
propertiesJson{"lifecyclestage": "lead"}Any portal-defined property; the named fields above win on conflict

Sets {{contact.id}} (the HubSpot contact ID), {{contact.email}} and {{contact.contact}} (the full record). A following Create note node can point at {{contact.id}}. Unlike the other contact operations this one returns contact, not record.