If you use HubSpot and Slack, you probably want them connected. New leads should ping the right channel. Closed-won deals should celebrate in #wins. Stage changes should poke the deal owner. Tasks should land in DMs. The integration is the difference between a CRM that quietly accumulates data and one that nudges the team in real time.
There are three ways to do it, and which one fits depends on your HubSpot plan and how custom you want the alerts to be:
| Option | Cost | Best for |
|---|---|---|
| HubSpot native Slack app | Included on Pro / Enterprise. Paywalled on Free / Starter. | Teams already on Pro+ who want a simple deal feed and don't need custom routing. |
| Zapier (or Make) | ~$30/month for moderate use, scales with task volume | Non-technical teams who want point-and-click setup and can live with per-task pricing. |
| n8n | Free self-hosted, or ~$24/month on n8n Cloud | Anyone on Free / Starter, or anyone who wants custom routing, conditional logic, or messages that match their team's actual workflow. |
This guide focuses on the n8n route because it is the most flexible and the only one that works without a paid HubSpot upgrade. The same pattern handles deals, contacts, tickets, tasks, and stage changes, all from one workflow.
Why deal alerts first
The slowest thing in most sales teams is not the CRM. It is the gap between a deal landing in HubSpot and a human actually knowing about it.
Most teams I talk to rely on one of two things to find out about new deals. A weekly pipeline meeting, where a rep scrolls through the list and reports back. Or a salesperson occasionally refreshing their deals tab and hoping nothing slipped through.
That gap costs money. Harvard Business Review’s study on 15,000 leads and 100,000 call attempts found that your odds of qualifying a lead drop 400% when response time slips from 5 minutes to 10 minutes. After 30 minutes, leads are 21 times less likely to convert than the ones you reach inside five.
Your CRM should not hide new deals from you. This template fixes that in about 20 minutes.
The workflow in one picture
When a new deal is created in HubSpot, this workflow catches it instantly, pulls the useful fields, and posts a clean alert into a Slack channel of your choice.
No polling. No delay. The message arrives in Slack within one or two seconds of the deal being created.
What you’ll need
- An n8n instance, cloud or self-hosted. If you don’t have one yet, n8n Cloud has a free trial, and self-hosting on a $5 VPS costs nothing beyond the server.
- A HubSpot account where you have admin permissions (needed to create a private app).
- A Slack workspace where you can install apps.
- A Slack channel where the deal alerts should land. Create a new one, something like
#sales-new-deals.
Step 1: Create the Slack app and get a token
The cleanest way to post to Slack from n8n is a proper Slack app with a bot token. That gives you rich formatting and the ability to post as a named bot rather than an anonymous webhook.
- Go to api.slack.com/apps and click Create New App > From scratch
- Name it something like “Deal Alerts” and select your workspace
- In the sidebar, open OAuth & Permissions
- Under Bot Token Scopes, add these scopes:
chat:writechat:write.public(so the bot can post to channels without being invited first)
- Scroll back to the top and click Install to Workspace
- Copy the Bot User OAuth Token (starts with
xoxb-)
Keep the bot token private. Slack actively scans the public web and revokes any leaked tokens. Do not commit it to a repo, paste it into a shared doc, or DM it to yourself on a different Slack.
Step 2: Create the HubSpot private app
- In HubSpot, go to Settings > Integrations > Private Apps
- Click Create a private app, name it “n8n Deal Alerts”
- On the Scopes tab, enable these CRM scopes:
crm.objects.deals.readcrm.schemas.deals.read
- Click Create app at the top right and confirm
- Copy the Access Token from the details page
Leave this browser tab open. You’ll come back to it in Step 4 to set up the webhook subscription, once you know the n8n URL.
Step 3: Build it in n8n (or import mine)
If you just want the finished workflow:
Download the template: hubspot-slack-new-deals.json. Import it in n8n via Workflows > Import from File, then plug in your own HubSpot and Slack credentials.
If you’d rather build it node by node, here is what each one does.
Node 1: Webhook trigger
- Add a Webhook node
- HTTP Method: POST
- Path:
hubspot-deal(or anything you prefer) - Response Mode: Immediately
- Click Listen for Test Event once, then copy the Production URL. This is the URL HubSpot will send new deals to.
Node 2: HubSpot (get deal details)
The HubSpot webhook only sends you the deal ID, not the full deal. This node fetches everything you want to show in Slack.
- Add a HubSpot node
- Credential: create a new one, paste the Private App Access Token from Step 2
- Resource: Deal
- Operation: Get
- Deal ID:
={{ $json.body[0].objectId }} - Under Additional Fields > Properties, pick:
dealname,amount,dealstage,pipeline,hubspot_owner_id,closedate
Node 3: Set (format the Slack message)
- Add a Set node connected to the HubSpot node
- Add these field assignments:
| Field | Expression |
|---|---|
| dealName | {{ $json.properties.dealname || 'Untitled deal' }} |
| dealAmount | {{ $json.properties.amount ? '$' + Number($json.properties.amount).toLocaleString() : 'No amount' }} |
| dealStage | {{ $json.properties.dealstage }} |
| dealLink | https://app.hubspot.com/contacts/{{ $('HubSpot Webhook').item.json.body[0].portalId }}/deal/{{ $('HubSpot Webhook').item.json.body[0].objectId }} |
| slackText | See below |
The slackText field is what actually gets posted. Paste this as the value:
:money_with_wings: New deal created in HubSpot
*{{ $json.dealName }}*
Amount: {{ $json.dealAmount }}
Stage: {{ $json.dealStage }}
<{{ $json.dealLink }}|Open in HubSpot>
The <url|label> syntax is how Slack renders clickable links inside messages.
Node 4: Slack (post the message)
- Add a Slack node
- Credential: connect it with the Bot User OAuth Token from Step 1
- Resource: Message
- Operation: Post
- Send Message To: Channel
- Channel: pick
#sales-new-deals(or whatever you created) - Message:
={{ $json.slackText }}
Step 4: Connect HubSpot to n8n
Now plug the two sides together.
- Go back to your HubSpot private app
- Click the Webhooks tab
- Paste the n8n Production URL from Node 1 into Target URL
- Click Create subscription
- Choose Deal as the object type
- Pick Created as the event
- Set the subscription to Active and click Save
n8n must be reachable via HTTPS. HubSpot silently rejects non-HTTPS webhook targets. If you are self-hosting on a raw IP or an HTTP-only dev tunnel, put a proper TLS certificate in front of it first. A simple Cloudflare Tunnel or Caddy reverse proxy both work.
Step 5: Test it
- In n8n, toggle the workflow to Active
- In HubSpot, create a test deal (any name, any amount)
- Check your Slack channel
The alert should arrive within a second or two. If nothing shows up, work through these checks:
- Webhook subscription is actually live. Creating it is not enough, you also have to activate it and save the private app.
- n8n workflow is active. Test runs do not respond to live webhooks, only active workflows do.
- Bot is allowed in the channel. If you skipped
chat:write.public, invite the bot to the channel with/invite @Deal Alerts. - HubSpot can reach n8n over HTTPS. Check the n8n execution log for any incoming request at all. No incoming request means the problem is upstream of n8n.
Make it your own
This template is the smallest useful version. Here is how I extend it for clients who want more.
- Only alert on high-value deals. Add an IF node after the HubSpot step. Condition:
{{ Number($json.properties.amount) > 10000 }}. Small deals fall through, big ones ping the channel. - Route different owners to different channels. Use a Switch node on
hubspot_owner_id. Each branch points to its own Slack node for a different channel. - Tag
@channelabove a threshold. If the deal is over $50k, prepend<!channel>to the Slack text. It pings everyone in the room. - Send a second alert on stage change. Duplicate the workflow with a new HubSpot subscription on
deal.propertyChangefiltered todealstage. You now get a message whenever a deal moves. - Attach the owning salesperson’s name and avatar. Use an extra HubSpot node to look up the owner by
hubspot_owner_id, then pass their name into the Slack message. - Log the same event to a Google Sheet for audit or analytics. Add a Google Sheets node in parallel with the Slack node.
What else you can wire up
The deal-alert template is one event flowing into one channel. Once that pattern is in place, almost everything else is a copy of the same shape with a different HubSpot subscription. Six patterns I build for clients regularly:
- Deal stage change → owner DM. Subscribe to
deal.propertyChangefiltered ondealstage. Look up the deal owner via the HubSpot Owners API, then DM them the new stage. Useful for hands-off pipelines where the owner is not actively watching the CRM. - Closed-won celebration →
#winschannel. Same workflow with a Switch on the new stage value. Whendealstageflips toclosedwon, post a celebration message with the deal amount and the rep’s name. A small thing that keeps morale visible. - New contact submitted → routed by owner. Subscribe to
contact.creation. Look up the assigned owner, route to their team’s channel. Replaces “I forgot to check the form submissions inbox” entirely. - High-value contact created → instant DM. Add a Switch on
lifecyclestageor a custom property likelead_score. If the contact is in your priority bucket, DM the assigned rep instead of posting to a channel. Volume is too low to drown the channel; relevance is too high to wait. - Task assigned → reminder in DM. Subscribe to
task.creation. Look up the assignee, DM them the task title and due date. Removes the “did anyone see this in HubSpot?” loop. - Ticket created → support channel. Subscribe to
ticket.creation. Post the subject, contact, and priority into your support channel. Add a Slack thread for replies, and you have a basic shared inbox.
Each one is a 5 to 10 minute edit of the deal-alert workflow: a new HubSpot subscription, a different Slack channel, maybe one extra node to look up the owner. Once you have the foundation, the marginal cost of adding another integration drops to almost nothing. That is the part the native HubSpot Slack app cannot match.
Common questions about HubSpot Slack integration
Does HubSpot have a native Slack integration?
Yes. HubSpot’s first-party Slack app is available on Pro and Enterprise plans, and offers deal notifications, log call notes from Slack, and basic message templates. It is paywalled on Free and Starter, and the message format is fixed by HubSpot. If you are already on Pro+ and your alert needs are simple, use it.
Can I connect HubSpot to Slack on the free plan?
Not natively, no. HubSpot’s native Slack app requires Pro. The workaround is to use n8n (or Zapier or Make) with a HubSpot private app, which works on any HubSpot tier including Free. The private app gives you webhooks; n8n turns those webhooks into Slack messages.
How long does the integration take to set up?
About 20 minutes for the n8n route, including creating the Slack app, the HubSpot private app, and the n8n workflow. Add another 10 minutes if you have not used n8n before. The native HubSpot Slack app is faster (under 5 minutes) but only available on Pro.
What HubSpot events can I push to Slack?
Anything HubSpot exposes via webhooks: deal creation, deal property changes, contact creation, contact property changes, ticket creation, line item changes, task creation, and engagement (calls, emails, meetings) creation. The full list is in HubSpot’s webhook subscription docs.
Is n8n a Zapier alternative for HubSpot?
For HubSpot specifically, yes. n8n has native HubSpot nodes covering deals, contacts, tickets, line items, owners, and engagements. Pricing is the main difference: Zapier charges per task (each step counts), n8n charges per execution (one whole workflow counts as one). For a HubSpot to Slack workflow with 3 to 5 steps, Zapier costs roughly 4x what n8n Cloud does at the same volume, and self-hosted n8n is free. We have a full comparison here.
Can I use this with HubSpot Operations Hub workflows instead?
Operations Hub workflows can call webhooks, so yes, you can trigger an n8n workflow from inside HubSpot’s own automation tool instead of subscribing to a webhook from a private app. The trade-off: Operations Hub Pro is $800/month. If you already have it, it is more polished. If you do not, the private-app route covered in this guide gets you the same outcome for free.
Talk to a human
If you are running a small sales team and you want this wired into something bigger (routing, enrichment, lead scoring, handoff between reps, round-robin assignment), send me an email. I spend a lot of my week building exactly these kinds of internal sales workflows, and the first conversation is always free.
No sales pitch on the call. I’ll just look at how your team works now and tell you straight whether automation makes sense or whether you are better off leaving it alone.