HubSpot: post a weekly pipeline summary to Slack

Get a pipeline snapshot into a Slack channel every Monday at 8am, either from a native HubSpot report share or a small Zapier or API job.

Every Monday someone on the team opens HubSpot, squints at the deals board, and types “pipeline looks OK?” into Slack. The numbers are already in HubSpot. They just never show up where people talk. This guide sets up an automatic weekly post to a Slack channel. You’ll have two versions to choose from: a native one that takes 15 minutes, and a richer one with the actual numbers written into the message.

What you need

  • The HubSpot Slack integration installed. In HubSpot you need Super Admin or App Marketplace permissions. In Slack you need to be a workspace admin. Only one Slack workspace can be connected to a HubSpot account.
  • A public Slack channel, such as #pipeline. HubSpot’s docs say reports can only be shared to public channels, not private or shared (Slack Connect) channels.
  • Any HubSpot plan for the native report share. HubSpot lists sharing reports via Slack as available on all products and plans.
  • For the richer version: a Zapier or Make account, or someone comfortable with a short script, plus a HubSpot private app token with read access to deals.

Which version should you build

Version A, native report share. HubSpot posts a link and a preview of one report to Slack on a schedule. Anyone with HubSpot access clicks through to the live report. Zero maintenance. The downside: the numbers are in the preview, not in plain text, and people without HubSpot logins can’t open it.

Version B, a custom summary message. A scheduled job pulls open deals from HubSpot, adds them up, and posts text like this:

Pipeline, week of Oct 5 Open deals: 42, total $318,400 Closing this month: 9, $86,000 New this week: 6, $41,500 Won last week: 3, $22,000. Lost: 2 No activity in 14+ days: 7 deals (list in thread)

It needs a little upkeep, but it’s what people actually read.

I’d start with A. If nobody clicks the link after a month, build B.

Step by step

1. Install the Slack integration

In HubSpot, click the Marketplace icon in the top navigation, search for Slack, click Install, approve the permissions in Slack, and come back to HubSpot. You’ll get a confirmation email from Slack.

2. Build the report you want to share (Version A)

Go to Reporting > Reports and create a deals report. For a single weekly snapshot I use:

  • Chart type: bar chart or table
  • Grouped by: Deal stage
  • Measured by: Sum of Amount, and Count of deals
  • Filters: Pipeline is your sales pipeline, and Deal stage is none of your closed won or closed lost stages

Name it “Open pipeline by stage.” If the team cares about the month, make a second report filtered to Close date is this month.

3. Schedule the Slack share

Hover over the report in the reports list, click Actions > Share via, choose Slack, then Next. Then:

  • Pick Yes, this is a recurring share.
  • Choose to share with a channel, and pick #pipeline.
  • Add a message, for example: “Monday pipeline. Reps, update anything stale before standup.”
  • Set the schedule to Weekly, choose Monday, and pick a time like 8:00 AM.

HubSpot’s docs note that the data is captured 2 hours before the send time. If reps update deals at 7:30 on Monday, those changes won’t make the 8:00 post. Tell them to tidy up on Friday.

Super Admins or the report owner can edit or delete the recurring message later, from the same Share via dialog under the Other apps tab.

4. Build the custom summary (Version B)

The core idea: something runs once a week, asks HubSpot for deals, does the math, and posts to Slack.

With Zapier:

  1. Trigger: Schedule by Zapier, event Every Week, Day of the Week Monday, Time of Day 7am. Zapier uses your account’s time zone and may run a few minutes late.
  2. Action: a HubSpot step that finds or searches deals, or a Webhooks step calling HubSpot’s CRM search API directly. The built-in HubSpot actions in Zapier change over time, so check which search actions are available to you.
  3. Action: a Code or Formatter step that totals amounts and counts deals by category.
  4. Action: a Slack step that sends a channel message, with the text built in step 3.

With a short script (runs on any scheduler, such as a cron job or a scheduled cloud function):

  1. Create a HubSpot private app with read scope for deals. Copy its token.
  2. Call the CRM search endpoint for deals with a filter like dealstage NEQ your closed stages, or closedate BETWEEN two dates. HubSpot’s search API returns up to 200 records per page and 10,000 per query, with a limit of 5 requests per second, so page through if you have more than 200 open deals.
  3. Total the amount values and count deals by group.
  4. Create a Slack incoming webhook for #pipeline (create a Slack app, turn on Activate Incoming Webhooks, then Add New Webhook to Workspace). POST your summary as JSON with a text field, or with Block Kit blocks for nicer formatting.

Keep the token and the webhook URL in your scheduler’s secret storage, never in the script itself.

5. Decide what “stale” means and include it

The single most useful line in the summary is the stale-deal count. HubSpot deals have a Last activity date property. I use “open deal, last activity more than 14 days ago.” Post the count in the main message and the deal names in a thread reply so the channel stays readable.

6. Run it for 3 weeks, then trim

After 3 Mondays, ask the team which lines they read. Delete the rest. A five-line message gets read. A 30-line message gets muted.

A note on HubSpot’s scheduled workflows

You might think of a HubSpot workflow with a weekly schedule plus the Send a Slack notification action. Two catches. HubSpot says weekly, daily and monthly schedule triggers need Data Hub Professional or Enterprise. And a deal-based workflow sends one notification per enrolled deal, so 40 open deals means 40 Slack messages. That’s useful for stale-deal alerts, not for a single summary.

Common mistakes

  • Sharing to a private channel. The native share only supports public channels.
  • Forgetting the 2-hour data lag. Monday-morning updates miss the Monday post.
  • Counting closed-lost deals as pipeline. Filter out your closed won and closed lost stages.
  • Including every pipeline. If you have a renewals or partner pipeline, filter it out or give it its own message.
  • Hardcoding tokens in a Zap’s code step or a script. Use the platform’s secret storage.

When it’s worth getting help

Version A is a 15-minute job and you should do it yourself. Version B is worth help if you want weighted pipeline, per-rep breakdowns, or multiple pipelines in one message, or if nobody on the team wants to own a script. My HubSpot page covers how I set these up, and the B2B CRM cost calculator helps you compare that against the hour a week someone spends doing it by hand.

Sources

Founding-client pricing · 3 spots per industry

Show me the manual work. I'll show you the system.

20 minutes by phone or video. You show me the task that eats the most time. Within 24 hours you get a one-page written plan with a fixed price. Yours to keep either way.

Free · Phone or video · Written plan within 24 hrs