HubSpot to Slack, weekly pipeline numbers posted
Monday pipeline reviews fall apart for a simple reason. Nobody trusts the numbers when they’re coming from someone’s quick copy-paste and “I think this is right.”
Sales managers feel it first, because they’re the ones asked to explain the gaps. But marketing leads and revenue ops end up stuck in the same loop. This HubSpot Slack automation posts last week’s lead movement (and optionally closed-won) automatically, so the team starts the week aligned.
You’ll see how the workflow pulls the right HubSpot records, counts them inside n8n, and posts a clean snapshot to the Slack channel your team already watches.
How This Automation Works
The full n8n workflow, from trigger to final output:
n8n Workflow Template: HubSpot to Slack, weekly pipeline numbers posted
flowchart LR
subgraph sg0["Weekly Schedule Flow"]
direction LR
n0["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/hubspot.svg' width='40' height='40' /></div><br/>Retrieve All Contacts"]
n1@{ icon: "mdi:swap-horizontal", form: "rounded", label: "Filter Recent Leads", pos: "b", h: 48 }
n2@{ icon: "mdi:cog", form: "rounded", label: "Summarize Lead Count", pos: "b", h: 48 }
n3["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/slack.svg' width='40' height='40' /></div><br/>Post Slack Lead Report"]
n4@{ icon: "mdi:play-circle", form: "rounded", label: "Weekly Schedule Trigger", pos: "b", h: 48 }
n2 --> n3
n0 --> n1
n4 --> n0
n1 --> n2
end
subgraph sg1["Flow 2"]
direction LR
n5["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/hubspot.svg' width='40' height='40' /></div><br/>Utility: Retrieve Deals"]
n6@{ icon: "mdi:swap-horizontal", form: "rounded", label: "Utility: Filter Won Deals", pos: "b", h: 48 }
n7@{ icon: "mdi:cog", form: "rounded", label: "Utility: Sum Deal Value", pos: "b", h: 48 }
n5 --> n6
n6 --> n7
end
%% Styling
classDef trigger fill:#e8f5e9,stroke:#388e3c,stroke-width:2px
classDef ai fill:#e3f2fd,stroke:#1976d2,stroke-width:2px
classDef aiModel fill:#e8eaf6,stroke:#3f51b5,stroke-width:2px
classDef decision fill:#fff8e1,stroke:#f9a825,stroke-width:2px
classDef database fill:#fce4ec,stroke:#c2185b,stroke-width:2px
classDef api fill:#fff3e0,stroke:#e65100,stroke-width:2px
classDef code fill:#f3e5f5,stroke:#7b1fa2,stroke-width:2px
classDef disabled stroke-dasharray: 5 5,opacity: 0.5
class n4 trigger
class n1,n6 decision
class n5 disabled
classDef customIcon fill:none,stroke:none
class n0,n3,n5 customIcon
The Problem: Weekly pipeline numbers are fragile
Weekly reporting sounds easy until you actually do it. Someone has to open HubSpot, remember which date property matters, filter the right timeframe, count the results, then repeat the whole thing for closed-won if you want a fuller picture. Do it fast and you miss a filter. Do it carefully and you burn half an hour before the meeting even starts. Then Slack gets a messy message, somebody questions it, and the conversation shifts from “what are we doing this week?” to “are these numbers even real?”
It adds up fast. Here’s where it usually breaks down.
- The lead count changes depending on who remembered to use the correct “entered lead stage” date field in HubSpot.
- Closed-won reporting gets skipped because pulling deals and summing amounts takes extra time.
- You lose the weekly rhythm because the update lands late, or not at all, which makes the review feel optional.
- People stop trusting Slack updates when the numbers keep getting “corrected” after the fact.
The Solution: A scheduled Slack snapshot straight from HubSpot
This workflow runs on a weekly schedule (think Monday around 07:00), pulls the exact HubSpot records you care about, and posts a short, readable summary into Slack. First it retrieves contacts that have a “date entered lead stage” value, then filters them to only the last 7 days. n8n summarizes the filtered list into a simple count and sends the message to your chosen channel: “Last week we generated X leads.” If you enable the optional branch, it also retrieves closed-won deals for the same timeframe, filters those deals to last week, and summarizes them too (including total amount if you map the amount field).
The workflow starts with the schedule trigger. HubSpot provides the raw contact and deal lists, filters keep the window tight, and the summarize steps turn “a bunch of CRM rows” into a meeting-ready number. Slack becomes the single source of truth your team actually sees.
What You Get: Automation vs. Results
| What This Workflow Automates | Results You’ll Get |
|---|---|
|
|
Example: What This Looks Like
Say you run a Monday pipeline review with 8 people in the room. Manually, it’s usually about 20 minutes to pull last week’s new leads, then another 20 minutes to check closed-won and total amount, plus a few minutes to format and post it in Slack. Call it roughly 45 minutes every week. With this workflow, the “work” is basically zero after setup: the schedule triggers automatically, Slack gets the message before the meeting, and you spend your Monday talking about actions instead of counting rows.
What You’ll Need
- n8n instance (try n8n Cloud free)
- Self-hosting option if you prefer (Hostinger works well)
- HubSpot to pull contacts and deals.
- Slack to post the weekly snapshot to a channel.
- HubSpot OAuth connection (authorize inside n8n credentials).
Skill level: Beginner. You’ll connect HubSpot + Slack, then adjust one time window and one channel setting.
Don’t want to set this up yourself? Talk to an automation expert (free 15-minute consultation).
How It Works
The week kicks off on a schedule. The workflow uses a weekly schedule trigger (often Monday morning) so the report arrives consistently, even if nobody is “on reporting duty.”
HubSpot contacts are pulled and narrowed to last week. It retrieves contacts that have the “date entered lead stage” field available, then filters to only those whose lead-stage entry happened within the last 7 days.
The count gets summarized and formatted for humans. n8n converts the filtered results into a single lead number, which keeps Slack messages short enough that people actually read them.
Slack receives the snapshot (and deals can be added). The workflow posts the lead message to your selected channel. If you enable the optional branch, it also pulls closed-won deals from HubSpot for the same period and summarizes count and value before posting.
You can easily modify the time window from “last 7 days” to 14 or 30 days based on your reporting cadence. See the full implementation guide below for customization options.
Step-by-Step Implementation Guide
Step 1: Configure the Schedule Trigger
The workflow begins on a weekly schedule, so configure the trigger timing first.
- Add and open Weekly Schedule Trigger.
- Set the weekly rule to run on day
1at hour7using the existing rule configuration. - Confirm Weekly Schedule Trigger connects to Retrieve All Contacts.
Step 2: Connect HubSpot for Lead Data
This step pulls recent contacts from HubSpot for weekly lead reporting.
- Open Retrieve All Contacts and set Operation to
getAllwith Return All enabled. - Under Authentication, keep
oAuth2. - Ensure Additional Fields includes
hs_v2_date_entered_leadwith Property Mode set tovalueOnly. - Credential Required: Connect your hubspotOAuth2Api credentials.
⚠️ Common Pitfall: Utility: Retrieve Deals is disabled and has no credentials configured. If you plan to use the deal-value branch, enable the node and add HubSpot credentials.
Step 3: Set Up Lead Filtering and Summarization
Filter contacts to only include leads from the last 7 days and then summarize the count.
- Open Filter Recent Leads and confirm the date range conditions use the expressions
{{ $json.properties.hs_v2_date_entered_lead.value.toDateTime('ms') }}with{{ $today }}and{{ $today.minus(7, 'days') }}. - Open Summarize Lead Count and set Fields to Summarize to include
vid. - Verify Retrieve All Contacts connects to Filter Recent Leads, then to Summarize Lead Count.
Tip: If no contacts match the 7-day window, Summarize Lead Count will output zero results, which can affect your Slack message.
Step 4: Configure Slack Output
Send the summarized lead count to a Slack channel.
- Open Post Slack Lead Report and set Text to
=Last week we generated a total of {{ $json.count_vid }} leads.. - Set Select to
channeland choose the target channel under Channel ID. - Credential Required: Connect your slackOAuth2Api credentials.
- Confirm Summarize Lead Count connects directly to Post Slack Lead Report.
Step 5: Test and Activate Your Workflow
Validate the full weekly lead summary flow before turning it on.
- Click Execute Workflow to run a manual test from Weekly Schedule Trigger.
- Verify that Post Slack Lead Report sends a message with a numeric lead count.
- If you plan to use the deal-value branch, enable Utility: Retrieve Deals, add HubSpot credentials, and test the flow through Utility: Filter Won Deals → Utility: Sum Deal Value.
- Turn on the workflow using the Active toggle for production use.
Common Gotchas
- HubSpot credentials can expire or be missing scopes. If things break, check the HubSpot credential in n8n first, then re-auth and reselect the right account.
- If you filter by the wrong HubSpot property, your “last week” count will be nonsense. Double-check you’re using the lifecycle entry date field (like hs_v2_date_entered_lead) and that your account actually populates it.
- Slack posts can fail silently when the bot isn’t in the channel. In Slack, confirm the n8n app/bot is invited to the destination channel and has permission to post.
Frequently Asked Questions
About 30 minutes once HubSpot and Slack are connected.
No. You’ll mostly connect accounts and tweak the schedule and channel.
Yes. n8n has a free self-hosted option and a free trial on n8n Cloud. Cloud plans start at $20/month for higher volume. You’ll also need to factor in HubSpot and Slack plan limits (usually fine for weekly reporting).
Two options: n8n Cloud (managed, easiest setup) or self-hosting on a VPS. For self-hosting, Hostinger VPS is affordable and handles n8n well. Self-hosting gives you unlimited executions but requires basic server management.
Yes, but you’ll change two things: the schedule trigger (run monthly) and the “last 7 days” filter (make it last 30 days). Common customizations include adding MQL/SQL counts by duplicating the contacts branch, posting into different Slack channels per team, and including deal amount by mapping the HubSpot deal amount field in the summarize step.
Usually it’s expired OAuth permissions or the credential is pointed at the wrong HubSpot account. Re-auth HubSpot in n8n, then open the HubSpot nodes and confirm the credential is selected. Also check that the property you filter on exists in your portal and is populated; an empty date field can make it look like “nothing works” when the workflow is actually behaving correctly.
Plenty for a weekly snapshot. In practice you’re counting, not exporting a giant dataset, and n8n can process thousands of contacts as long as your HubSpot API limits aren’t being hammered by other jobs.
Often, yes. Zapier and Make can post scheduled messages, but HubSpot reporting tends to get annoying once you need date-property filtering, optional branches (like deals), and cleaner summarization. n8n handles the logic without turning it into five separate paid “tasks,” and you can self-host if volume ever grows. The tradeoff is that n8n feels a bit more hands-on during setup. If you want someone to sanity-check your approach, Talk to an automation expert and you’ll know quickly.
Once this is running, your Monday numbers show up on time, every time. The workflow handles the counting so your team can focus on what to fix next.
Need Help Setting This Up?
Our automation experts can build and customize this workflow for your specific needs. Free 15-minute consultation—no commitment required.