On a schedule
Get a morning summary of yesterday's deals
Each morning you see which deals were created or changed, grouped by stage with totals.
- Runs
- On a schedule
- Apps
- HubSpot
- AI
- Yes, uses the built-in AI allowance
- Access
- crm.objects.deals.read
Send this to your assistant
Create a ClickRuntime automation: every weekday at 8am, email me the HubSpot deals created or changed yesterday, grouped by stage with the total amount for each stage.
First time? Adding ClickRuntime to your assistant takes about two minutes.
Why use it
Why teams use this automation
A sales leader who wants to know what moved in the pipeline yesterday has to open HubSpot, filter deals by last modified date, group them by stage and add up amounts, and only then can the morning discussion begin. Most days nobody does it, and the weekly pipeline review becomes the first time anyone sees that three $20,000 deals slipped to the next quarter. Small movements add up to big surprises when nobody sees them daily.
Each morning, deals created or updated in the last 24 hours are found using hs_lastmodifieddate, grouped by stage and totaled by amount. The built-in AI can add a short written summary of the main movements, and the whole thing is emailed to you.
It suits sales leaders, founders and revenue operations people who want a daily pulse without opening the CRM.
What you get out of it
The day starts with the same facts
Everyone reads the same summary, so stand-ups begin with what moved instead of a debate about what the numbers are. That shared starting point makes meetings shorter and decisions faster.
Slipping deals surface earlier
A large deal that changed stage or close date shows up the next morning, not at the end of the month, which leaves time to intervene. Catching a slip early often means a rescue call is still possible.
Pipeline value by stage at a glance
Totals per stage show where money is gathering and where it is draining out, which is hard to see by scanning a board. Spotting a bottleneck by stage is hard on a board but obvious in a grouped list.
Fewer CRM logins for busy leaders
Executives who rarely sign in to HubSpot still stay informed, which reduces requests for ad hoc reports from the sales team. Leaders get what they need without learning HubSpot filters, and reps are interrupted less often.
A written narrative saves reading time
An AI-written summary turns a table into two or three sentences about what changed, which is what people actually want to know. A short narrative makes the email something people actually read in the minute they have.
How it works
What happens, step by step
Every morning at 8, the automation finds the HubSpot deals created or changed in the last 24 hours.
It groups them by stage and adds up the amount in each stage.
If you want, AI adds a short written summary of what moved.
The summary is emailed to you, listing each deal under its stage with the totals.
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
- 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 Slack
- Combine it with other HubSpot steps into one automation
Under the hood
The code that runs this automation
import time
from collections import defaultdict
from clickruntime import on_trigger, credentials, http, notify
@on_trigger
def run(event):
headers = {"Authorization": f"Bearer {credentials.connection('hubspot', 'work')}"}
since = int((time.time() - 86400) * 1000)
deals = http.post("https://api.hubapi.com/crm/v3/objects/deals/search", headers=headers, json={
"limit": 100, "properties": ["dealname", "dealstage", "amount"],
"filterGroups": [{"filters": [{"propertyName": "hs_lastmodifieddate", "operator": "GTE", "value": since}]}]}).json()["results"]
by_stage = defaultdict(list)
for d in deals:
by_stage[d["properties"]["dealstage"]].append(d["properties"])
parts = []
for stage, items in by_stage.items():
total = sum(float(p.get("amount") or 0) for p in items)
parts.append(f"{stage} · {len(items)} deals · ${total:,.0f}\n" +
"\n".join(f" - {p['dealname']} (${float(p.get('amount') or 0):,.0f})" for p in items))
notify.email_me(f"Deals changed yesterday: {len(deals)}", "\n\n".join(parts) or "No deals changed.")
return {"deals": len(deals)}FAQ
Common questions
What counts as an updated deal?
Does the AI summary replace the table?
Can I limit it to one pipeline or 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
Get a weekly list of customers at risk of leaving
Each Monday you get a ranked list of customers who look likely to churn, with a reason for each.
See how it worksGet a weekly CSV of your HubSpot contacts
A full export of your contacts arrives in your inbox every week, ready to open in a spreadsheet.
See how it worksFind deals stuck in one stage too long
Each morning you see the open deals that haven't moved in two weeks, before they go cold.
See how it worksKeep exploring
Set up “Get a morning summary of yesterday's deals” from your assistant
Copy the prompt above, or connect your assistant first. Free plan, no credit card.