Every 2 hours
Get Slack alerts for deals that are stalling in Zoho CRM
Each morning Slack lists open deals that have gone quiet, with a suggested next step for each.
- Runs
- Every 2 hours
- Apps
- Slack, Zoho CRM
- AI
- Yes, uses the built-in AI allowance
- Access
- ZohoCRM.modules.deals.READ; chat:write
Send this to your assistant
Create a ClickRuntime automation: every weekday at 9, find open Zoho CRM deals that haven't moved stage or had activity for 14 days, and post them in #sales with a suggested next step for each.
First time? Adding ClickRuntime to your assistant takes about two minutes.
Why use it
Why teams use this automation
A sales manager reviews the pipeline in a weekly meeting, but by then a deal that went quiet two weeks ago has often gone cold. Reps are busy with active conversations and don't notice the ones that stopped replying.
Every morning #sales gets a short list of deals that have stalled, how long they've been quiet, and one suggested next step for each. Reps act on them the same day instead of finding out at the weekly review.
What you get out of it
Catch deals before they go cold
A daily nudge surfaces quiet deals while they can still be revived.
A next step, not just a warning
Each alert suggests something specific to do, which makes it easier to act.
Shared view of risk
The whole sales team sees which deals need help, not only the owner.
Better pipeline meetings
Weekly reviews start from deals already followed up rather than surprises.
How it works
What happens, step by step
Every weekday morning, ClickRuntime queries Zoho CRM for open deals.
It works out how long each one has been without a stage change or activity.
AI suggests one next step for each stalled deal based on its stage and last notes.
The list is posted in #sales, and deals already flagged recently are left out.
Before it runs live
- Connect Slack, then invite the app to the channel (type /invite @ClickRuntime there)
- Connect Zoho CRM
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
- Run it at a different time, more or less often, or only on weekdays
- Change what the AI looks for, or how it writes the result
- Add another app, for example also send it to Google Sheets
- Combine it with other Slack and Zoho CRM steps into one automation
Under the hood
The code that runs this automation
from datetime import date, timedelta
from clickruntime import on_trigger, credentials, http, ai, state, notify
ZOHO = "https://www.zohoapis.com/crm/v6"
@on_trigger
def run(event):
zh = {"Authorization": f"Zoho-oauthtoken {credentials.connection('zoho', 'work')}"}
cutoff = (date.today() - timedelta(days=14)).isoformat()
query = ("select Deal_Name, Stage, Amount, Last_Activity_Time from Deals "
f"where Stage not in ('Closed Won', 'Closed Lost') and Last_Activity_Time < '{cutoff}T00:00:00+00:00' limit 50")
deals = http.post(f"{ZOHO}/coql", headers=zh, json={"select_query": query}).json().get("data", [])
flagged = state.get("flagged") or {}
recent = (date.today() - timedelta(days=3)).isoformat()
deals = [d for d in deals if flagged.get(d["id"], "") < recent]
if not deals:
return {"stalled": 0}
lines = "\n".join(f"{d['Deal_Name']} | {d['Stage']} | {d.get('Amount')} | last activity {d['Last_Activity_Time'][:10]}" for d in deals)
tips = ai.generate(f"For each stalled deal, one short next step, one per line:\n{lines}", max_output_tokens=600).text
notify.slack(f"*Stalled deals ({len(deals)})*\n{tips}", channel="#sales")
for d in deals:
flagged[d["id"]] = date.today().isoformat()
state.set("flagged", flagged)
return {"stalled": len(deals)}FAQ
Common questions
What counts as stalling?
Will the same deal appear every day?
Where do the suggestions come from?
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
Get follow-up drafts for due deals in Slack
Each morning Slack gives you a ready-to-send follow-up message for every deal due a follow-up today.
See how it worksAdd landing page leads to Zoho CRM and ping Slack
Every lead from your landing page is checked, created in Zoho CRM, and announced in Slack so someone picks it up straight away.
See how it worksGet a daily news digest in Slack
Each morning your team gets a short summary of what's new on the sites and blogs you follow.
See how it worksKeep exploring
Set up “Get Slack alerts for deals that are stalling in Zoho CRM” from your assistant
Copy the prompt above, or connect your assistant first. Free plan, no credit card.