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

How to Send Close Lead Assignments to Slack with Make

When a lead is assigned in Close, Make fires a webhook and posts a formatted message to the assigned rep's dedicated Slack channel with company size, lead source, and contact details.

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 where each rep owns a personal Slack channel and needs instant visibility when a new lead lands in their queue.

Not ideal for

Teams that assign leads in bulk via CSV import — webhook triggers fire per-record and will flood Slack at high import volume.

Sync type

real-time

Use case type

notification

Real-World Example

💡

A 12-person SaaS sales team at a B2B company gets inbound leads from three sources: website demo requests, outbound sequences, and partner referrals. Before this automation, reps refreshed Close manually and routinely waited 45–90 minutes before touching a new lead. After setup, the moment a lead owner is set in Close, the assigned rep gets a Slack message in their personal channel with the company name, employee count, lead source, and the contact's phone number — median response time dropped from 68 minutes to under 9.

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 API key with read access to leads, contacts, and users — generate at app.close.com > Settings > API Keys
Slack app with chat:write and users:read.email OAuth scopes approved in your workspace — Slack admin approval may be required
Make account with an active plan (Free tier supports instant triggers but limits to 1,000 ops/month — this workflow uses ~4 ops per lead assignment)
Each sales rep must have a Slack account using the same email address recorded in Close, or the user lookup in Step 7 will fail
Webhook registration access in Close (Settings > Integrations > API) — requires Close Admin or Manager role

Field Mapping

Map these fields between your apps.

FieldAPI Name
Required
Lead IDlead_id
Lead Display Namedisplay_name
Assigned To (User ID)assigned_to
Assigned To Emailassigned_to_email
Contact Namecontacts[1].name
Contact Emailcontacts[1].emails[1].email
Changed Fieldschanged_fields
4 optional fields▸ show
Lead Sourcelead_source
Number of Employeesnum_employees
Contact Phonecontacts[1].phones[1].phone
Lead Statusstatus_label

Step-by-Step Setup

1

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 the Scenarios dashboard. You'll land on the visual canvas with a single empty module in the center. This is where you'll set the trigger. Name the scenario immediately — click the default name at the top ('New scenario') and type something like 'Close Lead Assignment → Slack'.

  1. 1Click 'Create a new scenario' in the top right
  2. 2Click the empty circle module on the canvas
  3. 3Type 'Close' in the app search bar
  4. 4Select 'Close' from the results
  5. 5Choose 'Watch Events (Instant)' as the trigger
What you should see: You should see the Close module added to the canvas with a configuration panel open on the right side labeled 'Watch Events (Instant)'.
Common mistake — Make has two Close trigger options: 'Watch Events (Instant)' uses webhooks and fires within seconds. 'Watch Leads' polls on a schedule. Use Watch Events — polling adds up to a 15-minute delay for time-sensitive lead alerts.
2

Close > Settings > API Keys | Make > Close module > Connection > Add

Connect your Close account

In the Close module config panel, click 'Add' next to the Connection field. A dialog will ask for your Close API key. Go to Close at app.close.com, open your profile menu in the bottom left, click 'Settings', then 'API Keys', and generate a new key labeled 'Make Integration'. Paste that key into Make and click Save.

  1. 1In the Close module panel, click 'Add' next to Connection
  2. 2Open Close in a new tab: app.close.com > Settings > API Keys
  3. 3Click 'Generate API Key' and label it 'Make Integration'
  4. 4Copy the key immediately — Close only shows it once
  5. 5Paste the key into Make's connection dialog and click Save
What you should see: The Connection field in the Close module should now show your Close account name (usually your email or org name) with a green dot.
Common mistake — Close API keys are shown only once at creation. If you navigate away before copying it, you'll have to delete it and generate a new one.
Make settings
Connection
Choose a connection…Add
click Add
Slack
Log in to authorize
Authorize Make
popup window
Connected
green checkmark
3

Make > Close module > Event Type > Lead > Action > updated

Configure the lead assignment event trigger

With the connection set, you now configure which Close event fires the scenario. In the Event Type dropdown, select 'Lead'. In the Object Type dropdown, select 'lead'. In the Action dropdown, select 'updated'. This catches any lead update — you'll filter specifically for assignment changes in the next step. Click OK to save the module.

  1. 1Set Event Type to 'Lead'
  2. 2Set Object Type to 'lead'
  3. 3Set Action to 'updated'
  4. 4Leave Webhook Name blank — Make auto-generates it
  5. 5Click OK
What you should see: The Close module on the canvas should now show 'Watch Events (Instant)' with a small lightning bolt icon indicating it's a webhook-based trigger.
Make
+
click +
search apps
Slack
SL
Slack
Configure the lead assignmen…
Slack
SL
module added
4

Close > Settings > Integrations > API > Webhooks > Add Webhook

Register the webhook in Close

Make auto-generated a webhook URL when you saved the trigger. You now need to register it in Close so Close knows to send events to Make. Back in Make, click the Close module and look for the generated webhook URL — it appears in a blue info box at the bottom of the config panel. Copy it. In Close, go to Settings > Integrations > API and find the Webhooks section. Click 'Add Webhook', paste the URL, and select 'lead.updated' as the event type.

  1. 1In Make, click the Close module and copy the webhook URL from the blue info box
  2. 2In Close, go to Settings > Integrations > API
  3. 3Scroll to Webhooks and click 'Add Webhook'
  4. 4Paste the Make webhook URL into the URL field
  5. 5Select 'lead.updated' from the event type list and click Save
What you should see: Close should show your new webhook in the list with a green status indicator. Make's Close module should now display 'Waiting for data' when you run it.
Common mistake — Close sends webhooks for ALL lead.updated events — every field change, not just owner changes. The filter you add in Step 5 is mandatory, or every lead edit will ping Slack.
5

Make > Canvas > Arrow between modules > Filter (wrench icon)

Add a filter for owner assignment changes

Click the small wrench icon on the arrow between the Close module and the next empty module slot. This opens the Filter dialog. You need to filter so the scenario only continues when the assigned_to field actually changed. Set Condition A: Field = 'changed_fields', Operator = 'Contains', Value = 'assigned_to'. This tells Make to only proceed when Close explicitly flags the owner field as modified.

  1. 1Click the small wrench icon on the connector arrow after the Close module
  2. 2Click 'Add AND condition'
  3. 3In Field, type or select 'changed_fields'
  4. 4Set Operator to 'Contains'
  5. 5Set Value to 'assigned_to'
  6. 6Click OK
What you should see: The arrow between modules should now show a small filter icon (funnel shape), confirming the condition is active.
Common mistake — The changed_fields array in Close webhooks is a plain text array. Use 'Contains' not 'Equals' — the array may include multiple changed fields alongside assigned_to.
Slack
SL
trigger
filter
Condition
matches criteria?
yes — passes through
no — skipped
Close
CL
notified
6

Make > Canvas > + > Close > Get a Lead

Fetch full lead details from Close

The webhook payload from Close gives you the lead ID and changed fields but not all the rich data you need for the Slack message (company size, lead source, contact phone). Add a second Close module to pull the full lead record. Click the + icon after the filter, search 'Close', and select 'Get a Lead'. Map the Lead ID field to the lead_id value from the webhook trigger output.

  1. 1Click the + icon after the filter arrow
  2. 2Search for 'Close' and select it
  3. 3Choose 'Get a Lead' as the action
  4. 4Select the same Close connection from the dropdown
  5. 5In the Lead ID field, click the map icon and select 'lead_id' from the trigger output
  6. 6Click OK
What you should see: The 'Get a Lead' module appears on the canvas. When you run a test, you should see the full lead object in the output including name, contacts, lead_source, and custom fields.
Common mistake — Don't skip this step and try to build the Slack message from the webhook payload alone — the webhook only includes delta data (what changed), not the full lead record.
7

Make > Canvas > + > Slack > Look Up a User by Email

Look up the assigned rep's Slack user ID

Close stores the assigned rep as a Close user ID (e.g. 'user_abc123'), not a Slack username. You need to resolve this to a Slack user ID to route the message correctly. Add a Slack module: 'Look Up a User by Email'. In Close, the assigned user's email is available via the 'Get a Lead' output under assigned_to_email if you've mapped it, or you can add a 'Get a User' Close module first to resolve the Close user ID to an email, then feed that into the Slack lookup.

  1. 1Click the + icon after the 'Get a Lead' module
  2. 2Search 'Slack' and select it
  3. 3Choose 'Look Up a User by Email'
  4. 4Connect your Slack workspace (OAuth popup will appear)
  5. 5In the Email field, map the assigned rep's email from the Close 'Get a Lead' output
  6. 6Click OK
What you should see: The Slack 'Look Up a User by Email' module output should include the user's Slack ID (format: U0XXXXXXX) and their display name.
Common mistake — This only works if the email in Close matches the email in Slack exactly. If your team uses aliases or different email domains in the two tools, the lookup will return empty and the scenario will fail silently unless you add an error handler.
8

Make > Slack module > Connection > Add > OAuth

Connect your Slack workspace

If you didn't authenticate Slack in the previous step, click the Slack module, then click 'Add' next to Connection. Make opens an OAuth window — sign into your Slack workspace and authorize the Make app. Make needs the chat:write and users:read.email scopes at minimum for this workflow. These are granted automatically during the OAuth flow if your Slack admin has approved the Make app.

  1. 1Click 'Add' next to the Connection field in the Slack module
  2. 2Click 'Sign in with Slack' in the popup
  3. 3Select your workspace from the dropdown
  4. 4Review and click 'Allow' on the permissions screen
  5. 5Return to Make — the connection should auto-populate
What you should see: The Connection dropdown in the Slack module shows your Slack workspace name with a green dot. No red error banner.
Common mistake — If your Slack workspace requires admin approval for third-party apps, the OAuth flow will hang or show a 'Request sent to admin' message. You'll need Slack admin approval before continuing.
9

Make > Canvas > + > Slack > Send a Message

Add the Slack 'Send a Message' module

Add one more Slack module after the user lookup: 'Send a Message'. For the Channel field, use the Slack user ID from the previous step prefixed with nothing — when you pass a Slack user ID (U0XXXXXXX) as the channel, Slack sends the message as a direct message to that user. Alternatively, if your team uses named per-rep channels (like #rep-jordan), you can use a text formula to build the channel name dynamically from the rep's display name.

  1. 1Click the + icon after the 'Look Up a User by Email' module
  2. 2Select 'Slack' > 'Send a Message'
  3. 3In the Channel field, map the Slack user ID from the lookup module output
  4. 4Build the message text using the fields in the next step
  5. 5Click OK after completing the message body
What you should see: The 'Send a Message' module appears on the canvas. The Channel field should show a dynamic mapped value, not a hardcoded string.
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}}
message template
🔔 New Record: {{text}} {{user}}
channel: {{channel}}
ts: {{ts}}
#sales
🔔 New Record: Jane Smith
Company: Acme Corp
10

Make > Slack 'Send a Message' module > Text field

Build the Slack message with lead details

In the 'Send a Message' module, click into the Text field and build the message. Use Make's variable mapper to pull in fields from the 'Get a Lead' output. A good format includes: lead name, company, lead source, number of employees, primary contact name, phone, and email. Use Make's if() formula to handle null fields gracefully — for example, if company size isn't filled in, show 'Unknown' instead of a blank.

  1. 1Click into the Text field of the 'Send a Message' module
  2. 2Type the message structure and use the variable picker (click the map icon) to insert dynamic fields
  3. 3Map: Lead Name from 'Get a Lead' > display_name
  4. 4Map: Lead Source from 'Get a Lead' > lead_source
  5. 5Map: Company Size from 'Get a Lead' > custom fields or num_employees
  6. 6Map: Contact Name, Email, Phone from 'Get a Lead' > contacts[0]
  7. 7Wrap optional fields in if() formulas to avoid blank lines
What you should see: The Text field should show a mix of static text and orange dynamic variable tokens. Click 'Show advanced settings' to enable Markdown formatting if you want bold headers in Slack.
Common mistake — Close stores contacts as an array. If a lead has multiple contacts, contacts[1].phones[1].phone only returns the first phone of the second contact. Use contacts[1].phones[1].phone carefully — most leads have one contact, but enterprise leads sometimes have several.
Message template
📬 New entry: {{1.name}}
Email: {{1.email}}
Details: {{1.description}}
11

Make > Canvas > Run once button > Toggle (bottom of canvas)

Test and activate the scenario

Click 'Run once' at the bottom left of the canvas. In Close, open any lead and change its assigned owner — this fires the webhook. Return to Make and watch the execution bubble animate across each module. Click each module bubble to inspect the data it processed. Confirm the Slack message arrived in the correct channel. Once the test passes, click the toggle at the bottom of the canvas from OFF to ON to activate the scenario.

  1. 1Click 'Run once' at the bottom left of the canvas
  2. 2In Close, open any test lead and change the assigned owner
  3. 3Return to Make and watch the execution complete
  4. 4Click each module bubble to verify output data is correct
  5. 5Check Slack to confirm the message arrived in the right channel
  6. 6Click the ON/OFF toggle to activate the scenario
What you should see: All module bubbles turn green. The Slack channel shows a formatted message with the lead's company name, source, size, and contact details. The scenario status shows 'Active' in the Scenarios list.

Paste this formula into the Text field of the Slack 'Send a Message' module in Make. It handles null fields for company size, phone, and lead source so your Slack messages never have empty bullet points. Replace the contacts[1] references with the actual array index Make resolves during mapping.

JavaScript — Custom Function{{if(1.display_name; 1.display_name; 'Unnamed Lead')}}
▸ Show code
{{if(1.display_name; 1.display_name; 'Unnamed Lead')}}
*Source:* {{if(1.lead_source; 1.lead_source; 'Not specified')}}
*Company Size:* {{if(1.num_employees; toString(1.num_employees) + ' employees'; 'Unknown')}}

... expand to see full code

{{if(1.display_name; 1.display_name; 'Unnamed Lead')}}

*Source:* {{if(1.lead_source; 1.lead_source; 'Not specified')}}
*Company Size:* {{if(1.num_employees; toString(1.num_employees) + ' employees'; 'Unknown')}}
*Status:* {{if(1.status_label; 1.status_label; 'No status set')}}

*Primary Contact*
Name: {{if(2.contacts[].name; 2.contacts[].name; 'No contact name')}}
Email: {{if(2.contacts[].emails[].email; 2.contacts[].emails[].email; 'No email on file')}}
Phone: {{if(2.contacts[].phones[].phone; 2.contacts[].phones[].phone; 'No phone on file')}}

*Assigned to:* {{3.profile.real_name}}
<{{concat('https://app.close.com/lead/'; 1.lead_id; '/')}}|View in Close →>
Make
▶ Run once
executed
Slack
Close
Close
🔔 notification
received

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 needs conditional routing (different Slack channels based on lead source or company size) or if you want to enrich the notification with data from a third source like Clearbit or your own database. Make's Router module handles branching logic without any code, and the visual canvas makes it easy to audit what's happening when a notification misfires. The one scenario where you'd skip Make: if your whole team is already on Zapier and you have fewer than 50 lead assignments per month — setup time on Zapier is roughly half, and the simpler Zap format is easier for a non-technical sales ops person to maintain.

Cost

The math is straightforward. Each lead assignment costs 4 Make operations: trigger, lead fetch, user lookup, message send. At 200 assignments per month, that's 800 ops. Make's Free plan caps at 1,000 ops/month total, so a busy team will need the Core plan at $9/month which includes 10,000 ops. Zapier charges per task — the same 200 assignments would cost 800 tasks/month, landing you in Zapier's Starter plan at $19.99/month. Make is $10.99/month cheaper for identical volume. At 500 assignments/month (2,000 ops), Make Core still covers it. Zapier would require the Professional plan at $49/month.

Tradeoffs

Zapier's Close integration has a dedicated 'New Lead (Instant)' trigger that's slightly faster to configure — no manual webhook registration in Close required. n8n handles this workflow with more flexibility if you self-host and need to avoid per-operation costs entirely; its Close node and the function node for message formatting are well-documented. Power Automate has no native Close connector — you'd build on the HTTP trigger with custom connectors, which adds 2-3 hours of setup and isn't worth it unless your company is already Microsoft-first. Pipedream is the strongest alternative if you want to write JavaScript to format the Slack message exactly how you want it and handle the user ID resolution in a single code step rather than a separate module. Make wins here because the visual layout makes the filter-then-branch logic easy to review without reading code — when a notification stops working at 9am on a Monday, the sales ops manager can open Make and see exactly which module failed without touching a terminal.

Three things you'll run into after launch. First, Close's webhook payload for lead.updated does not always include the full assigned_to_email field — sometimes it only sends the Close user ID. Budget for the extra 'Get a User' Close API call to resolve the user ID to an email, or the Slack lookup step will fail. Second, if your Slack workspace has strict app permission policies, the Make app's chat:write scope may be silently downgraded to only posting in channels where it's been explicitly invited — DMs to reps will fail with no obvious error until you check Slack's audit logs. Third, Close rate-limits API calls to 40 requests per 10 seconds per API key. If you're running other Make scenarios or third-party tools against the same Close API key simultaneously, you'll occasionally hit 429 errors on the 'Get a Lead' fetch. Use a dedicated API key for this workflow and enable Make's auto-retry setting on that module.

Ideas for what to build next

  • Add a daily digest for uncontacted leadsBuild a second Make scenario on a morning schedule that queries Close for leads assigned in the last 24 hours with no activity logged, then posts a summary list to a team Slack channel — catches anything that slipped through without a follow-up.
  • Route by lead source to different Slack channelsAdd a Router module between the filter and the Slack message step. Create separate routes for each lead source (e.g. partner referrals go to #partner-leads, demo requests go to the rep's DM) so high-priority sources get extra visibility.
  • Log assignments back to Close as activityAfter the Slack message fires, add a Close 'Create Activity' module that logs 'Lead assigned and rep notified via Slack' with a timestamp — gives managers a clean audit trail of assignment events without switching between tools.

Related guides

Was this guide helpful?
Slack + Close overviewMake profile →