Weekly
Post a weekly HubSpot leads and revenue summary in Slack
Every Monday your sales channel sees last week's new contacts, stage changes and won deals in one short message.
- Runs
- Weekly
- Apps
- HubSpot, Slack
- AI
- Optional
- Access
- HubSpot contacts/deals read; Slack chat:write
Send this to your assistant
Create a ClickRuntime automation: every Monday, post a summary of last week's new HubSpot contacts, lifecycle changes and deals won to #sales.
First time? Adding ClickRuntime to your assistant takes about two minutes.
Why use it
Why teams use this automation
A founder-led sales team runs its Monday meeting from memory. Someone opens HubSpot, filters a few reports and reads numbers aloud while everyone waits. Half the time the numbers are from the wrong date range.
A summary posted before the meeting gives everyone the same picture of last week: how many leads came in, who moved forward and what closed. The meeting can start with decisions instead of lookups.
What you get out of it
Everyone starts the week with the same numbers
The summary is posted in the channel the whole team reads. Nobody needs a HubSpot login or a saved report to know how last week went.
Wins get noticed
Deals won are listed by name and value. Recognising them in the channel is easy, and it keeps the team motivated.
Trends show up early
Seeing new contacts and stage changes each week makes a slow week obvious. You can react while there is still time in the quarter.
Less time building reports
Nobody has to pull the same filters every Monday. That time goes back into selling.
How it works
What happens, step by step
Every Monday morning, ClickRuntime looks at your HubSpot account for the past seven days.
It counts new contacts and contacts that moved to a new lifecycle stage.
It lists the deals marked won, with their amounts and a total.
When you turn on AI, it adds a two-line comment on how the week compared, and the summary is posted in your #sales Slack channel.
Before it runs live
- Connect HubSpot
- Connect Slack, then invite the app to the channel (type /invite @ClickRuntime there)
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 HubSpot and Slack steps into one automation
Under the hood
The code that runs this automation
from datetime import datetime, timedelta, timezone
from clickruntime import on_trigger, credentials, http, ai, notify
API = "https://api.hubapi.com/crm/v3/objects"
def search(obj, prop, since, props):
body = {"filterGroups": [{"filters": [{"propertyName": prop, "operator": "GTE", "value": since}]}], "properties": props, "limit": 100}
return http.post(f"{API}/{obj}/search", json=body,
headers={"Authorization": f"Bearer {credentials.secret('HUBSPOT_API_KEY')}"}).json().get("results", [])
@on_trigger
def run(event):
since = str(int((datetime.now(timezone.utc) - timedelta(days=7)).timestamp() * 1000))
new = search("contacts", "createdate", since, ["email"])
moved = search("contacts", "lastmodifieddate", since, ["lifecyclestage"])
won = [d for d in search("deals", "closedate", since, ["dealname", "amount", "dealstage"]) if d["properties"].get("dealstage") == "closedwon"]
total = sum(float(d["properties"].get("amount") or 0) for d in won)
deals = "\n".join(f"- {d['properties']['dealname']}: {d['properties'].get('amount')}" for d in won)
text = f"Last week: {len(new)} new contacts, {len(moved)} contacts updated, {len(won)} deals won ({total:,.0f}).\n{deals}"
text += "\n" + ai.generate(f"In two short lines, comment on this sales week:\n{text}", max_output_tokens=120).text
notify.slack(text, channel="#sales")
return {"new": len(new), "won": len(won)}FAQ
Common questions
What counts as a lifecycle change?
Can the summary include deals in progress?
Is the revenue figure the deal amount?
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
Flag HubSpot deals that have gone quiet
Every morning your sales channel lists deals with no activity in 21 days, with the owner tagged so they can follow up.
See how it worksSpot customers at risk of churning from support tickets
Each morning #cs gets a short list of customers whose recent tickets suggest they might leave, with the reason for each.
See how it worksRemind account owners about upcoming contract renewals in Slack
Every Monday, #renewals lists the HubSpot companies renewing in the next 60 days, each tagged with its owner.
See how it worksKeep exploring
Set up “Post a weekly HubSpot leads and revenue summary in Slack” from your assistant
Copy the prompt above, or connect your assistant first. Free plan, no credit card.