On a schedule
Email 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.
- Runs
- On a schedule
- Apps
- Freshsales
- AI
- Not needed
- Access
- read
Send this to your assistant
Create a ClickRuntime automation: every Monday at 8am, total my open Freshsales deals by stage, list the ones expected to close this week, and email it to me.
First time? Adding ClickRuntime to your assistant takes about two minutes.
Why use it
Why teams use this automation
Open pipeline in Freshsales is spread across stages, owners and expected close dates, and nobody wants to rebuild the same report by hand every Monday. A sales lead who skips it walks into the weekly meeting without knowing how much sits in Negotiation versus Qualification, or which deals were due to close this week and have not moved.
On the schedule you choose, typically early Monday, the open deals are pulled from Freshsales and added up by stage. A second list picks out deals whose expected close date falls within the current week. Both are combined into a single email, so the numbers are waiting in your inbox before the first meeting.
It suits sales managers, agency owners who run their own pipeline and finance people who need a weekly view of expected revenue without logging into the CRM.
What you get out of it
Monday starts with real numbers
Open pipeline is totaled by stage before the meeting, so the discussion begins with the amount sitting in each stage rather than ten minutes of people opening Freshsales and reading numbers aloud.
Slipping close dates get named
The list of deals expected to close this week makes it obvious which ones are overdue to move, so the manager can ask about them directly instead of finding out at month end.
Stage imbalance is visible early
If Proposal holds most of the value and Qualification is nearly empty, the stage totals show it weeks before the shortfall hits revenue, which gives time to prospect. That gives sales leadership time to react with prospecting.
Same format every week
Because the layout never changes, week-over-week comparison is easy to do by eye, and anyone can forward the email to an investor or partner without cleaning it up. Consistency saves everyone from relearning a new layout.
No report to remember to build
The person who used to export and total deals on Monday gets that time back, and the report still arrives on weeks when they are on holiday. The numbers show up regardless of who is out that week.
How it works
What happens, step by step
Every Monday morning, ClickRuntime lists your open deals in Freshsales.
It adds up the deal value in each stage and picks out the deals expected to close this week.
You get one email with the totals per stage and the list of deals due to close, with their amounts.
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
- Run it at a different time, more or less often, or only on weekdays
- 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 collections import defaultdict
from datetime import date, timedelta
from clickruntime import on_trigger, credentials, http, notify
API = "https://northwind.myfreshworks.com/crm/sales/api"
VIEW_ID = 31000000125 # Open deals
@on_trigger
def run(event):
resp = http.get(f"{API}/deals/view/{VIEW_ID}", params={"include": "deal_stage", "per_page": 100},
headers={"Authorization": f"Token token={credentials.secret('FRESHSALES_API_KEY')}"})
resp.raise_for_status()
body = resp.json()
stages = {s["id"]: s["name"] for s in body.get("deal_stages", [])}
totals, closing = defaultdict(float), []
week_end = str(date.today() + timedelta(days=6))
for d in body["deals"]:
amount = float(d.get("amount") or 0)
totals[stages.get(d["deal_stage_id"], "Unknown")] += amount
if d.get("expected_close") and str(date.today()) <= d["expected_close"][:10] <= week_end:
closing.append(f" {d['name']}: ${amount:,.0f} on {d['expected_close'][:10]}")
text = "By stage:\n" + "\n".join(f" {s}: ${v:,.0f}" for s, v in totals.items())
text += "\n\nExpected to close this week:\n" + ("\n".join(closing) or " none")
notify.email_me(f"Freshsales pipeline: ${sum(totals.values()):,.0f} open", text)
return {"stages": len(totals), "closing": len(closing)}FAQ
Common questions
Does the digest include closed won and closed lost deals?
What currency are the stage totals in?
Can the email go to my whole sales team?
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
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.
See how it worksGet 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 worksKnow the moment your website goes down
Your team hears in Slack when the site stops responding or slows down, and again when it's back.
See how it worksKeep exploring
Set up “Email a Monday pipeline summary” from your assistant
Copy the prompt above, or connect your assistant first. Free plan, no credit card.
