On a schedule
Get a Slack message when a deal changes stage
When a deal moves stage, the deal name, new stage and amount are posted to Slack.
- Runs
- On a schedule
- Apps
- HubSpot
- AI
- Not needed
- Access
- crm.objects.deals.read
Send this to your assistant
Create a ClickRuntime automation: whenever a HubSpot deal changes stage, post the deal name, the new stage and the amount to #deals in Slack.
First time? Adding ClickRuntime to your assistant takes about two minutes.
Why use it
Why teams use this automation
Pipeline stages are promises. When a deal moves from Qualified to Proposal, finance may need to forecast it, a solutions engineer may need to prepare a demo, and the CEO may want to know before a board call. In HubSpot, those moves happen quietly, and the people who care find out when they next open the board, or when a rep remembers to mention it. Meanwhile a deal that moved backward from Negotiation to Qualified goes unnoticed.
On a schedule, deals changed since the last run are searched, each deal's current stage is compared with the stage stored last time, and every real change is posted to Slack with the deal name, owner, amount and the old and new stage.
It is useful for sales teams where several roles depend on pipeline movement, and for leaders who watch big deals closely.
What you get out of it
Teams react to movement as it happens
When a deal reaches Proposal, the solutions team, finance and customer success can start preparing immediately instead of learning about it at the next meeting. Preparation can start at the moment of change, not days after.
Backward moves are noticed
A deal slipping from Negotiation back to Qualified is a warning sign that people tend not to announce. Seeing the move in a shared channel invites a timely conversation. The conversation that follows is often the one that saves the deal.
Wins are shared quickly
A closed-won post gives the team a morale boost and tells delivery to start onboarding, which shortens the time from signature to kickoff. Delivery can begin planning the same hour, which cuts weeks of dead time between signature and kickoff.
Forecasts are more accurate
Seeing stage changes as they happen helps finance and leadership keep forecasts current, instead of correcting them at month-end. Fewer end-of-month corrections mean finance can trust the numbers it presents to leadership and the board.
An audit trail of the pipeline
The channel becomes a dated log of stage moves that helps explain how a quarter unfolded and which deals drove the result. It also helps new managers understand how deals tend to move through the pipeline over time.
How it works
What happens, step by step
Every five minutes, the automation looks for HubSpot deals that changed since the last check.
It compares each deal's stage with the stage it saw last time.
When a deal has moved, the deal name, new stage and amount are posted to your Slack channel.
Before it runs live
- Connect HubSpot
What you get
Build your own
Need it to work differently?
Your own rules
Conditions, thresholds, filters and exceptions, written the way you'd explain them to a colleague.
Any number of apps
One automation can read from one app and update several others. Over 248 apps are ready, and anything with an API works too.
AI where it helps
Summaries, classification, extraction and drafts use ClickRuntime's built-in AI, with no extra key.
On a schedule or on each event
Runs as often as every 5 minutes, or the moment an app sends an event, and keeps track of what it already handled.
Changes you can ask for
- Act only on the items that match your own rules, and skip the rest
- Add an AI step, for example to summarize, sort or draft a reply
- Add another app, for example also send it to Slack
- Combine it with other HubSpot steps into one automation
Under the hood
The code that runs this automation
import time
from clickruntime import on_trigger, credentials, http, state, notify, report_fetched
@on_trigger
def run(event):
since = state.get("since") or int((time.time() - 300) * 1000)
deals = http.post("https://api.hubapi.com/crm/v3/objects/deals/search",
headers={"Authorization": f"Bearer {credentials.connection('hubspot', 'work')}"},
json={"limit": 100, "properties": ["dealname", "dealstage", "amount"],
"filterGroups": [{"filters": [{"propertyName": "hs_lastmodifieddate", "operator": "GT", "value": since}]}]}).json()["results"]
stages = state.get("stages") or {}
changed = [d for d in deals if stages.get(d["id"]) not in (None, d["properties"]["dealstage"])]
report_fetched(len(changed))
for d in deals:
stages[d["id"]] = d["properties"]["dealstage"]
state.set("stages", stages)
state.set("since", int(time.time() * 1000))
if not changed:
return {"posted": 0}
for d in changed:
p = d["properties"]
notify.slack(f"{p['dealname']} moved to {p['dealstage']} (${float(p.get('amount') or 0):,.0f})", channel="#deals")
return {"posted": len(changed)}FAQ
Common questions
How does it know a stage actually changed?
Can I only be notified about certain stages?
Will deals in different pipelines be mixed together?
What permissions does it need?
Does it need AI?
How many runs does it use?
Can I change how it works?
Related
You might also like
Assign new HubSpot deals to the right rep
Deals without an owner are given to a rep based on the company's country and size, within minutes.
See how it worksPost HubSpot form submissions to Slack
Each new form submission shows up in Slack with the answers, within a few minutes.
See how it worksPost new HubSpot contacts to Slack
Your team sees each new contact's name, email and source in Slack within minutes.
See how it worksKeep exploring
Set up “Get a Slack message when a deal changes stage” from your assistant
Copy the prompt above, or connect your assistant first. Free plan, no credit card.