Beginner~12 min setupCommunication & CRMVerified April 2026
Slack logo
Close logo

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-time

Use case type

notification

Real-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.

/mo
505005K50K

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

Skip the setup

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.

Close account with API access enabled and at least one opportunity in the pipeline to use for testing
Close API key with read permissions on Opportunities and Leads — found under Settings > Your Account > API Keys in Close
Slack workspace admin rights or permission to install apps — needed to authorize Make's OAuth connection
Make account on any paid plan or the free tier (free tier allows up to 1,000 operations/month — sufficient for low-volume testing)

Optional

The Make bot invited to any private Slack channels where you want alerts posted — run /invite @Make in those channels before setup

Field Mapping

Map these fields between your apps.

FieldAPI Name
Required
Opportunity IDid
Deal Status Labelstatus_label
Deal Valuevalue
Lead Namelead_name
5 optional fields▸ show
Formatted Deal Valuevalue_formatted
Assigned Rep Nameuser_name
Close Record URLurl
Expected Close Datedate_won
Previous Status Labelprevious_data.status_label

Step-by-Step Setup

1

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.

  1. 1Go to make.com and log in
  2. 2Click 'Create a new scenario' (blue button, top right)
  3. 3Click 'New scenario' text at the top left to rename it
  4. 4Type 'Close Deal Alerts → Slack' and press Enter
What you should see: You see a blank dark canvas with a single empty circle in the center and your scenario name showing at the top left.
Common mistake — Make auto-saves scenario names but does NOT auto-save module configuration. If you close the browser mid-build, any unsaved module settings are lost. Use Ctrl+S (or Cmd+S) frequently.
2

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.

  1. 1Click the empty circle on the canvas
  2. 2Type 'Webhooks' in the search box
  3. 3Select 'Webhooks' from the results
  4. 4Choose 'Custom webhook'
  5. 5Click 'Add', name it 'Close Deal Trigger', click Save
  6. 6Copy the generated webhook URL
What you should see: You see the Webhooks module on the canvas showing 'Custom webhook' and a long HTTPS URL starting with hook.eu1.make.com or hook.make.com depending on your region.
Common mistake — The webhook URL is region-specific. If your Make account is on the EU data center, the URL starts with hook.eu1.make.com. Pasting a URL from a different region's account into Close will return 404 errors on every event.
Make
+
click +
search apps
Slack
SL
Slack
Add the Webhooks module as y…
Slack
SL
module added
3

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.

  1. 1Open Close and go to Settings (gear icon, bottom left)
  2. 2Click 'Integrations', then 'Webhooks'
  3. 3Click 'Add Webhook'
  4. 4Paste the Make URL into 'Endpoint URL'
  5. 5Check 'Opportunity Updated' under Events
  6. 6Optionally check 'Opportunity Created'
  7. 7Click Save
What you should see: The webhook appears in your Close webhook list with a green Active badge and the Make URL visible in the endpoint column.
Common mistake — Close sends webhook payloads for ALL opportunity updates — including minor field changes like note additions. Without a filter in Make (added in Step 6), you'll get Slack messages for every tiny edit to any deal.
4

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.

  1. 1Click 'Run once' at the bottom of the Make canvas
  2. 2Switch to Close and open any test deal
  3. 3Change the opportunity status/stage and click Save
  4. 4Switch back to Make and wait for the green checkmark on the Webhooks module
What you should see: The Webhooks module shows a bubble with '1' and a green checkmark. Clicking the bubble shows the full JSON payload including fields like opportunity_id, status_label, value, lead_name, and user_id.
Common mistake — Copy the webhook URL carefully — it expires if you regenerate it, and any scenarios using the old URL will silently stop working.
5

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.

  1. 1Click the small '+' circle to the right of the Webhooks module
  2. 2Search for 'Close' and select it
  3. 3Choose 'Get an Opportunity'
  4. 4In Connection, click 'Add' and authenticate with your Close API key
  5. 5In Opportunity ID, click the field and select 'data: id' from the Webhooks output
What you should see: The Close module appears on the canvas connected to the Webhooks module. Clicking 'Run once' again and triggering a deal update should show the full opportunity record in the Close module's output bubble — including status_label, value_formatted, lead_name, and user_name.
Common mistake — Close's API key is found under Settings > Your Account > API Keys in Close — not under Integrations. Make will prompt you for it when you click 'Add' on the connection screen. The key starts with 'api_'.
6

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.

  1. 1Right-click the connecting arrow between Webhooks and Close modules
  2. 2Click 'Add a filter'
  3. 3Set Label to 'Stage or Value Threshold'
  4. 4Add Condition 1: select 'data: status_label' > 'Contains' > type your target stage name
  5. 5Click 'Add AND rule', change it to OR
  6. 6Add Condition 2: select 'data: value' > 'Greater than or equal to' > type your threshold (e.g. 10000)
  7. 7Click OK
What you should see: A small filter icon appears on the arrow between the two modules. When you run the scenario, only opportunities matching your stage name or value threshold will pass through to the Slack step.
Common mistake — Close stores deal values in the currency's base unit as a decimal (e.g., 10000.00 for $10,000). Make's filter treats this as a number correctly, but double-check by running once with a deal you know crosses the threshold before going live.
Slack
SL
trigger
filter
Condition
matches criteria?
yes — passes through
no — skipped
Close
CL
notified
7

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.

  1. 1Click the '+' to the right of the Close module
  2. 2Search 'Slack' and select it
  3. 3Choose 'Create a Message'
  4. 4Click 'Add' next to Connection and complete the Slack OAuth flow
  5. 5In Channel, type or select your target channel (e.g., #deals)
What you should see: The Slack module appears on the canvas. The Connection field shows your Slack workspace name with a green dot. The Channel field shows your selected channel name.
Common mistake — Make's Slack integration requires the bot to be invited to private channels before they appear in the Channel dropdown. Run /invite @Make in Slack first if your #deals channel is private.
Message template
📬 New entry: {{1.name}}
Email: {{1.email}}
Details: {{1.description}}
message template
🔔 New Record: {{text}} {{user}}
channel: {{channel}}
ts: {{ts}}
#sales
🔔 New Record: Jane Smith
Company: Acme Corp
8

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.

  1. 1Click inside the 'Message Text' field
  2. 2Type ':moneybag: *Deal Alert* — '
  3. 3Click the mapping icon and select 'Close: lead_name'
  4. 4Continue typing ' moved to *'
  5. 5Map 'Close: status_label', then type '* by '
  6. 6Map 'Close: user_name', then type ' | Value: $'
  7. 7Map 'Close: value_formatted'
  8. 8Type ' | ' then add the Slack hyperlink format using 'Close: url'
What you should see: The Message Text field shows a mix of typed text and purple mapped tokens. Clicking 'Run once' and triggering a qualifying deal update should post a real message to your Slack channel within 90 seconds.
Common mistake — Map fields using the variable picker — don't type field names manually. Hand-typed variable names often have invisible spacing errors that produce blank output.
Message template
📬 New entry: {{1.name}}
Email: {{1.email}}
Details: {{1.description}}
Slack fields
text
user
channel
ts
thread_ts
available as variables:
1.props.text
1.props.user
1.props.channel
1.props.ts
1.props.thread_ts
9

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.

  1. 1Right-click the Close module on the canvas
  2. 2Select 'Add a router'
  3. 3Click the first branch path and add a filter: status_label = 'Won'
  4. 4Add a Slack module to Branch 1 targeting #deals-won
  5. 5Click the second branch path and add a filter: value >= 10000
  6. 6Add a second Slack module to Branch 2 targeting #big-deals
What you should see: The canvas shows the Close module splitting into two paths, each with its own filter icon and Slack module. A deal that is both Won and over $10,000 will post to both channels.
Common mistake — Make's router does not stop at the first matching branch — it evaluates all branches. A Closed Won deal worth $15,000 will trigger both Branch 1 and Branch 2. Add an explicit 'AND value < 10000' condition to Branch 1 if you don't want double alerts.
10

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.

  1. 1Click the clock icon in the bottom toolbar labeled 'Scheduling'
  2. 2Select 'Immediately' from the dropdown
  3. 3Click OK to confirm
What you should see: The scheduling indicator at the bottom shows 'Immediately' instead of a time interval. The scenario will now fire within seconds of Close sending a webhook, not on a cron schedule.
Common mistake — Switching to 'Immediately' mode on a scenario that uses a polling trigger (not a webhook) does nothing — Make will ignore the setting and fall back to the minimum interval. This only works because Step 2 used a Custom Webhook trigger.
Make
▶ Run once
executed
Slack
Close
Close
🔔 notification
received
11

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.

  1. 1Click the blue toggle at the bottom left of the canvas to activate
  2. 2Go to Close and change a deal's stage to your target stage
  3. 3Open your Slack channel and wait for the message
  4. 4In Make, click 'History' at the top to review the completed run
What you should see: Your Slack channel shows the formatted deal alert within 90 seconds. The Make History tab shows a green 'Success' entry with the number of operations consumed (typically 2-3 for this scenario).

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

VerdictWhy Make for this workflow

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.

Cost

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.

Tradeoffs

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 DigestBuild 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 OwnerAdd 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 SheetAdd 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

Was this guide helpful?
Slack + Close overviewMake profile →