

How to Send Close Deal Alerts to Slack with Make
Automatically posts a Slack message whenever a Close deal changes stage or crosses a value threshold, so your sales team sees pipeline updates in real time without opening the CRM.
Steps and UI details are based on platform versions at time of writing — check each platform for the latest interface.
Best for
Inside sales teams who need the whole room to know when a deal moves to Negotiation or Closed Won without anyone having to broadcast it manually.
Not ideal for
Teams who only want daily digest summaries — use a scheduled Make scenario pulling Close search results instead.
Sync type
real-timeUse case type
notificationReal-World Example
A 12-person SaaS sales team posts to #deals-won every time a Close opportunity hits Closed Won or exceeds $10,000 in value. Before this automation, reps had to remember to announce deals in Slack themselves — roughly 30% of closes went unannounced for hours. Now the alert fires within 90 seconds of a stage change and includes the deal value, rep name, and a direct link to the Close record.
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.
Optional
Field Mapping
Map these fields between your apps.
| Field | API Name | |
|---|---|---|
| Required | ||
| Opportunity ID | id | |
| Deal Status Label | status_label | |
| Deal Value | value | |
| Lead Name | lead_name | |
5 optional fields▸ show
| Formatted Deal Value | value_formatted |
| Assigned Rep Name | user_name |
| Close Record URL | url |
| Expected Close Date | date_won |
| Previous Status Label | previous_data.status_label |
Step-by-Step Setup
Make Dashboard > Scenarios > Create a new scenario
Create a new Make scenario
Log in to 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 — a dark grid where modules appear as circles. Don't add a module yet. First, name the scenario by clicking 'New scenario' at the top left and typing something like 'Close Deal Alerts → Slack'. This keeps your scenario list readable as it grows.
- 1Go to make.com and log in
- 2Click 'Create a new scenario' (blue button, top right)
- 3Click 'New scenario' text at the top left to rename it
- 4Type 'Close Deal Alerts → Slack' and press Enter
Canvas > Empty trigger circle > Webhooks > Custom webhook
Add the Webhooks module as your trigger
Click the empty circle on the canvas. In the module picker that slides in from the right, search for 'Webhooks' and select it. Then choose 'Custom webhook' as the trigger type. Make will ask you to create a new webhook — click 'Add' and give it the name 'Close Deal Trigger'. Make generates a unique HTTPS URL immediately. Copy that URL to your clipboard — you need it in Close in the next step.
- 1Click the empty circle on the canvas
- 2Type 'Webhooks' in the search box
- 3Select 'Webhooks' from the results
- 4Choose 'Custom webhook'
- 5Click 'Add', name it 'Close Deal Trigger', click Save
- 6Copy the generated webhook URL
Close > Settings > Integrations > Webhooks > Add Webhook
Register the webhook in Close
Open Close in a new tab. Go to Settings > Integrations > API and then navigate to the Webhooks section. Click 'Add Webhook'. Paste the Make webhook URL you copied into the Endpoint URL field. For Events, select 'Opportunity Updated' — this fires whenever a deal changes stage, value, or any other field. You can also add 'Opportunity Created' if you want alerts on brand-new deals. Set the Status to Active and click Save.
- 1Open Close and go to Settings (gear icon, bottom left)
- 2Click 'Integrations', then 'Webhooks'
- 3Click 'Add Webhook'
- 4Paste the Make URL into 'Endpoint URL'
- 5Check 'Opportunity Updated' under Events
- 6Optionally check 'Opportunity Created'
- 7Click Save
Make Canvas > Run once button (bottom center)
Capture the first webhook payload from Close
Switch back to Make. The Webhooks module is waiting to receive its first payload so it can learn the data structure. Click 'Run once' at the bottom of the Make canvas — this puts the scenario in listening mode for 3 minutes. Now go back to Close and manually change the stage on any test deal (e.g., move it from Qualified to Negotiation and save). Make will capture the incoming JSON and display the data structure automatically on the Webhooks module.
- 1Click 'Run once' at the bottom of the Make canvas
- 2Switch to Close and open any test deal
- 3Change the opportunity status/stage and click Save
- 4Switch back to Make and wait for the green checkmark on the Webhooks module
Canvas > + after Webhooks module > Close > Get an Opportunity
Add a Close 'Get Opportunity' module
The webhook payload from Close includes the opportunity ID but not all the fields you want in the Slack message — specifically the assigned rep's full name and the lead company name are sometimes absent or use internal IDs. Click the '+' after the Webhooks module and search for 'Close'. Select it and choose the action 'Get an Opportunity'. In the Opportunity ID field, map the value from the webhook payload — it will be something like data.id from the previous step's output.
- 1Click the small '+' circle to the right of the Webhooks module
- 2Search for 'Close' and select it
- 3Choose 'Get an Opportunity'
- 4In Connection, click 'Add' and authenticate with your Close API key
- 5In Opportunity ID, click the field and select 'data: id' from the Webhooks output
Canvas > Right-click arrow between modules > Add a filter
Add a Filter to target specific stages or values
Right-click the arrow connecting the Webhooks module to the Close module, then click 'Add a filter'. This filter runs before Make fetches the full opportunity record, saving operations. Set up two conditions joined by OR: Condition 1 — 'status_label' (from the webhook payload) 'Contains' the text you want, like 'Won' or 'Negotiation'. Condition 2 — 'value' (from webhook payload) 'Greater than or equal to' your threshold, e.g. 10000. Only deals matching either condition will proceed.
- 1Right-click the connecting arrow between Webhooks and Close modules
- 2Click 'Add a filter'
- 3Set Label to 'Stage or Value Threshold'
- 4Add Condition 1: select 'data: status_label' > 'Contains' > type your target stage name
- 5Click 'Add AND rule', change it to OR
- 6Add Condition 2: select 'data: value' > 'Greater than or equal to' > type your threshold (e.g. 10000)
- 7Click OK
Canvas > + after Close module > Slack > Create a Message
Add a Slack 'Create a Message' module
Click the '+' after the Close module and search for 'Slack'. Select 'Create a Message'. Connect your Slack workspace by clicking 'Add' under Connection — this opens an OAuth window where you authorize Make to post to Slack. Choose the Channel where alerts should go (e.g., #deals or #sales). For the Message Text field, you'll build a formatted string using data from both the Webhooks and Close modules in the next step.
- 1Click the '+' to the right of the Close module
- 2Search 'Slack' and select it
- 3Choose 'Create a Message'
- 4Click 'Add' next to Connection and complete the Slack OAuth flow
- 5In Channel, type or select your target channel (e.g., #deals)
📬 New entry: {{1.name}}
Email: {{1.email}}
Details: {{1.description}}channel: {{channel}}
ts: {{ts}}
Slack module > Message Text field > mapping panel
Build the Slack message using mapped fields
Click inside the Message Text field in the Slack module. Use the mapping panel to pull fields from both previous modules. Build a message like: ':moneybag: *Deal Alert* — {{Close: lead_name}} moved to *{{Close: status_label}}* by {{Close: user_name}} | Value: ${{Close: value_formatted}} | <{{Close: url}}|Open in Close>'. The mapping panel opens automatically when you click a field — select the Close module's output to find lead_name, status_label, user_name, value_formatted, and the direct URL to the record.
- 1Click inside the 'Message Text' field
- 2Type ':moneybag: *Deal Alert* — '
- 3Click the mapping icon and select 'Close: lead_name'
- 4Continue typing ' moved to *'
- 5Map 'Close: status_label', then type '* by '
- 6Map 'Close: user_name', then type ' | Value: $'
- 7Map 'Close: value_formatted'
- 8Type ' | ' then add the Slack hyperlink format using 'Close: url'
📬 New entry: {{1.name}}
Email: {{1.email}}
Details: {{1.description}}Canvas > Right-click Close module > Add a router
Add a Router for multiple alert types
If you want different Slack messages for wins vs. high-value deals vs. stuck deals, right-click the Close module and select 'Add a router'. The Router splits the flow into separate branches. Branch 1 handles Closed Won deals and posts to #deals-won with a celebration emoji. Branch 2 handles deals over your value threshold and posts to #big-deals. Each branch gets its own filter and its own Slack module with a different channel and message tone.
- 1Right-click the Close module on the canvas
- 2Select 'Add a router'
- 3Click the first branch path and add a filter: status_label = 'Won'
- 4Add a Slack module to Branch 1 targeting #deals-won
- 5Click the second branch path and add a filter: value >= 10000
- 6Add a second Slack module to Branch 2 targeting #big-deals
Canvas > Scheduling (bottom toolbar) > Immediately
Set the scenario to run instantly via webhook
By default, new Make scenarios run on a schedule. You need to switch it to instant (webhook-driven) mode. Click the clock icon next to 'Scheduling' at the bottom of the canvas. Select 'Immediately' — this tells Make to execute the scenario every time the webhook receives a payload rather than on a timer. Instant scheduling is only available when your trigger module is a webhook.
- 1Click the clock icon in the bottom toolbar labeled 'Scheduling'
- 2Select 'Immediately' from the dropdown
- 3Click OK to confirm
Canvas > Toggle switch (bottom left) > ON
Activate the scenario and run a live test
Click the toggle switch at the bottom left of the canvas to turn the scenario ON — it should turn blue. Then go to Close and move a real deal (or a clearly-labeled test deal) through a qualifying stage change. Check your target Slack channel within 90 seconds. Also open the Make scenario's 'History' tab (top navigation) to confirm the run completed successfully and see exactly what data flowed through each module.
- 1Click the blue toggle at the bottom left of the canvas to activate
- 2Go to Close and change a deal's stage to your target stage
- 3Open your Slack channel and wait for the message
- 4In Make, click 'History' at the top to review the completed run
Paste this formula into the Message Text field of the Slack module in Make. It conditionally formats the alert with different emoji based on stage, adds a value warning for deals over $20K, and handles null rep names gracefully. In the Slack module, click the Message Text field, delete any existing text, then paste this directly — Make will parse the if() and contains() expressions inline.
JavaScript — Custom Functionif(▸ Show code
if( contains(Close: status_label; "Won"); join(
... expand to see full code
if(
contains(Close: status_label; "Won");
join(
":trophy: *CLOSED WON* — ";
Close: lead_name;
" | ";
if(Close: user_name; Close: user_name; "Unassigned rep");
" | ";
Close: value_formatted;
if(
Close: value >= 20000;
" :rotating_light: HIGH VALUE";
""
);
" | <";
Close: url;
"|Open in Close>"
);
if(
contains(Close: status_label; "Negotiation");
join(
":handshake: *In Negotiation* — ";
Close: lead_name;
" | ";
if(Close: user_name; Close: user_name; "Unassigned rep");
" | ";
Close: value_formatted;
" | <";
Close: url;
"|Open in Close>"
);
join(
":bell: *Stage Update* — ";
Close: lead_name;
" moved to ";
Close: status_label;
" | ";
Close: value_formatted;
" | <";
Close: url;
"|Open in Close>"
)
)
)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 conditional routing — different Slack channels for wins vs. high-value deals vs. stalled opportunities — without writing any code. Make's Router module handles this visually in about 10 minutes. The second reason to pick Make is the filter layer before the Close API call: you avoid fetching full opportunity records for every minor deal edit, which matters when you have a busy pipeline. The one scenario where you'd skip Make here: if your team already runs n8n self-hosted, build it there — the JavaScript filter logic is more precise and you control your own rate limits.
The math is straightforward. Each alert run uses 3 operations: webhook receive, Close API lookup, Slack post. If your team closes or stages 200 deals per month and you alert on 40% of them, that's 240 operations per month. Make's free tier covers 1,000 operations. You won't hit a paid plan requirement until you're processing roughly 333+ qualifying deal events per month. Make's Core plan at $9/month gives you 10,000 operations — enough for a 25-person sales team with aggressive pipeline activity. Zapier's equivalent workflow costs $19.99/month minimum and counts each two-step Zap as one task per trigger, so the per-alert cost is comparable but the plan floor is higher.
Zapier has one edge here: its Close trigger 'New/Updated Opportunity' is pre-built and doesn't require webhook setup in Close — faster for non-technical users by about 15 minutes of setup. n8n handles the conditional message formatting better because you can write real JavaScript comparisons against the deal payload without Make's formula syntax constraints — useful if your stage names have inconsistent capitalization. Power Automate has a Close connector in preview but it's polling-only, meaning you'd get 15-minute delays on alerts rather than real-time delivery. Pipedream's Close webhook source is solid, but you'd write the Slack formatting in Node.js — overkill for this use case. Make wins here because the Router + Filter combination maps directly to how sales teams actually think about deal alerts: wins go here, big deals go there, everything else is noise.
Three things you'll discover after going live. First, Close fires the webhook for every opportunity field change — including when a rep adds a call note or links a contact. Your filter in Step 6 is the only thing standing between a useful alert system and a Slack channel that gets 40 messages a day. Test specifically that non-stage updates don't pass the filter before you activate. Second, the value field in Close's webhook payload is a raw decimal in the account's base currency — if your team works in multiple currencies, value_formatted will show the correct symbol but the numeric filter comparison in Make always uses the raw number without currency conversion, so a €10,000 deal and a $10,000 deal both read as 10000.00 at the filter layer. Third, Make deactivates scenarios that haven't run in 30 days — if your pipeline goes quiet over a long holiday period, check that the scenario is still active before your team's first day back.
Ideas for what to build next
- →Add a Daily Pipeline Digest — Build a second Make scenario on a scheduled trigger that pulls all open opportunities from Close using the Search Opportunities module and posts a morning summary to Slack. Complements the real-time alerts with a structured overview.
- →Route Alerts by Deal Owner — Add a Close 'Get a User' module after the opportunity lookup to resolve the assigned rep's Slack member ID, then use Slack's 'Send a Direct Message' module to privately notify the deal owner in addition to the team channel.
- →Log Alerts to a Google Sheet — Add a Google Sheets 'Add a Row' module at the end of the scenario to log every alert with timestamp, deal name, stage, value, and rep. Gives you a running record of pipeline activity without needing to scroll Slack history.
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