// open to GTM engineering roles & freelance in the UK — reach out →
ingh@
← back to how-to
n8n9 min readMay 2026

How to connect HubSpot to anything using n8n

HubSpot's native integrations cover the popular tools. n8n connects it to everything else — without writing a custom integration from scratch.

n8nHubSpotWebhookREST API

What n8n gives you that HubSpot's integrations do not

HubSpot has a marketplace with hundreds of integrations. For the tools that are in it, the native integrations are usually fine. For anything else — a custom data source, a niche tool, a homegrown system — you are writing a Zapier zap, paying for a middleware service, or building a custom integration yourself.

n8n changes this calculus. It has a native HubSpot node that covers the most common operations out of the box. And it has an HTTP Request node that can call any REST API, which means it can connect HubSpot to literally anything that has an API. The combination gives you the ease of a native integration with the flexibility of custom code.

The most common use cases I see are: syncing data between HubSpot and a tool that does not have a native integration, automating multi-step processes that happen when a HubSpot property changes, and enriching HubSpot records with data from external sources on a trigger.

Setting up HubSpot credentials in n8n

Open n8n, go to Settings, and click Credentials. Create a new credential and search for HubSpot API. You have two authentication options: private app token (recommended) or OAuth.

For most use cases, use a private app token. In HubSpot, go to Settings, then Integrations, then Private Apps. Create a new private app and give it a name that describes what it does. The permissions you grant matter: if you are only reading and writing contacts, you only need contacts permissions. Grant the minimum permissions your workflow requires.

Copy the token HubSpot generates and paste it into your n8n HubSpot credential. Test the connection. Once it passes, you can use this credential in any HubSpot node across all your workflows.

One important note: private app tokens do not expire, but they can be revoked. If a workflow stops working suddenly, check that the private app is still active in HubSpot before debugging the workflow itself.

The most useful HubSpot node operations

The native HubSpot node in n8n covers contacts, companies, deals, and engagements. Within those objects, the operations you will use most often are create or update record, get record, search records, and add note.

Create or update contact is the most common operation. It takes a set of field values and either creates a new contact in HubSpot or updates an existing one if the email address already exists. Always use the upsert pattern — create or update — rather than just create, to avoid duplicates when the same contact comes through multiple times.

Get record retrieves a specific HubSpot object by its ID. You use this when you need to read current property values before deciding what to do next in your workflow. For example, checking the deal stage before updating it, or reading the contact owner before sending a Slack alert.

Search records is powerful for finding objects based on property values rather than IDs. You can search contacts by email, company by domain, or deals by any custom property. The search returns the matching records which you can then process or update.

Add note creates an engagement on a contact or deal record. This is how you log workflow activity back into HubSpot so the sales team can see what automation has done to a record without leaving the CRM.

Using HubSpot webhooks as triggers

HubSpot can send webhooks when properties change on your records. This is how you build reactive workflows — something changes in HubSpot, n8n picks it up instantly and does something.

In HubSpot, go to Settings, then Integrations, then Private Apps. In your private app, go to the Webhooks tab. Add a subscription for the object type and property you want to watch. HubSpot will send a POST request to your n8n webhook URL whenever that event occurs.

In n8n, create a workflow with a Webhook trigger node and paste the URL into HubSpot's webhook subscription. Set the n8n webhook node to return a 200 response immediately rather than waiting for the workflow to finish. This prevents HubSpot from timing out and retrying.

The payload HubSpot sends contains the object ID and the property values that changed. You will need to make a second API call in n8n to fetch the full record details if you need properties beyond what the webhook payload includes.

A practical example: when a deal stage changes to Closed Won in HubSpot, the webhook fires, n8n picks it up, fetches the full deal and contact record, posts a message in Slack, creates a task in the project management tool, and sends the contract details to your billing system. All of this in under 10 seconds.

Building bidirectional syncs

The most complex thing you can build with the HubSpot and n8n combination is a bidirectional sync between HubSpot and another system. Data flows both ways: changes in HubSpot update the other system, and changes in the other system update HubSpot.

The architecture is two separate workflows. Workflow A listens for HubSpot webhooks and updates the external system. Workflow B listens for webhooks or events from the external system and updates HubSpot.

The critical piece is deduplication. If you are not careful, Workflow A updates the external system, which triggers an event, which fires Workflow B, which updates HubSpot, which fires a webhook, which fires Workflow A again. You get an infinite loop.

The standard solution is a sync timestamp. When a workflow updates a record, it writes the current timestamp to a sync field on that record. Before processing an incoming event, both workflows check whether the event was triggered by the other workflow's update (by comparing the event timestamp to the sync timestamp). If they match, skip processing. This breaks the loop.

Building this correctly the first time saves hours of debugging later. n8n's execution logs make it easy to spot loops when they happen — you will see the same workflow firing repeatedly in quick succession.