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

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

Use case type

notification

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

/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

Before You Start

Make sure you have everything ready.

Close CRM account with API access enabled — found under Settings > Your API Keys
Close user must have read access to Leads and the ability to see deal values and statuses
Slack account with permission to add third-party apps to your workspace (Workspace Admin or App Manager role)
The target Slack channel must already exist and the connecting Slack user must be a member of it
Zapier account — free tier works for low volume, but check task limits before going live (see cost section)

Field Mapping

Map these fields between your apps.

FieldAPI Name
Required
Lead Display Namedisplay_name
Status Labelstatus_label
Value Formattedvalue_formatted
Assigned To Nameassigned_to_name
Lead URLurl
Valuevalue
2 optional fields▸ show
Date Updateddate_updated
Lead IDid

Step-by-Step Setup

1

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.

  1. 1Click 'Create Zap' in the left sidebar
  2. 2Click the name field at the top and type 'Close Deal Alert → Slack'
  3. 3Click the 'Trigger' block to open the app search panel
What you should see: You should see the Zap editor with an empty Trigger block and an empty Action block waiting to be configured.
2

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.

  1. 1Type 'Close' in the app search field
  2. 2Click 'Close' (the CRM) in the results list
  3. 3Click 'Updated Lead' from the trigger event dropdown
  4. 4Click 'Continue'
What you should see: You should see 'App: Close' and 'Event: Updated Lead' confirmed in the Trigger block, with a prompt to connect your Close account.
Common mistake — Close calls deals 'Leads' internally. If you search for a 'Deal' trigger, you won't find one. Map your deal stages to Close's lead status field throughout this setup.
Zapier
+
click +
search apps
Slack
SL
Slack
Set Close as the trigger app
Slack
SL
module added
3

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.

  1. 1Click 'Sign in to Close' in the Zapier trigger panel
  2. 2Open a new tab and go to Close > Settings > Your API Keys
  3. 3Click 'Generate API Key', name it 'Zapier', and copy the key
  4. 4Paste the API key into the Zapier connection popup
  5. 5Click 'Yes, Continue to Close'
What you should see: You should see a green checkmark and your Close account email listed under 'Account' in the trigger block.
Common mistake — API keys in Close are user-scoped, not org-scoped. If the person who owns the key leaves and their account is deactivated, this Zap breaks immediately. Use a shared admin account or a service user to generate the key.
Zapier settings
Connection
Choose a connection…Add
click Add
Slack
Log in to authorize
Authorize Zapier
popup window
Connected
green checkmark
4

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.

  1. 1Click 'Test Trigger'
  2. 2Review the 3 sample records returned
  3. 3Click the record that has the most complete deal data
  4. 4Click 'Continue with selected record'
What you should see: You should see a list of raw fields from Close including lead_id, status_label, value, value_formatted, display_name, and assigned_to fields.
Common mistake — If no records appear, Close hasn't logged any lead updates recently via the connected user's API scope. Manually update a test lead in Close, then click 'Test Trigger' again.
Zapier
▶ Turn on & test
executed
Slack
Close
Close
🔔 notification
received
5

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.

  1. 1Click the '+' button between Trigger and Action
  2. 2Select 'Filter by Zapier' from the built-in tools list
  3. 3Set Condition 1: 'Status Label' > '(Text) Exactly matches' > 'Won'
  4. 4Click 'OR'
  5. 5Set Condition 2: 'Value' > '(Number) Greater than or equal to' > '10000'
  6. 6Click 'Continue'
What you should see: You should see 'Filter will allow Zap to continue' in green if your sample record matches either condition. If it says 'would have stopped', your sample record doesn't match — that's expected if you're testing with a low-value lead.
Common mistake — Close stores deal value in cents in some API responses (e.g., 10000 = $100). Check whether your sample data shows 10000 meaning $10,000 or $100 before setting your filter threshold. The 'value_formatted' field shows the human-readable version with currency symbol — use that to verify.
Slack
SL
trigger
filter
Condition
matches criteria?
yes — passes through
no — skipped
Close
CL
notified
6

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.

  1. 1Click the Action block
  2. 2Type 'Slack' in the app search field
  3. 3Select 'Slack' from the results
  4. 4Choose 'Send Channel Message' from the event dropdown
  5. 5Click 'Continue'
What you should see: You should see 'App: Slack' and 'Event: Send Channel Message' confirmed, with a prompt to connect your Slack workspace.
7

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.

  1. 1Click 'Sign in to Slack'
  2. 2Select your workspace from the Slack dropdown
  3. 3Click 'Allow' to grant Zapier posting permissions
  4. 4Return to the Zap editor
What you should see: You should see your Slack workspace name listed as a connected account with a green checkmark.
Common mistake — If your Slack workspace requires admin approval for third-party apps, Zapier will show as 'pending' and messages won't post until an admin approves it in Slack's App Management. Check this before going live.
8

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.

  1. 1Click the Channel field and select your target Slack channel (e.g., #deals-won)
  2. 2Click into the Message Text field
  3. 3Type '🎉 Deal Update: ' then click the '+' icon to insert 'Display Name' from Close
  4. 4Continue building: ' | Status: ' + insert 'Status Label' + ' | Value: ' + insert 'Value Formatted'
  5. 5Add a new line: 'Assigned to: ' + insert 'Assigned To Name'
  6. 6Optionally add 'View in Close: ' + insert 'Lead URL'
What you should see: The message preview should show something like: '🎉 Deal Update: Acme Corp | Status: Won | Value: $12,500 — Assigned to: Jordan Lee — View in Close: https://app.close.com/lead/...'
Common mistake — The 'Assigned To' field from Close returns a user ID string like 'user_abc123', not a name. Use the 'Assigned To Name' field specifically — Zapier's Close integration resolves this to the display name. If you use the raw ID, your Slack message will show a useless string.
Message template
📬 New entry: {{1.name}}
Email: {{1.email}}
Details: {{1.description}}
9

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.

  1. 1Scroll down to 'Bot Name' and type 'Close CRM'
  2. 2Click 'Bot Icon' and type ':chart_with_upwards_trend:' or paste a logo URL
  3. 3Leave 'Send as a user' toggled OFF unless you want messages attributed to your personal Slack account
What you should see: The preview pane should show your bot name and icon in the simulated Slack message display.
10

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.

  1. 1Click 'Test action'
  2. 2Open Slack and navigate to your target channel
  3. 3Verify the message content matches your expected format
  4. 4Click the Close URL in the message to confirm it opens the correct lead record
What you should see: A formatted Slack message should appear in your channel within 10 seconds. It should show the company name, status, deal value with currency symbol, rep name, and a working Close link.
11

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.

  1. 1Click 'Publish' in the top-right corner
  2. 2Confirm the activation dialog
  3. 3Navigate to 'Zap History' in the left sidebar to monitor live runs
  4. 4Update a test lead in Close to trigger the first real run
What you should see: The Zap shows a green 'On' badge in your Zap list. The first real deal update in Close should appear in Zap History as a successful run within 2 minutes.
Common mistake — Zapier's webhook for Close re-registers every time the Zap is toggled off and on. If you pause this Zap and re-enable it, any lead updates that happened while it was off are not backfilled — those alerts are permanently missed.

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

VerdictWhy Zapier for this workflow

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.

Cost

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.

Tradeoffs

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 channelsAdd 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 reportingAdd 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 pingsFor 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

Was this guide helpful?
Slack + Close overviewZapier profile →