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 Sourceproperty if the message should include it.
Enrollment
| Trigger type | event-based (property change). |
|---|---|
| Criteria | Deal stage is changed to Closed Won (the internal stage ID mapped to Closed Won in the active pipeline). |
| Re-enrollment | no, 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 / exclusions | exclude test or sandbox pipelines with a pipeline filter. Optionally exclude deals below a minimum amount to keep the channel high-signal. |
Steps
- 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)
- If/then branch: Deal amount is greater than 0
- Yes: continue
- No: exit workflow (a zero-value deal does not need an alert)
- 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/ ). (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)integrations/ manage-your-notifications-in-slack - 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
- Create a test deal in the applicable pipeline with a non-zero amount.
- Move it to Closed Won.
- Open Automation > Workflows > this workflow > History. Confirm enrollment and check the Slack action's status.
- Check the #wins Slack channel for the message within a minute or two.
- 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
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_workflowFiles and install
| File | What it holds |
|---|---|
| PDF and Markdown | The spec as you read it here, with the YAML build spec at the end. |
| Properties JSON | Creates the fields in one API call. |
| Workflow JSON | Documents the build: the workflow in Automation API v4 format, switched off. |
| UAT script | The 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.
Install reporting-alerts-001
One email, and we tell you where this stands. When free installs open, that address is how you hear it first.
No card, no password, unsubscribe in one click.
Nothing deleted, enabled or enrolled.
reporting-alerts-001Spec version 2026-09