You can get a Slack notification every time a HubSpot deal moves to Closed Won without paying for Sales Hub Professional. The workaround is a 4-module Make.com scenario that polls the HubSpot API for closed won deals on a schedule, dedupes them with a data store, and posts the deal name and amount to a Slack channel. I run this exact setup for my own pipeline, and the full blueprint is available for download below.

Why HubSpot won't do this for free

HubSpot's native answer to "notify Slack when a deal is closed won" is a workflow with a Slack or webhook action. Workflows with those actions are gated behind Sales Hub Professional (or Operations Hub), which starts at roughly 90 EUR per seat per month. Paying that for one Slack message is hard to justify.

The free HubSpot Slack integration does exist, but it covers things like slash commands and conversation notifications, not deal stage triggers. So on HubSpot Free or Starter, deal stage automation has to happen outside HubSpot, through the CRM API.

Why the obvious Make.com trigger doesn't work

If you have tried building this in Make.com before, you probably hit the same wall I did: the HubSpot "Watch Deals" module only triggers when a new deal is created. It does not fire when an existing deal changes stage. There is no "watch deal stage change" trigger at all, because HubSpot only pushes stage change events through workflow webhooks, which again require a paid tier.

The reliable alternative is polling: search HubSpot for closed won deals on a schedule and keep track of which deals you have already announced. That is exactly what this scenario does.

The scenario: 4 modules, no code

The flow looks like this:

Search CRM Objects (Deals) → Data store check → Router → Add record + Slack message

1. HubSpot: Search CRM Objects (Deals)

The trigger module is Search CRM Objects with Deals as the object type. It runs on the scenario schedule (the clock icon on the module), so no separate scheduler module is needed. The configuration that matters:

  • Filter search results: Is Closed Won (hs_is_closed_won) Equal to true
  • Sort by: Last Modified Date (hs_lastmodifieddate), Descending
  • Limit: 1 (raise this if you close multiple deals per interval)

Filtering on hs_is_closed_won instead of a specific deal stage ID means the scenario works with any pipeline. HubSpot sets that calculated property to true whenever a deal enters a stage marked as won, so custom pipelines need no extra configuration.

2. Data store: Check the deal hasn't been announced

Polling has one classic failure mode: duplicate notifications. A closed won deal stays closed won, so every run would re-announce it. The fix is a Make data store used as a memory of announced deals. The second module, Check the existence of a record, looks up the deal's Record ID (hs_object_id) in the data store.

You could filter on Last Modified Date within the last 15 minutes instead, but that breaks the moment a run is skipped or a deal is edited later. The data store approach is idempotent: a deal gets announced exactly once, ever.

3. Router: New deal or already seen

A router splits the flow on the existence check. If the record exists, the run ends quietly on a placeholder route. If it does not, the deal is new and continues to the announcement route.

4. Add record + post to Slack

The announcement route first adds the deal ID to the data store, then posts to Slack with the Create a Message module. The blueprint ships with a minimal message you can extend with any deal property from module 1:

New deal closed won!

Deal: {{1.properties.dealname}}
Amount: {{1.properties.amount}} {{1.properties.deal_currency_code}}

Download the blueprint

The complete scenario is available as a Make blueprint JSON. It includes the HubSpot search filter, the data store dedupe logic, the router, and the Slack message with mapped deal properties.

To import it:

  1. Create a free account at Make.com (the link includes 1 free month of Pro with 10,000 operations)
  2. Create a new scenario, click the three-dot menu at the bottom, and choose Import Blueprint
  3. Upload the JSON file
  4. Connect your own HubSpot and Slack accounts in modules 1 and 4
  5. Create a data store (one text key field is enough) and select it in the two data store modules
  6. Pick your Slack channel and set the schedule

Once imported, double-check the mappings and connections in each module before activating. Blueprints store references to the original account's connections, data stores, and channels, so some fields need to be reconnected after restoring.

Operations math: which Make plan you need

Each run consumes about 2 operations (search + existence check), plus 2 more when a deal is actually announced. Routers and filters are free. That gives you a simple planning table:

Schedule Ops per month Free tier (1,000 ops)
Every 15 minutes ~5,800 No
Every hour ~1,450 No
Every 2 hours ~730 Yes

For a sales notification, a 2-hour delay is usually fine and keeps the whole setup at zero cost. If you want the 15-minute cadence, Make's Core plan covers it comfortably, and the free Pro month from the signup link lets you test the tight schedule before deciding.

Limitations

  • Notifications are near-real-time, not instant. The delay equals your polling interval. Instant delivery requires HubSpot workflow webhooks, which is the exact paid feature this setup avoids.
  • With Limit set to 1, only the most recently modified closed won deal is picked up per run. If you close several deals within one interval, raise the limit and the scenario handles each returned deal as its own bundle.
  • Make data stores cannot be recovered if deleted, so don't clear the dedupe store casually. I learned that one from Make support directly.

FAQ

Can HubSpot send Slack notifications for closed won deals on the free plan?

Not natively. Workflow-based Slack and webhook actions require Sales Hub Professional. On HubSpot Free or Starter, this polling scenario is the practical replacement.

Does this work on HubSpot Starter?

Yes. The Search CRM Objects module uses the standard CRM API, which is available on every HubSpot tier including Free.

Can I notify on Closed Lost too?

Yes. Duplicate the scenario and change the filter to Is Closed Lost (hs_is_closed_lost) Equal to true, with its own data store.

Can I add the deal owner or company to the message?

The search module already outputs hubspot_owner_id and every other deal property. Owner ID needs an extra "Get an Owner" module to resolve the name; company requires a "List Associated Objects" lookup. Both add 1 operation per announced deal.

Summary

HubSpot locks deal stage automation behind Sales Hub Professional, but the CRM API is open on every tier. A scheduled Make.com scenario with a search filter on Is Closed Won and a data store for dedupe gives you reliable closed won Slack notifications for free, or near-instant ones on a small Make plan. Grab the blueprint, import it, reconnect your accounts, and you are live in ten minutes.

I build this kind of API-based automation as part of my tracking and automation consulting. For a deeper example of replacing paid platform features with server-side plumbing, see how I track Stripe purchases via sGTM without a custom backend.

Questions about the setup? Get in touch.

Disclosure: the Make.com links in this post are affiliate links. If you sign up through them I earn a commission at no extra cost to you, and Make currently gives new accounts registered through the link 1 month of the Pro plan with 10,000 operations for free.