← Blog
TutorialMay 23, 20266 min read

How to Connect HubSpot to Slack Without Code (2025 Guide)

Automatically post HubSpot deal alerts to Slack — no developer required. Step-by-step guide using AI-generated integration code.


Why HubSpot → Slack is one of the most-requested integrations

Sales teams love celebrating wins. Product and leadership teams want visibility into the pipeline. But getting HubSpot deal events into Slack in real time — without a manual update from someone — traditionally requires a developer to set up a webhook listener and write the handler code.

With AI-powered integration tools like APIlot, you can connect HubSpot to Slack in under 5 minutes without writing a single line of code. Here's exactly how.

What you'll build

By the end of this guide, you'll have:

  • A HubSpot webhook that fires when a deal stage changes (Closed Won, Closed Lost, or any stage you choose)
  • A Slack message posted to your chosen channel with the deal name, amount, owner, and close date
  • The integration code deployed to GitHub, running on your own infrastructure
  • Step 1: Describe what you want

    Open APIlot and type your request in plain English. For example:

    "When a HubSpot deal moves to Closed Won, post a message to the #wins Slack channel with the deal name, amount, close date, and owner name."

    APIlot analyzes your prompt and identifies:

  • Source API: HubSpot Webhooks (deal stage change event)
  • Target API: Slack Web API (post message to channel)
  • Trigger: Deal stage = Closed Won
  • Action: Post formatted message to #wins
  • Step 2: Review the generated code

    APIlot generates a complete TypeScript project:

  • `index.ts` — Express webhook server listening for HubSpot events
  • `hubspot-handler.ts` — Validates the webhook signature and extracts deal data
  • `hubspot-client.ts` — Fetches full deal details (name, amount, owner) from HubSpot API
  • `slack-client.ts` — Posts the formatted message to Slack
  • `.env.example` — All environment variables documented
  • `README.md` — Setup instructions specific to your integration
  • The code uses the official `@hubspot/api-client` SDK and the official Slack Web API SDK — not raw fetch calls.

    Step 3: Gather your API credentials

    You'll need four things:

    HubSpot:

  • `HUBSPOT_ACCESS_TOKEN` — from your HubSpot account → Settings → Integrations → Private Apps → Create a private app. Grant it `crm.objects.deals.read` scope.
  • `HUBSPOT_WEBHOOK_SECRET` — generated when you create the webhook subscription (step 5)
  • Slack:

  • `SLACK_BOT_TOKEN` — from api.slack.com → Your Apps → Create App → OAuth & Permissions. Add the `chat:write` scope and install it to your workspace.
  • `SLACK_CHANNEL_ID` — right-click your Slack channel → Copy link → the ID is the last segment (starts with C)
  • Step 4: Deploy to GitHub

    Click the GitHub deploy button in APIlot. The generated code is pushed to a private repository in your GitHub account. From there, deploy it to any Node.js host:

  • Railway — easiest, $5/month, connects directly to GitHub
  • Render — similar to Railway, generous free tier
  • Fly.io — more control, still simple to set up
  • Set your environment variables in your hosting provider's dashboard.

    Step 5: Register the HubSpot webhook

    In your HubSpot account:

    1. Go to Settings → Integrations → Private Apps → your app → Webhooks

    2. Add a subscription: Object = Deal, Event = Property change, Property = `dealstage`

    3. Set the target URL to your deployed server's `/webhook` endpoint

    4. Copy the webhook secret into your `HUBSPOT_WEBHOOK_SECRET` environment variable

    Step 6: Test it

    Move a test deal to "Closed Won" in HubSpot. Within seconds, you should see a message in your Slack channel.

    The message format looks like:

    🎉 **Acme Corp — Enterprise Plan** closed for **$24,000**
    Owner: Sarah Chen · Close date: May 23, 2026

    Variations you can ship the same way

    The same pattern works for many other HubSpot → Slack triggers:

  • Deal created → alert your sales channel when a new deal enters the pipeline
  • Deal Closed Lost → post to a private channel for postmortem review
  • Contact created → alert your team when a new lead comes in
  • Deal value above threshold → only alert for deals over $10,000
  • For each one, just change the description you give APIlot. The structure of the integration is the same.

    Why this beats Zapier's HubSpot → Slack integration

    Zapier's HubSpot → Slack zap works for simple cases. But you run into limits quickly:

  • Per-task costs. Every Slack message costs one task. At 500 deals/month, that's 500 tasks — which adds up on Zapier's paid plans.
  • Limited message formatting. Zapier's Slack step has fixed message templates. Customizing the format requires workarounds.
  • No webhook signature verification. Zapier doesn't verify that the incoming webhook is actually from HubSpot.
  • The code APIlot generates includes proper HubSpot webhook signature verification — a security requirement that Zapier's integration skips.

    Get started

    APIlot is free for up to 3 integrations per month. Connect HubSpot to Slack in under 5 minutes at useapilot.com.

    Ready to ship your first integration?

    Free forever plan. No credit card required.

    Get started free →

    More articles

    How to Ship API Integrations Without a Developer (2025 Guide)

    7 min read · Product

    How to Connect Stripe to Notion Without Code (Step-by-Step)

    5 min read · Tutorial

    APIlot vs Zapier: Why PMs Are Switching to Code-Based Integrations

    6 min read · Comparison