Skip to content

Slack alert: deal marked Closed Won (revenue milestone notification)

One of 565 written HubSpot workflow specs, by a collective of independent HubSpot consultants.

Free
Professional

Seat pricing: Professional edition. To build it, a GTM Seat or an Ops Seat (an Ops Seat cannot create marketing emails or sequences). Per-hub plans: Sales Hub Professional.

Updated for HubSpot seat pricing
OutcomeThe sales team sees a Slack message the moment a deal is marked Closed Won, so wins are visible in real time without opening the CRM.
Workflow mapreporting-alerts-001
Deal stage changes to Closed Won leads to Amount > 0?. Amount > 0? leads to no: Exit, no alert; yes: Send Slack message to #wins. Send Slack message to #wins leads to Set reporting_alerts_notified = true. no yes Deal stage changes to Closed Won Amount > 0? Exit, no alert Send Slack message to #wins Set reporting_alerts_notified = true
Deal stage changes to Closed Won leads to Amount > 0?. Amount > 0? leads to no: Exit, no alert; yes: Send Slack message to #wins. Send Slack message to #wins leads to Set reporting_alerts_notified = true. no yes Deal stage changes to Closed Won Amount > 0? Exit, no alert Send Slack message to #wins Set reporting_alerts_notified = true

When to use it, when not to

Use it

  • Use it for real-time visibility on individual wins in a shared channel.
  • Use it to keep non-CRM stakeholders (marketing, leadership) aware of revenue events without dashboard access.

Skip it

  • Do not use it for a periodic rollup of several wins in one message. See reporting-alerts-004 for the weekly digest variant.
  • Do not treat this as your system of record. It is a notification, not a reporting export.

Prerequisites

  • Slack workspace connected to HubSpot through the native Slack integration (Settings > Integrations > Connected Apps, or installed from the Slack App Marketplace). The action is "Send Slack notification": you pick the channel from a dropdown, private channels only appear once the HubSpot app has been added to them, and you can also notify mapped users or the record owner (https://knowledge.hubspot.com/integrations/manage-your-notifications-in-slack).
  • Confirm which Slack channel receives the alert (for example #wins) and that the connecting Slack admin has posting access there.
  • No new custom property is strictly required. Optional: a Deal Source property if the message should include it.

Enrollment

Trigger typeevent-based (property change).
CriteriaDeal stage is changed to Closed Won (the internal stage ID mapped to Closed Won in the active pipeline).
Re-enrollmentno, so a deal only fires this once per win. If reactivation from Closed Lost is expected to count as a new win, allow re-enrollment on deal stage change instead of a one-time trigger.
Suppression / exclusionsexclude test or sandbox pipelines with a pipeline filter. Optionally exclude deals below a minimum amount to keep the channel high-signal.

Steps

  1. Trigger: Deal stage is changed to Closed Won, pipeline = [main pipeline]. (check in your portal: the name of your main pipeline and its Closed Won stage under Settings > Objects > Deals > Pipelines)
  2. If/then branch: Deal amount is greater than 0
    • Yes: continue
    • No: exit workflow (a zero-value deal does not need an alert)
  3. Send Slack message to channel #wins: "{{deal.dealname}} just closed won for {{deal.amount}}. Owner: {{deal.hubspot_owner_id}}." The action is "Send Slack notification" and has a "Properties to include with message" picker as an alternative to inline tokens (https://knowledge.hubspot.com/integrations/manage-your-notifications-in-slack). (check in your portal: send one test notification and check that the owner shows as a name; if it shows a number, add Deal owner through Properties to include with message instead)
  4. Set property value: reporting_alerts_notified (optional boolean helper) = true, to guard against duplicate sends if re-enrollment is added later.

Known pitfalls

  • The Slack action depends on an admin-level Slack connection. If that connecting user loses Slack access, the action can fail without an obvious error until someone checks workflow history.
  • Deal stage internal IDs, not labels, drive the trigger. Renaming a stage label is safe, but cloning a pipeline creates new stage IDs this workflow will not match.
  • Without the re-enrollment guard, later editing this workflow to re-enroll on every stage change can double-notify a deal that leaves and re-enters Closed Won.
  • The owner token needs to resolve to a display name, not the raw internal owner ID, or the Slack message reads as a meaningless number. (check in your portal: same test as above, one notification on a test deal)

Test plan

  1. Create a test deal in the applicable pipeline with a non-zero amount.
  2. Move it to Closed Won.
  3. Open Automation > Workflows > this workflow > History. Confirm enrollment and check the Slack action's status.
  4. Check the #wins Slack channel for the message within a minute or two.
  5. Confirm the deal's timeline shows the workflow enrollment and completed actions.

The UAT script of this spec holds 3 cases: a negative case, one case per branch, the expected result of each and a sign-off sheet. It comes as Markdown and as a CSV for your spreadsheet.

Variants

  • Company-tier version: only fire for deals above a strategic-account amount threshold.
  • Email instead of Slack: swap the action for "Send internal email notification" for teams without Slack.
  • Pair with reporting-alerts-004 for a weekly rollup in addition to the real-time ping.

Build spec

Build specYAML, swipe
trigger:
  type: property_changed
  object: deal
  property: dealstage
  new_value: closedwon
  reenrollment: false
actions:
  - type: if_then_branch
    condition: amount > 0
    if_true:
      - type: send_slack_message
        channel: "#wins"
        message: "{{deal.dealname}} just closed won for {{deal.amount}}. Owner: {{deal.owner_name}}"
      - type: set_property_value
        property: reporting_alerts_notified
        value: true
    if_false:
      - type: exit_workflow

Files and install

FileWhat it holds
PDF and MarkdownThe spec as you read it here, with the YAML build spec at the end.
Properties JSONCreates the fields in one API call.
Workflow JSONDocuments the build: the workflow in Automation API v4 format, switched off.
UAT scriptThe test cases, the expected results and a sign-off sheet, as Markdown and CSV.

Take the PDF and build it by hand. One-click install comes with a category pack or the full library.

Get the 12 free specs as a pack

Nothing deleted, enabled or enrolled.

reporting-alerts-001Spec version 2026-09

Read 12 complete specs before you pay.

One per category, same format as the paid ones. Email only, no card.

We email the link, then a short note when specs change. Nothing else.

All 12 free specs by email, no card.