Skip to content

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.

Paste it into your assistant. It tells you what it will send or change before it runs live.

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

  1. Every five minutes, the automation looks for HubSpot deals that changed since the last check.

  2. It compares each deal's stage with the stage it saw last time.

  3. 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

RunsOn a schedule
Get a Slack message when a deal changes stagetoday, 9:00Succeeded
Slack · #dealsNorthwind – Enterprise moved to contractsent ($30,000)

Build your own

Need it to work differently?

This template is a starting point. Copy the prompt and change it, or describe a different automation from scratch, with your own conditions, more apps or an AI step. Your assistant writes it, tests it and runs it on ClickRuntime.
  • 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

This is the Python script that runs each time the automation starts. Your AI assistant writes it for you when you send the prompt, and you allow each step in your assistant. To change how the automation works, describe the change to your assistant and it updates the script for you. For every function it can use, see the script reference.
deal_stage_change_alert.pyexample
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?
The stage of each deal is stored after every run. On the next run, the current stage is compared with the stored one, so edits to other fields do not cause posts. Only real stage differences produce posts.
Can I only be notified about certain stages?
Yes. A common version posts only moves into Proposal, Negotiation or Closed Won, which keeps the channel quiet. Name the stages that matter to you and approve the change. Limiting it keeps the signal strong.
Will deals in different pipelines be mixed together?
They can be listed together with the pipeline name shown, or sent to separate channels for each pipeline. Teams with distinct sales motions usually prefer separate channels for readability. Channels per pipeline keep things easy to follow.
What permissions does it need?
crm.objects.deals.read. Nothing else in your accounts is used.
Does it need AI?
No. It runs without AI, so it doesn't use your plan's AI allowance.
How many runs does it use?
One run each time it checks. Checks that find nothing new and stop right away aren't counted.
Can I change how it works?
Yes. Describe the change to your AI assistant, for example a different schedule, channel or filter. It updates the automation, tests it and tells you what changed.

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.