Every 5 minutes
Post new Freshsales deals to Slack
Each new deal appears in #sales with its name, amount and owner within a few minutes of being created.
- Runs
- Every 5 minutes
- Apps
- Freshsales
- AI
- Not needed
- Access
- read
Send this to your assistant
Create a ClickRuntime automation: every 5 minutes, check Freshsales for newly created deals and post the deal name, amount and owner to #sales in Slack.
First time? Adding ClickRuntime to your assistant takes about two minutes.
Why use it
Why teams use this automation
A Freshsales deal gets created when an SDR qualifies a lead, when a web form converts, or when an account executive splits a big opportunity in two. None of that is visible to anyone who is not staring at the deals list. Sales managers hear about a new $40,000 opportunity in the Thursday pipeline review, and by then the owner has already lost three days of coaching and the founder has missed the chance to jump on a call.
A check runs every 5 minutes against a recently created deals view. Any deal ID it has not seen before is posted to a Slack channel such as #sales with the deal name, amount and owner, and then remembered so it is never announced twice.
It is most useful for small sales teams where everyone wants to celebrate and support new business, and for founders who still want a feel for pipeline without opening the CRM every hour.
What you get out of it
Managers react while the deal is fresh
A new deal shows up in Slack within about five minutes, so a manager can offer to join the first call or reassign it the same afternoon instead of discovering it at the next pipeline review.
Owner is named on every post
Each message includes who owns the deal, so a deal created under the wrong rep or left on a default owner gets noticed quickly and corrected before the lead goes cold.
Unusual deal sizes stand out
Because the amount is in the message, a deal entered at $0 or an extra zero too many is caught by a teammate scrolling the channel, which keeps forecast totals honest.
One announcement per deal
Remembering IDs that were already posted means a deal is never repeated when someone edits it, so the channel stays readable and people keep paying attention to it. That matters when several reps edit deals all day.
A running feed of new business
The channel becomes a timeline of when deals were created, useful when you need to reconstruct how many opportunities opened in a given week without exporting anything. It is also a handy source for monthly sales summaries.
How it works
What happens, step by step
Every five minutes, ClickRuntime checks your recently created deals in Freshsales.
It skips any deal it has already posted.
Each new deal goes to #sales with its name, amount and owner.
Before it runs live
- Connect Freshsales
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 Freshsales steps into one automation
Under the hood
The code that runs this automation
from clickruntime import on_trigger, credentials, http, notify, state, report_fetched
API = "https://northwind.myfreshworks.com/crm/sales/api"
VIEW_ID = 31000000123 # All deals
@on_trigger
def run(event):
resp = http.get(f"{API}/deals/view/{VIEW_ID}", params={"sort": "created_at", "sort_type": "desc", "include": "owner"},
headers={"Authorization": f"Token token={credentials.secret('FRESHSALES_API_KEY')}"})
resp.raise_for_status()
body = resp.json()
since = state.get("since") or ""
new = [d for d in body["deals"] if d["created_at"] > since]
report_fetched(len(new))
if not new:
return {"new": 0}
owners = {u["id"]: u["display_name"] for u in body.get("users", [])}
for d in reversed(new):
notify.slack(f"New deal: *{d['name']}* ${float(d.get('amount') or 0):,.0f} (owner {owners.get(d.get('owner_id'), '-')})",
channel="#sales")
state.set("since", new[0]["created_at"])
return {"new": len(new)}FAQ
Common questions
Which Freshsales view does it read from?
Will a deal be posted again if I edit it later?
Can I send big deals to a different channel?
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 told when a deal changes stage
When one of my deals moves to a new stage, I get a Slack message with the deal and its new stage.
See how it worksEmail a Monday pipeline summary
Every Monday morning I get an email with open deal value per stage and the deals expected to close this week.
See how it worksSee new job listings as they're posted
Jobs that match your keywords show up in a Slack channel, each one only once.
See how it worksKeep exploring
Set up “Post new Freshsales deals to Slack” from your assistant
Copy the prompt above, or connect your assistant first. Free plan, no credit card.
