

How to Send Close Deal Alerts to Slack with Zapier
Fires a Slack message the moment a deal in Close hits a target stage or dollar value, so your team sees pipeline movement without logging into 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 of 5–30 reps who need instant visibility into stage changes and high-value deals without polling the CRM manually.
Not ideal for
Teams that need two-way sync or want to update Close records from Slack — this is a read-only notification flow.
Sync type
real-timeUse case type
notificationReal-World Example
A 12-person SaaS sales team uses this to post into #deals-won every time a Close opportunity moves to 'Won' or exceeds $10,000 in value. Before this zap, reps checked Close 4–5 times a day and still missed stage changes for 2–3 hours. Now the whole team sees the alert within 90 seconds of the rep updating the deal.
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
Before You Start
Make sure you have everything ready.
Field Mapping
Map these fields between your apps.
| Field | API Name | |
|---|---|---|
| Required | ||
| Lead Display Name | display_name | |
| Status Label | status_label | |
| Value Formatted | value_formatted | |
| Assigned To Name | assigned_to_name | |
| Lead URL | url | |
| Value | value | |
2 optional fields▸ show
| Date Updated | date_updated |
| Lead ID | id |
Step-by-Step Setup
zapier.com > Dashboard > Create Zap
Create a new Zap in Zapier
Log into zapier.com and click the orange 'Create Zap' button in the top-left sidebar. You'll land on the Zap editor, which shows a two-panel canvas with 'Trigger' and 'Action' blocks. This is where you'll wire Close to Slack. Give the Zap a name at the top — something like 'Close Deal Alert → Slack' — so you can find it later.
- 1Click 'Create Zap' in the left sidebar
- 2Click the name field at the top and type 'Close Deal Alert → Slack'
- 3Click the 'Trigger' block to open the app search panel
Zap Editor > Trigger > Search Apps > Close
Set Close as the trigger app
In the Trigger block, type 'Close' into the search bar and select it from the results. Zapier will show you the available Close triggers. You want 'New Event' or 'Updated Lead' — for deal stage and value changes, choose 'Updated Lead' since Close stores deals as leads with statuses. This trigger uses Close's webhook-based event system, so notifications fire in near real-time rather than on a poll cycle.
- 1Type 'Close' in the app search field
- 2Click 'Close' (the CRM) in the results list
- 3Click 'Updated Lead' from the trigger event dropdown
- 4Click 'Continue'
Close > Settings > Your API Keys
Connect your Close account
Click 'Sign in to Close' and Zapier will open a popup asking for your Close API key. You'll find this in Close under Settings > Your API Keys. Copy the key — it starts with 'api_' — paste it into Zapier, and click 'Yes, Continue'. Zapier stores this as a named connection so you can reuse it across other Zaps.
- 1Click 'Sign in to Close' in the Zapier trigger panel
- 2Open a new tab and go to Close > Settings > Your API Keys
- 3Click 'Generate API Key', name it 'Zapier', and copy the key
- 4Paste the API key into the Zapier connection popup
- 5Click 'Yes, Continue to Close'
Zap Editor > Trigger > Test Trigger
Test the trigger to pull sample data
Click 'Test Trigger' and Zapier will fetch the 3 most recently updated leads from Close. Pick a lead that has an actual deal value and a status set — not a blank record. This sample data is what Zapier uses for the rest of the setup, so choosing a realistic record now saves you from mapping phantom fields. Look for a record that has 'Status', 'Value', 'Assigned To', and 'Company Name' populated.
- 1Click 'Test Trigger'
- 2Review the 3 sample records returned
- 3Click the record that has the most complete deal data
- 4Click 'Continue with selected record'
Zap Editor > + > Filter by Zapier
Add a Filter step to target specific stages or values
Click the '+' icon between the Trigger and Action blocks to add a Filter step. This is critical — without it, every single lead update in Close fires a Slack message. Set the filter to only continue when the lead status equals your target stage (e.g., 'Won') OR when the deal value is greater than or equal to your threshold (e.g., 10000). Use 'Only continue if...' with two conditions joined by OR.
- 1Click the '+' button between Trigger and Action
- 2Select 'Filter by Zapier' from the built-in tools list
- 3Set Condition 1: 'Status Label' > '(Text) Exactly matches' > 'Won'
- 4Click 'OR'
- 5Set Condition 2: 'Value' > '(Number) Greater than or equal to' > '10000'
- 6Click 'Continue'
Zap Editor > Action > Search Apps > Slack > Send Channel Message
Add Slack as the action app
Click the Action block and search for 'Slack'. Select 'Send Channel Message' as the event — this posts a message to a public or private channel without requiring someone to be tagged. If you want to ping a specific rep directly, choose 'Send Direct Message' instead, but that requires resolving the assigned rep's Slack user ID, which adds complexity.
- 1Click the Action block
- 2Type 'Slack' in the app search field
- 3Select 'Slack' from the results
- 4Choose 'Send Channel Message' from the event dropdown
- 5Click 'Continue'
Zap Editor > Action > Slack > Sign in
Connect your Slack workspace
Click 'Sign in to Slack' and Zapier will open an OAuth popup for your Slack workspace. Select the correct workspace from the dropdown at the top-right of the Slack authorization page, then click 'Allow'. Zapier needs permission to post messages to channels. This is a workspace-level connection, so any Slack admin can revoke it from Slack's App Directory.
- 1Click 'Sign in to Slack'
- 2Select your workspace from the Slack dropdown
- 3Click 'Allow' to grant Zapier posting permissions
- 4Return to the Zap editor
Zap Editor > Action > Slack > Configure > Message Text
Configure the Slack message and target channel
In the Channel field, type the name of your target channel (e.g., #deals or #sales-wins) or select it from the dropdown. In the Message Text field, build the alert using dynamic fields from Close. Write the message like a human would read it — include the company name, deal value, status, and rep name. Zapier inserts the live Close data at runtime by wrapping field names in double curly brackets when you click the '+' insert button.
- 1Click the Channel field and select your target Slack channel (e.g., #deals-won)
- 2Click into the Message Text field
- 3Type '🎉 Deal Update: ' then click the '+' icon to insert 'Display Name' from Close
- 4Continue building: ' | Status: ' + insert 'Status Label' + ' | Value: ' + insert 'Value Formatted'
- 5Add a new line: 'Assigned to: ' + insert 'Assigned To Name'
- 6Optionally add 'View in Close: ' + insert 'Lead URL'
📬 New entry: {{1.name}}
Email: {{1.email}}
Details: {{1.description}}Zap Editor > Action > Slack > Configure > Bot Name / Bot Icon
Set the bot name and icon
Scroll down in the Slack action configuration to find 'Bot Name' and 'Bot Icon'. Set the bot name to something recognizable like 'Close CRM' or 'Deal Alerts'. For the icon, paste an emoji (e.g., :chart_with_upwards_trend:) or a URL to your company logo. This makes the alert visually distinct in Slack from other bot messages and easier to scan in a busy channel.
- 1Scroll down to 'Bot Name' and type 'Close CRM'
- 2Click 'Bot Icon' and type ':chart_with_upwards_trend:' or paste a logo URL
- 3Leave 'Send as a user' toggled OFF unless you want messages attributed to your personal Slack account
Zap Editor > Action > Test Action
Test the full Zap end to end
Click 'Test action' at the bottom of the Slack configuration panel. Zapier will fire a real message to your chosen Slack channel using the sample data from step 4. Switch to Slack and verify the message arrived in the correct channel with the right fields populated. Check that the deal value is formatted correctly (not in cents), the rep name is readable, and the Close URL is clickable.
- 1Click 'Test action'
- 2Open Slack and navigate to your target channel
- 3Verify the message content matches your expected format
- 4Click the Close URL in the message to confirm it opens the correct lead record
Zap Editor > Publish
Turn on the Zap
Click 'Publish' in the top-right corner of the Zap editor. Zapier will run a final validation check and then activate the webhook listener on Close's side. The Zap status will change from Draft to On. From this point forward, any lead update in Close that passes your filter fires a Slack message within 60–90 seconds. Monitor the Zap History tab for the first 24 hours to confirm it's catching the right events.
- 1Click 'Publish' in the top-right corner
- 2Confirm the activation dialog
- 3Navigate to 'Zap History' in the left sidebar to monitor live runs
- 4Update a test lead in Close to trigger the first real run
This Code by Zapier step formats the raw Close timestamp into a clean relative time string (e.g., 'Updated 3 minutes ago') and conditionally adds a 🔥 emoji to the Slack message for deals over $25,000. Paste this into a 'Code by Zapier' action step inserted between the Filter and the Slack action, then map the 'output_message' variable into your Slack Message Text field instead of building it manually.
JavaScript — Code Step// Input variables from previous Zapier step:▸ Show code
// Input variables from previous Zapier step: // inputData.display_name, inputData.status_label, inputData.value_formatted // inputData.value (raw cents), inputData.assigned_to_name, inputData.url
... expand to see full code
// Input variables from previous Zapier step:
// inputData.display_name, inputData.status_label, inputData.value_formatted
// inputData.value (raw cents), inputData.assigned_to_name, inputData.url
// inputData.date_updated (ISO 8601 string)
const displayName = inputData.display_name || 'Unknown Lead';
const statusLabel = inputData.status_label || 'Unknown Status';
const valueFormatted = inputData.value_formatted || '$0.00';
const rawValue = parseInt(inputData.value || '0', 10);
const assignedTo = inputData.assigned_to_name || 'Unassigned';
const closeUrl = inputData.url || '';
const dateUpdated = inputData.date_updated || '';
// Relative time calculation
let relativeTime = '';
if (dateUpdated) {
const updatedMs = new Date(dateUpdated).getTime();
const nowMs = Date.now();
const diffMinutes = Math.round((nowMs - updatedMs) / 60000);
if (diffMinutes < 1) {
relativeTime = 'just now';
} else if (diffMinutes === 1) {
relativeTime = '1 minute ago';
} else if (diffMinutes < 60) {
relativeTime = `${diffMinutes} minutes ago`;
} else {
const diffHours = Math.round(diffMinutes / 60);
relativeTime = `${diffHours} hour${diffHours > 1 ? 's' : ''} ago`;
}
}
// High-value deal flag (rawValue is in cents, so $25,000 = 2500000)
const isHighValue = rawValue >= 2500000;
const emoji = isHighValue ? '🔥' : '🎉';
const highValueBadge = isHighValue ? ' | ⭐ HIGH VALUE' : '';
// Build the formatted Slack message
const output_message = [
`${emoji} Deal Update: ${displayName}${highValueBadge}`,
`Status: ${statusLabel} | Value: ${valueFormatted}`,
`Assigned to: ${assignedTo}${relativeTime ? ` | Updated ${relativeTime}` : ''}`,
closeUrl ? `View in Close: ${closeUrl}` : ''
].filter(Boolean).join('\n');
output = [{ output_message }];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 Zapier for this if your sales team is non-technical and needs to be up and running in under 30 minutes. Zapier's Close integration is mature — it exposes the 'Updated Lead' trigger as an instant webhook, not a poll, which means you're not waiting 5–15 minutes for an alert. The guided Zap builder also makes the Filter step obvious and accessible for someone who has never built an automation. The one scenario where you'd skip Zapier: if you need to fan out the same alert to multiple channels based on deal size or territory, because Zapier's Paths tool adds cost and complexity faster than Make's router does.
Each Zap run consumes 2 tasks — one for the Filter step and one for the Slack message. If your team updates 200 leads per month and 40% pass the filter (80 alerts), that's 160 tasks per month for the matched runs plus 120 task-equivalents for filtered-out runs — Zapier counts filter steps even when they stop execution. At 300 total lead updates per month, expect roughly 300 tasks consumed. Zapier's free tier gives you 100 tasks/month, so most active sales teams need the Starter plan at $19.99/month. Make handles the same flow for free up to 1,000 operations/month and costs $9/month at higher volumes — about half the price for teams with consistent deal flow.
Make has a cleaner solution for this specific use case: its router module lets you send different Slack messages to different channels in a single scenario without doubling your operation count. n8n lets you write conditional logic directly in a Function node, which is useful if your stage names are inconsistent across Close pipelines. Power Automate has a Close connector but it's a premium connector requiring a higher-tier license, which wipes out any cost advantage. Pipedream gives you the most control — you can write a Node.js step that calls Close's REST API directly and handles edge cases like currency conversion — but that's overkill for a notification workflow. Zapier is still the right call here for the majority of sales teams because setup is straightforward, the Close webhook integration is reliable, and you don't need custom code to get a clean Slack message.
Three things you'll hit after go-live. First, Close fires multiple 'Updated Lead' events for a single rep action — status changes can trigger 2–3 webhook calls in under a second as Close updates related fields. Your filter stops most of these, but if you're not filtering tightly, you'll see duplicate Slack messages for the same deal within seconds of each other. Second, the 'value' field in Close's webhook payload is denominated in the smallest currency unit — cents for USD — and it's not consistently documented. Always use 'value_formatted' for display and test your numeric filter threshold against real sample data before publishing. Third, if you archive or rename a Slack channel after the Zap is live, Zapier fails silently — the run shows as successful in Zap History but the message never arrives. Set a Slack alert on Zapier run errors and audit your channel list quarterly.
Ideas for what to build next
- →Route alerts by deal size to separate channels — Add a second Filter + Slack action branch that sends deals over $50,000 to a #big-deals channel and smaller wins to #deals-won. Zapier's multi-step Zaps support parallel action paths with the Paths by Zapier tool.
- →Log every alert to a Google Sheet for weekly reporting — Add a second action step after the Slack message that appends the deal name, value, rep name, and timestamp to a Google Sheet. This gives you a running log of pipeline activity without needing Close reporting access.
- →Send a daily digest instead of per-event pings — For teams who find per-deal Slack pings noisy, build a separate Zap using a Schedule trigger that pulls Close deals updated in the last 24 hours and posts a single formatted summary each morning. This keeps #deals cleaner for high-volume pipelines.
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