

How to Send Daily Close Pipeline Updates to Slack with Make
Every morning, Make queries Close for pipeline metrics, overdue tasks, and upcoming activities, then posts a formatted digest to one or more Slack channels.
Steps and UI details are based on platform versions at time of writing — check each platform for the latest interface.
Best for
Sales managers at 5-30 person inside sales teams who want a zero-touch daily digest without paying for a BI tool.
Not ideal for
Teams that need real-time deal alerts — use a webhook-triggered scenario instead of a scheduled one.
Sync type
scheduledUse case type
reportingReal-World Example
A 12-person SaaS sales team runs this every weekday at 8:00 AM. Before, managers pulled pipeline numbers manually from Close each morning and copy-pasted them into Slack — a 15-minute daily ritual that got skipped on busy days. Now #sales-pipeline receives a structured summary showing total pipeline value, deals with no activity in 7+ days, and tasks due today, before the first standup call.
What Will This Cost?
Drag the slider to your expected monthly volume.
Each platform counts differently — Zapier: 1 task per trigger. Make: 1 operation per module per record. n8n: 1 execution per run.





Prices shown for annual billing. Based on published pricing as of April 2026.
Estimated ROI
1000
min saved/mo
$583
labor value/mo
Free
no platform cost
Based on ~2 min manual effort per operation at $35/hr fully loaded labor cost.
Implementation
Import this workflow directly into Make
Copy the pre-built Make blueprint and paste it straight into Make. All modules, filters, and field mappings are already configured — you just need to connect your accounts.
Before You Start
Make sure you have everything ready.
chat:write and channels:read scopesField Mapping
Map these fields between your apps.
| Field | API Name | |
|---|---|---|
| Required | ||
| Lead Status | status | |
| Opportunity Value | value_period | |
| Opportunity Status | status | |
| Activity Type | type | |
| Is Overdue | is_overdue | |
| Activity Due Date | date | |
4 optional fields▸ show
| Assigned User | user_id |
| Lead Name | display_name |
| Opportunity Close Date | date_won |
| Activity Note | note |
Step-by-Step Setup
make.com > Scenarios > Create a new scenario
Create a new Make scenario
Log into Make at make.com and click the blue 'Create a new scenario' button in the top right of your Scenarios dashboard. You'll land on the visual canvas with a single empty module in the center. This canvas is where you'll chain together the Close search, any data transformations, and the Slack post. Give the scenario a name immediately — click the default 'New scenario' text in the top left and type something like 'Daily Close Pipeline → Slack'.
- 1Click 'Create a new scenario' in the top right
- 2Click the pencil icon next to 'New scenario' in the top left
- 3Type a descriptive name like 'Daily Close Pipeline → Slack'
- 4Press Enter to save the name
Canvas > Empty module > Schedule
Add the Schedule trigger
Click the empty circular module on the canvas to open the module picker. Search for 'Schedule' and select it — this is Make's built-in clock trigger, not an app integration. Set the interval to 'Days' and configure the time to fire at 7:55 AM in your team's timezone. The five-minute buffer before standup matters: Close's API response can take 10-20 seconds for large result sets, and Slack delivery adds another few seconds.
- 1Click the empty circular module on the canvas
- 2Type 'Schedule' in the search box
- 3Select 'Schedule' from the results
- 4Set 'Run scenario' to 'Every day'
- 5Set the time to 07:55 and select your team's timezone from the dropdown
- 6Check the 'Days of the week' boxes for Monday through Friday only
Canvas > + > Close > Search Leads > Add connection
Connect Close and search for active leads
Click the '+' to the right of the Schedule module to add the next module. Search for 'Close' and select it from the app list. Choose the action 'Search Leads'. You'll be prompted to create a Close connection — click 'Add' and paste your Close API key (found in Close under Settings > API Keys). Name this connection something identifiable like 'Close – [Your Company]'. Once connected, configure the search query to pull active leads with open opportunities.
- 1Click the '+' button to the right of the Schedule module
- 2Type 'Close' in the search box and select the Close app
- 3Choose 'Search Leads' as the action
- 4Click 'Add' next to the Connection field
- 5Paste your Close API key into the API Key field
- 6Click 'Save' to establish the connection
- 7In the 'Query' field, enter: status:"potential" or status:"active"
- 8Set 'Limit' to 200 to capture full pipeline without pagination issues
Canvas > + > Flow Control > Iterator
Add an Iterator to process each lead
Add a new module after the Close search. Search for 'Flow Control' and select 'Iterator'. In the Array field, map the output array from the Close Search Leads module — it will appear as 'Array of Leads[]' in the variable picker. The Iterator will process each lead one at a time, making it possible to inspect each lead's nested opportunity data. This is required before you can aggregate the data into a single summary.
- 1Click '+' after the Close Search Leads module
- 2Search for 'Flow Control' and select it
- 3Choose 'Iterator'
- 4Click inside the 'Array' field
- 5From the variable picker, select the leads array output from the Close module (labeled something like '1. Close – Leads[]')
Canvas > + > Flow Control > Numeric Aggregator
Add an Aggregator to build pipeline metrics
After the Iterator, add a 'Numeric Aggregator' module from Flow Control. This lets you sum opportunity values across all leads. Set the source module to your Iterator, the Aggregate function to 'SUM', and the Value field to the opportunity value path — something like {{item.opportunities[].value_period}}. You'll need one Numeric Aggregator for total pipeline value and a second one for opportunity count. Add the second aggregator as a parallel branch from the Iterator by right-clicking the Iterator and choosing 'Add another route'.
- 1Click '+' after the Iterator module
- 2Search for 'Flow Control' and select 'Numeric Aggregator'
- 3Set 'Source Module' to your Iterator
- 4Set 'Aggregate function' to 'SUM'
- 5Map the 'Value' field to the opportunity's value field from Close
- 6Right-click the Iterator to add a second route for opportunity count
- 7Add a second Numeric Aggregator set to 'COUNT' on the same opportunity field
Canvas > Schedule module (right-click) > Add another route > Close > Search Activities
Search for overdue tasks in Close
Add another branch from the Schedule trigger — right-click the Schedule module and select 'Add another route'. On this new branch, add a Close module and select 'Search Activities'. Set the query to filter for tasks that are overdue: is_overdue:true type:task. Set Limit to 100. This runs in parallel with the lead search, so both queries fire at the same time and you don't wait for one to finish before starting the other.
- 1Right-click the Schedule module on the canvas
- 2Select 'Add another route'
- 3Click the '+' on the new empty branch
- 4Select the Close app
- 5Choose 'Search Activities'
- 6In the Query field, enter: is_overdue:true type:task
- 7Set Limit to 100
- 8Reuse your existing Close connection from the dropdown
Canvas > Schedule module (right-click) > Add another route > Close > Search Activities
Search for tasks due today
Add a third route from the Schedule trigger using the same right-click method. Add another Close Search Activities module. This time, set the query to filter for tasks due today using Close's date filter syntax: type:task date:"{{formatDate(now; 'YYYY-MM-DD')}}". Make's formatDate(now; 'YYYY-MM-DD') formula inserts today's date dynamically each time the scenario runs. Set Limit to 100.
- 1Right-click the Schedule module and select 'Add another route'
- 2Add a Close Search Activities module
- 3In the Query field, type: type:task date:"
- 4Click the formula icon and insert: formatDate(now; 'YYYY-MM-DD')
- 5Close the quote: type:task date:"{{formatDate(now; 'YYYY-MM-DD')}}"
- 6Set Limit to 100
type:task date:"2024-11-14" in the sample data panel.Canvas > + > Tools > Set Multiple Variables
Add a Tools > Set Variable module to build the message
Now converge all three branches into a single message. Add a 'Tools' module and select 'Set Multiple Variables'. Map each variable from your three branches: total pipeline value (from Aggregator 1), total deal count (from Aggregator 2), overdue task count (from the overdue activities search), and today's task count. Use Make's formula bar to format the pipeline value with currency formatting. Name your variables clearly — pipeline_value, deal_count, overdue_tasks, tasks_today — because you'll reference them by name in the Slack message.
- 1Add a new module after your three branches converge
- 2Search for 'Tools' and select 'Set Multiple Variables'
- 3Add variable: Name = pipeline_value, Value = {{divide(3.result; 100)}} (adjust module number to match your Aggregator)
- 4Add variable: Name = deal_count, Value = {{4.result}}
- 5Add variable: Name = overdue_tasks, Value = {{length(5.array)}}
- 6Add variable: Name = tasks_today, Value = {{length(6.array)}}
📬 New entry: {{1.name}}
Email: {{1.email}}
Details: {{1.description}}channel: {{channel}}
ts: {{ts}}
Canvas > + > Slack > Create a Message
Format the Slack message with Block Kit
Add a Slack module and select 'Create a Message'. Connect your Slack workspace using OAuth — click 'Add' next to Connection, then authenticate with a Slack account that has permission to post to your target channel. Set the Channel field to your sales channel name (e.g., #sales-pipeline). For the message text, use Slack Block Kit JSON in the 'Blocks' field for a structured, scannable format. Use the variables you defined in the previous step to populate the metrics.
- 1Add a Slack module after the Set Multiple Variables module
- 2Select 'Create a Message'
- 3Click 'Add' next to Connection and authenticate with Slack via OAuth
- 4Set Channel to #sales-pipeline (or your target channel name)
- 5Toggle on 'Use Blocks' if available, or paste Block Kit JSON into the Blocks field
- 6Set the fallback Text field to: Daily Pipeline Update – {{formatDate(now; 'MMM D, YYYY')}}
📬 New entry: {{1.name}}
Email: {{1.email}}
Details: {{1.description}}Canvas > Right-click any module > Add error handler
Add an error handler for API failures
Right-click the Close Search Leads module and select 'Add error handler'. Choose 'Ignore' for non-critical paths, but for the Slack module, choose 'Rollback' so you don't get a partial message posted without all data. Alternatively, add a separate Slack module on the error path that posts to a #automation-alerts channel with the error message. This gives you visibility when Close's API is slow or returns an unexpected schema.
- 1Right-click the Close Search Leads module
- 2Select 'Add error handler'
- 3Choose 'Break' to pause execution and log the error
- 4Add a Slack module on the error handler path
- 5Set the channel to #automation-alerts
- 6Set the message to: ⚠️ Daily pipeline scenario failed. Error: {{error.message}}
Canvas > Toggle (bottom left) > ON | Canvas > Run once
Activate the scenario and verify the first run
Click the toggle in the bottom left of the canvas to turn the scenario ON. The toggle turns blue. Make will run the scenario at your next scheduled time, but you can also click 'Run once' to test immediately. After a successful run, check your Slack channel for the message and verify the numbers match what you see in Close's pipeline view. Check the scenario's execution log (History tab) to confirm all modules returned 'success' status with green checkmarks.
- 1Click 'Run once' to trigger an immediate test run
- 2Wait 15-30 seconds for all Close API calls to complete
- 3Open your Slack channel and confirm the message posted correctly
- 4Click the 'History' tab in Make to review the execution log
- 5Confirm all modules show green status
- 6Click the ON/OFF toggle to activate the scheduled scenario
Paste this into a Make 'Tools > Set Multiple Variables' module's value field for the pipeline_value variable. It formats the raw Close cents value as a dollar string with commas — e.g., 1850000 becomes $18,500. Replace `3.result` with the actual output number of your Numeric Aggregator module.
JavaScript — Custom Function{{if(▸ Show code
{{if(
divide(3.result; 100) >= 1000000;
concat(... expand to see full code
{{if(
divide(3.result; 100) >= 1000000;
concat(
"$";
toString(floor(divide(3.result; 100000000)));
".";
substring(toString(round(divide(3.result; 100))); -2);
"M"
);
if(
divide(3.result; 100) >= 1000;
concat(
"$";
toString(floor(divide(3.result; 100000)));
",";
padStart(toString(mod(floor(divide(3.result; 100)); 1000)); 3; "0")
);
concat(
"$";
toString(divide(3.result; 100))
)
)
)}}Scaling Beyond 500+ active leads or 200+ daily tasks in Close+ Records
If your volume exceeds 500+ active leads or 200+ daily tasks in Close records, apply these adjustments.
Use Close's pagination to avoid truncated results
Close's API returns a maximum of 200 records per request. If your pipeline has more than 200 active leads, you'll silently miss records. Add a second Close Search Leads module with _skip=200 and a third at _skip=400 if needed, then combine all arrays using a Make Array Aggregator before your Iterator.
Increase Make's timeout buffer between API calls
With large datasets, Close can take 5-10 seconds per API call. If you're running three parallel Close searches, all three fire simultaneously and can trigger rate limiting. Add a Sleep module (Tools > Sleep, 2 seconds) between sequential Close calls in the same execution path. For parallel paths, stagger the scenario's sub-routes using Routers with conditional delays.
Switch from a full count to sampled metrics at scale
If you have 1,000+ leads, iterating every single one daily is expensive in Make operations. Instead, use Close's built-in reporting API endpoints (like report/activity/) which return pre-aggregated counts. This turns a 1,000-operation run into a 5-operation run and avoids pagination entirely.
Going live
Production Checklist
Before you turn this on for real, confirm each item.
Troubleshooting
Common errors and how to fix them.
Frequently Asked Questions
Common questions about this workflow.
Analysis
Use Make for this if your team wants visual control over multi-branch scheduled workflows without writing code. This scenario runs three parallel Close API calls, aggregates the results, and formats a Slack message — Make's canvas makes that fan-out/fan-in pattern easy to see and debug. Make also handles the schedule trigger natively, so you don't need a separate cron service. The one scenario where you'd skip Make: if your team already lives in n8n and has JavaScript experience — n8n lets you do the aggregation and formatting in a single Code node, which is faster to build and easier to modify than Make's multi-module chain.
The math here is simple. Each daily run uses roughly 8 operations in Make (Schedule + 3 Close searches + 2 Aggregators + Variables + Slack). At 22 workdays per month, that's 176 operations. Make's free plan includes 1,000 operations per month, so this scenario costs nothing at single-channel, single-team scale. The Core plan at $9/month gives you 10,000 operations and is where you'd land if you extend this to 5+ channels or add per-rep breakdowns. Zapier's equivalent — a multi-step Zap with scheduled trigger — would cost at minimum $19.99/month (Starter plan) and hit task limits faster because Zapier counts each lead record as a separate task.
Zapier's Schedule trigger is marginally simpler to configure for non-technical users — no timezone math, it asks for local time directly. n8n's Code node makes the aggregation and formatting step dramatically cleaner: one function instead of four Make modules. Power Automate has a native Close connector in preview, which means less API key management, but it's slow to update and the connector lags behind Close's actual API capabilities. Pipedream's Close integration has better support for Close's newer API endpoints and handles pagination automatically in the source step. Make wins here specifically because the visual multi-branch layout makes the parallel API calls easy to reason about and the error handler routing is clear — those are real advantages when you're troubleshooting why your digest shows wrong numbers at 8 AM.
Three things you'll run into after the scenario is live. First, Close's value_period field returns cents, not dollars — your pipeline total will look wildly wrong until you add the divide-by-100 fix. Second, Make's now variable runs in UTC, and day-of-week filters and date-based task queries will drift if your team is in a UTC-offset timezone. Set your schedule time in UTC and test on a Friday afternoon to confirm the scenario correctly skips the weekend. Third, Close's API rate limit is 40 requests per 10 seconds across all API keys for your account. If someone on your team is running a manual Close export or another integration fires at the same time as this scenario, you'll get 429 errors and a missing digest — the fix is to add a Sleep module and schedule this scenario during off-peak hours, not during the same window as other Close integrations.
Ideas for what to build next
- →Add per-rep breakdowns to the digest — Extend the scenario with a Close List Users call and a Router that groups opportunity values by
user_id. Post a second Slack message block that ranks reps by open pipeline value — gives managers the team view and individual accountability in one message. - →Add a weekly summary variant — Clone this scenario and change the Schedule trigger to weekly (Monday 8 AM). Add a Close Search Opportunities module filtered by deals won in the past 7 days to include a 'Closed Last Week' metric alongside the active pipeline numbers.
- →Route alerts for stale deals to individual reps — After the Iterator, add a filter that catches deals with no activity in 7+ days, then look up the assigned rep's Slack user ID using Slack's 'Search for Users' module and send them a direct message — not just a channel post — so they get a personal nudge, not just a broadcast.
Related guides
How to Share Notion Meeting Notes to Slack with Pipedream
~15 min setup
How to Share Notion Meeting Notes to Slack with Power Automate
~15 min setup
How to Share Notion Meeting Notes to Slack with n8n
~20 min setup
How to Send Notion Meeting Notes to Slack with Zapier
~8 min setup
How to Share Notion Meeting Notes to Slack with Make
~12 min setup
How to Create Notion Tasks from Slack with Pipedream
~15 min setup